SkyWalking 服务集成的核心方式 —— Java Agent 探针注入

下面我们对这一部分进行系统化、实战化讲解,帮助你真正掌握如何将 Java 应用接入 SkyWalking,实现无侵入式监控。


🧩 服务集成(探针部署)—— Java 应用接入指南

✅ 核心方式:Java Agent(字节码增强)

SkyWalking 对 Java 应用的监控主要通过 Agent(探针) 实现,采用 Java Agent + 字节码增强技术,在类加载时自动注入监控代码,无需修改业务代码,属于 低侵入甚至无侵入 的集成方式。


一、前置准备

1. 下载 SkyWalking 发行版(获取 Agent)

前往官网下载包含 Agent 的二进制包:

🔗 https://skywalking.apache.org/downloads/

选择最新稳定版本(如 9.7.0):

# 示例:下载并解压
wget https://downloads.apache.org/skywalking/9.7.0/apache-skywalking-apm-9.7.0.tar.gz
tar -xzf apache-skywalking-apm-9.7.0.tar.gz

解压后目录结构如下:

apache-skywalking-apm-bin/
├── agent/                    # ← Agent 核心目录
│   ├── skywalking-agent.jar
│   ├── activation/
│   ├── config/
│   └── plugins/
├── bin/
├── config/
└── webapp/

✅ 我们重点关注 agent/ 目录,尤其是 skywalking-agent.jar


二、接入步骤:启动时挂载 Agent

方法:在 java -jar 命令中添加 -javaagent 参数

java \
  -javaagent:/your/path/to/skywalking-agent/skywalking-agent.jar \
  -DSW_AGENT_NAME=my-service \
  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800 \
  -jar your-application.jar

🔍 参数详解

参数 说明 是否必需
-javaagent 指定 Agent JAR 路径 ✅ 必需
-DSW_AGENT_NAME 设置服务名称(在 UI 中显示) ✅ 建议设置
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES OAP 服务地址(host:port) ✅ 必需
-DSW_AGENT_SAMPLE_RATE 采样率(0~10000,10000=100%) ❌ 可选
-DSW_LOGGING_DIR Agent 日志输出目录 ❌ 可选

📌 默认配置文件:agent/config/agent.config,你也可以通过 -Dskywalking.agent.config 指定自定义配置文件。


💡 示例:完整启动命令

java \
  -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
  -DSW_AGENT_NAME=order-service \
  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.1.100:11800 \
  -DSW_AGENT_SAMPLE_RATE=10000 \
  -jar order-service.jar

✅ 启动后,应用会自动向 SkyWalking OAP 上报数据。


三、验证是否接入成功

  1. 访问 SkyWalking UI:http://localhost:8080
  2. 进入 “服务”(Services) 页面
  3. 查找你设置的服务名(如 order-service
  4. 发起一个请求(如调用 API)
  5. 查看是否有 调用链(Trace)指标数据 出现

✅ 成功标志:

  • 拓扑图中出现新服务节点
  • 调用链列表有数据
  • JVM 指标(内存、GC)可查看

四、Agent 工作原理(简要了解)

阶段 说明
1. 类加载拦截 使用 Instrumentation API 拦截类加载
2. 字节码增强 在目标方法前后插入监控代码(如 Spring Controller、Dubbo 调用、JDBC)
3. 数据采集 收集 Span、指标、JVM 信息
4. 上报 OAP 通过 gRPC 协议发送到 SkyWalking OAP Server

🎯 支持的框架(无需额外配置):

  • Spring Boot / Spring MVC
  • Dubbo、gRPC、Feign
  • Tomcat、Jetty、Undertow
  • MySQL、PostgreSQL、Redis、Kafka
  • HTTP Client(OkHttp、HttpClient)

五、常见问题与排查

问题 可能原因 解决方案
服务未出现在 UI Agent 未加载或网络不通 检查 -javaagent 路径、OAP 地址、防火墙
无调用链数据 未触发请求或采样率太低 发起请求,检查 -DSW_AGENT_SAMPLE_RATE
Agent 启动报错 JDK 版本不兼容 SkyWalking 9.x 支持 JDK 8+,建议使用 JDK 8/11/17
日志报 Cannot find collector OAP 地址错误 确保 SW_AGENT_COLLECTOR_BACKEND_SERVICES 正确
中文乱码 日志编码问题 agent/config/agent.config 中设置 logging.encoding=UTF-8

六、生产环境建议

项目 建议配置
采样率 生产环境可设为 1000(10%)或更低,避免性能开销
Agent 路径 使用绝对路径,避免启动失败
OAP 地址 使用内网 IP 或服务发现地址
日志目录 单独指定,便于排查 Agent 自身问题
版本管理 统一 Agent 版本,避免兼容性问题

七、其他部署方式(扩展了解)

方式 说明
Kubernetes DaemonSet 在 K8s 中通过 sidecar 或 initContainer 注入 Agent
镜像内置 Agent 构建 Docker 镜像时将 Agent 打包进去
Jenkins/CICD 自动注入 在发布脚本中动态添加 -javaagent 参数

示例:Dockerfile 中集成 Agent

COPY skywalking-agent /skywalking-agent
ENTRYPOINT ["java", "-javaagent:/skywalking-agent/skywalking-agent.jar", \
            "-DSW_AGENT_NAME=product-service", \
            "-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=oap:11800", \
            "-jar", "/app.jar"]

✅ 总结:Java 应用接入四步法

步骤 操作
1️⃣ 下载 获取 SkyWalking 发行版,提取 agent/ 目录
2️⃣ 配置 设置服务名和 OAP 地址(通过 JVM 参数)
3️⃣ 启动 使用 -javaagent 挂载探针
4️⃣ 验证 在 UI 中查看服务、调用链、指标数据
Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐