如何将SkyWalking集成到Tomcat并为各服务设置对应服务名
为Tomcat中多个部署服务配置SkyWalking独立服务名
你之前的写法无效是因为在同一个JavaAgent参数中重复指定agent.service_name时,最后一个参数会覆盖前面所有值,所以最终只会生效test2。针对Tomcat多服务场景,正确的配置方式如下:
核心思路
Tomcat单个实例加载的JavaAgent是全局的,要为每个Web应用设置独立服务名,需开启SkyWalking Agent的Web应用服务名自动读取功能,然后为每个服务单独配置上下文参数。
具体步骤
1. 全局配置JavaAgent
在Tomcat的启动脚本中(如catalina.bat)设置全局Agent参数,不要指定agent.service_name:
set CATALINA_OPTS=-javaagent:D:\Tools\apache-skywalking-apm-8.9.0\agent\skywalking-agent.jar
2. 修改SkyWalking Agent配置
打开agent/config/agent.config,开启从Web应用上下文读取服务名的开关:
# 开启从Web应用上下文参数读取服务名 agent.service_name_from_context=true # 设置默认服务名(当Web应用未配置时使用) agent.service_name=${SW_AGENT_NAME:default-tomcat-service}
3. 为每个Web应用配置独立服务名
任选以下一种方式为每个服务设置专属服务名:
方式一:修改Web应用的web.xml
在每个Web应用的WEB-INF/web.xml中添加上下文参数:
<context-param> <param-name>skywalking.agent.service_name</param-name> <param-value>test1</param-value> <!-- 替换为对应服务的名称 --> </context-param>
方式二:使用Tomcat上下文配置文件
在Tomcat的conf/Catalina/localhost目录下,为每个Web应用创建独立的XML配置文件(比如服务名为test1,就创建test1.xml),内容如下:
<Context path="/test1" docBase="test1.war"> <Parameter name="skywalking.agent.service_name" value="test1" override="false"/> </Context>
验证
启动Tomcat后,查看SkyWalking UI,就能看到每个服务以各自配置的名称注册到监控平台中。
内容的提问来源于stack exchange,提问作者joker
相关产品推荐
相关产品推荐

