アプリケーションに付けた名前は、New Relic のパフォーマンス指標を整理するのに役立ちます。
New Relic の Java エージェントは、 newrelic.yml
で、 app_name
という設定で指定されたアプリケーション名に対して、単一の JVM 内のすべてのトランザクションやその他のメトリクスを報告します (アプリケーションの命名に関する詳細は、 Name your Java application を参照してください)。 enable_auto_app_naming
in newrelic.yml
を true
に変更することで、アプリケーションはそのコンテキスト、フィルタ、サーブレット、またはリクエスト属性に合わせて命名されます。
この設定により、複数のウェブアプリケーションを1つのJVMで実行しながら、トランザクション、エラー、メトリクスをNew Relicのユーザーインターフェースで他の適切なアプリケーションに報告することができます。バックグラウンドタスクは、これまで通り newrelic.yml
のデフォルトのアプリケーション名を使用します。
重要
これらの設定変更を有効にするには、JVMの再起動が必要です。
この設定はInfinite Tracingを有効にした場合には機能しません。
注意
アプリの自動ネーミングを有効にすると、エージェントに取り込まれるデータ量が増加します。 データ取り込みの警告と監視を行うには様々な方法があります 。
アプリケーション名のソース
enable_auto_app_naming
を true
に設定すると、New Relic は以下の情報源を使ってアプリケーションの名前を付けます。
アプリの種類 | ネーミングソース |
---|---|
バックグラウンドタスク |
|
Webトランザクション | 優先順位の高い順に並べています。
|
リクエスト属性
APPLICATION_NAME
リクエスト属性は、XML内のどの設定よりも優先されます。この属性は、Web トランザクションのできるだけ早い段階で設定してください。複数回呼び出された場合は、最後に呼び出されたものがアプリケーション名を決定します。
ヒント
APPLICATION_NAME
は ServletRequests でのみ動作します。
request属性を使用して、リクエストURIに基づいたきめ細かなアプリケーションの命名を行うこと。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String requestUri = httpServletRequest.getRequestURI();
if (requestUri.startsWith("/my-special-request/")) { request.setAttribute("com.newrelic.agent.APPLICATION_NAME", "MySpecialWebApp"); } ...
サーブレットの初期化パラメーター
web.xml
の個々のサーブレットにアプリケーション名を設定するには、 init パラメータを使用します:
<servlet> <servlet-name>SqlServlet</servlet-name> <servlet-class>test.SqlServlet</servlet-class> <init-param> <param-name>com.newrelic.agent.APPLICATION_NAME</param-name> <param-value>MyServletApp</param-value> </init-param></servlet>
エージェントは、 init-param
を呼び出すことで、その値を取得します。
javax.servlet.ServletConfig#getInitParameter(String)
を引数にして com.newrelic.agent.APPLICATION_NAME
.
Web リクエストが複数のサーブレットを呼び出す場合は、最初に終了したサーブレットの init-param
が優先されます。 init-param
を持っていないサーブレットは、ウェブアプリのデフォルトのアプリケーション名を使用します。
アプリケーション名は、XMLで宣言する以外にも、javax.servlet.ServletRequestに属性を格納することで、アプリケーションコードで設定することができます。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... request.setAttribute("com.newrelic.agent.APPLICATION_NAME", "MyWebApp"); ...
フィルターの初期化パラメーター
Webアプリにサーブレットがない場合は、フィルタのinitパラメータを使うことができます。
<filter> <filter-name>SqlFilter</filter-name> <filter-class>test.SqlFilter</filter-class> <init-param> <param-name>com.newrelic.agent.APPLICATION_NAME</param-name> <param-value>MyFilterApp</param-value> </init-param></filter>
エージェントは、 init-param
の値を、 javax.servlet.FilterConfig#getInitParameter(String)
を引数に com.newrelic.agent.APPLICATION_NAME
を呼び出すことで取得します。アプリケーションの名前付けは、フィルタよりもサーブレットが優先されるため、フィルタのinitパラメータは、サーブレットが呼び出されなかった場合にのみ使用されます。最初に終了したフィルタの init-param
が優先されます。
コンテキストパラメータ
コンテキストパラメーターを使ってアプリケーション名を設定するには
<context-param> <param-name>com.newrelic.agent.APPLICATION_NAME</param-name> <param-value>MyWebApp</param-value></context-param>
エージェントは、 javax.servlet.ServletContext#getInitParameter(String)
を引数に com.newrelic.agent.APPLICATION_NAME
を呼び出すことで、コンテキスト・パラメータの値を取得します。コンテキストパラメータは、 display-name
要素よりも優先されます。
表示名
display-name
element in web.xml
を使ってアプリケーション名を決定する。
<display-name>MyWebApp</display-name>
エージェントは、 display-name
要素の値を、 javax.servlet.ServletContext#getServletContextName()
を呼び出すことで取得します。
コンテクストパス
display-name
要素がなく、アプリ名を設定するために他の上位階層の方法が使用されていない場合、アプリ名はウェブアプリのコンテキストパスから得られます。エージェントは、 javax.servlet.ServletContext#getContextPath()
を呼び出すことで、コンテキストパスを取得します。
コンテキストパスは、リクエストのコンテキストを選択するために使用されるリクエストURIの部分です。コンテキストパスは、リクエストURIの中で常に最初に置かれます。例えば、以下のようになります。
次のようなURLを考えてみましょう。
http://example.com/newrelic-axis2-ws/getWeather
このURLに
- リクエストURIは
/newrelic-axis2-ws/getWeather
です。 - コンテキストパスは
/newrelic-axis2-ws
です。 - アプリケーション名は
newrelic-axis2-ws
です。