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 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");
}
...
配置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 使用默认的应用名称。
如果没有使用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 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内容
配置web.xml文件的display-name元素命名应用:
<display-name>MyApplicationName</display-name>
Java 探针通过调用javax.servlet.ServletContext#getServletContextName()
获取display-name内容。
如果没有配置display-name, 其他一些高优先级的属性也没有设置,Java Agent通过调用javax.servlet.ServletContext#getContextPath()
获得context path,来命名应用过程。
Context path一般作request URI的一部分,且在最前面。例如:如果一个url类似这样:http://www.sample.com/tingyun-agent/testHttpClient: