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

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

在单一的JVM实例上,Java Agent将所有性能数据(Web应用过程、数据库、NoSQL、错误、JVM、后台任务等)汇总到**tingyun.properties**文件中通过nbs.app_name指定的应用名称上。修改**tingyun.properties**文件里nbs.auto_app_naming为**true**后, 应用将根据其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**元素命名应用:

MyApplicationName

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.