首页 帮助中心 基调听云Server 应用自动命名
基调听云Server

应用自动命名

Java Agent 通过应用名称归类应用性能数据。

在单一的JVM实例上,Java Agent将所有性能数据(Web应用过程、数据库、NoSQL、错误、JVM、后台任务等)汇总到tingyun.properties文件中通过nbs.app_name指定的应用名称上。修改tingyun.properties文件里nbs.auto_app_namingtrue后, 应用将根据其context, filter, servlet, 或者request attribute自动命名为不同的名称。

自动命名适用于单个JVM上运行多个应用,Java Agent会将Web应用过程、数据库、NoSQL、错误、JVM数据上传到不同的应用。但是后台任务依然会被上传到tingyun.properties文件配置的应用名称上。

备注: 所有配置改动都需要重启JVM才能生效。

应用命名规则

当设置 nbs.auto_app_naming=true时,Java Agent使用如下规则命名应用:

Request attribute (高优先级)

Servlet init parameter

Filter init parameter

Web app context parameter

Web app context name (display-name)

Web app context path (低优先级)

Request attribute

Request attribute APPLICATION_NAME的优先级最高,请尽早的再Web应用过程中设置改属性,如果多次调用,最后一次设置会覆盖之前的设置。

备注: 只有设置在ServletRequests上APPLICATION_NAME 才会生效。

根据request URI设置应用名称:

  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ...
   String requestUri = httpServletRequest.getRequestURI();

   if (requestUri.startsWith("/your-owner-uri/")) {
       request.setAttribute("com.tingyun.agent.APPLICATION_NAME", "CustomApplicationName");
    }
    ...

Servlet init parameter

配置web.xml 中得 init parameters实现对应用的命名:

<servlet>
 <servlet-name>PayServlet</servlet-name>
 <servlet-class>com.example.PayServlet</servlet-class>
 <init-param>
   <param-name>com.tingyun.agent.APPLICATION_NAME</param-name>
   <param-value>OnlinePay</param-value>
 </init-param>
</servlet>

Java Agent通过调用如下方法来获取init-param内容

javax.servlet.ServletConfig#getInitParameter(String)

参数为com.tingyun.agent.APPLICATION_NAME.

如果有多个Servlet,第一个servlet的init-param生效. 如果没有指定init-param 使用默认的应用名称。

Filter init parameter

如果没有使用Servlet, 通过Filter的 init parameter 命名应用:

<filter>
  <filter-name>ProductFilter</filter-name>
  <filter-class>com.sample.ProductFilter</filter-class>
  <init-param>
    <param-name>com.tingyun.agent.APPLICATION_NAME</param-name>
    <param-value>ProductApplication</param-value>
   </init-param>
</filter>

Java Agent通过向javax.servlet.FilterConfig#getInitParameter(String)传递com.tingyun.agent.APPLICATION_NAME参数获取init-param内容

如果有多个filter,第一个filter的init-param生效。

Context parameter

使用context param命名应用:

<context-param>
  <param-name>com.tingyun.agent.APPLICATION_NAME</param-name>
  <param-value>MyWebApp</param-value>
</context-param>

Java Agent通过向javax.servlet.ServletContext#getInitParameter(String)传递com.tingyun.agent.APPLICATION_NAME参数获取context-param内容

Display name

配置web.xml文件的display-name元素命名应用:

<display-name>MyApplicationName</display-name>

Java 探针通过调用javax.servlet.ServletContext#getServletContextName()获取display-name内容。

Context path

如果没有配置display-name, 其他一些高优先级的属性也没有设置,Java Agent通过调用javax.servlet.ServletContext#getContextPath()获得context path,来命名应用过程。

Context path一般作request URI的一部分,且在最前面。例如:如果一个url类似这样:http://www.sample.com/tingyun-agent/testHttpClient:

  • Request URI是 /tingyun-agent/testHttpClient.
  • Context path 是 /tingyun-agent.
  • Application 会被命名为 tingyun-agent.