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 上报数据。
三、验证是否接入成功
- 访问 SkyWalking UI:http://localhost:8080
- 进入 “服务”(Services) 页面
- 查找你设置的服务名(如
order-service) - 发起一个请求(如调用 API)
- 查看是否有 调用链(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 中查看服务、调用链、指标数据 |
1万+

被折叠的 条评论
为什么被折叠?



