You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:01:13