アプリケーションに付けた名前は、New Relic のパフォーマンス指標を整理するのに役立ちます。
New Relic の Java エージェントは、単一の JVM 内のすべてのトランザクションとその他のメトリクスを、設定app_name
のnewrelic.yml
で指定されたアプリケーション名にレポートします (アプリケーションの名前付けの詳細については、 「Java アプリケーションに名前を付ける」を参照してください)。newrelic.yml
のenable_auto_app_naming
をtrue
に変更すると、アプリケーションにはコンテキスト、フィルター、サーブレット、またはリクエスト属性に応じた名前が付けられます。
この設定により、トランザクション、エラー、メトリクスを New Relic ユーザー インターフェースの他の適切なアプリケーションにレポートしながら、単一の JVM で複数の Web アプリケーションを実行できます。バックグラウンド タスクでは、引き続きnewrelic.yml
のデフォルトのアプリケーション名が使用されます。
重要
これらの設定変更を有効にするには、JVMの再起動が必要です。
この設定はInfinite Tracingを有効にした場合には機能しません。
注意
アプリの自動ネーミングを有効にすると、エージェントに取り込まれるデータ量が増加します。 データ取り込みの警告と監視を行うには様々な方法があります 。
アプリケーション名のソース
enable_auto_app_naming
をtrue
に設定すると、New Relic は次の情報ソースを使用してアプリケーションに名前を付けます。
App type | Naming source |
---|---|
バックグラウンドタスク | デフォルトのアプリケーション名 |
Webトランザクション | 優先順位の高い順に並べています。
|
リクエスト属性
APPLICATION_NAME
リクエスト属性は、XML 内のどの設定よりも優先されます。この属性は、Web トランザクションのできるだけ早い段階で設定します。複数回呼び出された場合、最後の呼び出しによってアプリケーション名が決定されます。
ヒント
APPLICATION_NAME
ServletRequest でのみ動作します。
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"); } ...
サーブレットの初期化パラメーター
init parametersを使用してweb.xml
内の個々のサーブレットのアプリケーション名を設定するには:
<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
のないサーブレットは、Web アプリのデフォルトのアプリケーション名を使用します。
アプリケーション名を 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>
エージェントは、引数com.newrelic.agent.APPLICATION_NAME
を指定してjavax.servlet.FilterConfig#getInitParameter(String)
を呼び出すことで、 init-param
の値を取得します。アプリケーションの命名に関してはサーブレットがフィルターよりも優先されるため、フィルターの init パラメーターはサーブレットが呼び出されなかった場合にのみ使用されます。最初に終了するフィルタのinit-param
が優先されます。
コンテキストパラメータ
コンテキストパラメーターを使ってアプリケーション名を設定するには
<context-param> <param-name>com.newrelic.agent.APPLICATION_NAME</param-name> <param-value>MyWebApp</param-value></context-param>
エージェントは、引数com.newrelic.agent.APPLICATION_NAME
を指定してjavax.servlet.ServletContext#getInitParameter(String)
を呼び出すことでコンテキスト パラメータの値を取得します。context パラメータは、 display-name
要素よりも優先されます。
表示名
web.xml
のdisplay-name
要素を使用してアプリケーション名を決定するには:
<display-name>MyWebApp</display-name>
エージェントは、 javax.servlet.ServletContext#getServletContextName()
を呼び出してdisplay-name
要素の値を取得します。
コンテクストパス
display-name
要素がなく、アプリ名の設定に他の上位階層メソッドが使用されていない場合、アプリケーション名は Web アプリのコンテキスト パスから取得されます。エージェントは、 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
です。