本文目录导读:

SkyWalking 的集成主要分为 Agent 端(数据采集)和 后端服务(数据存储与展示)两部分,下面按照通用流程和几种主流技术栈分别说明。
整体架构图(先看全局)
[业务服务] ———(gRPC/HTTP)—→ [SkyWalking OAP Server] ———→ [存储 (ES/MySQL)] —→ [SkyWalking UI] (挂载 Agent) (接收数据、分析、聚合) (持久化) (可视化)
- Agent:挂载在业务服务上,无需修改代码(Java)或少量修改(其他语言),自动采集链路、指标、日志。
- OAP Server:核心后端,负责数据接收、处理、告警。
- UI:前端展示。
Java 应用集成(最主流,无侵入)
这是 SkyWalking 最成熟的场景,无需修改代码,只需启动时增加 -javaagent 参数。
下载 Agent
# 从官网或 GitHub 下载 wget https://dlcdn.apache.org/skywalking/java-agent/9.3.0/apache-skywalking-java-agent-9.3.0.tgz tar -zxvf apache-skywalking-java-agent-9.3.0.tgz # 解压后得到 skywalking-agent 目录
配置 Agent(可选,但推荐)
修改 skywalking-agent/config/agent.config:
# 你的服务名称(在 UI 中标识该应用) agent.service_name=my-java-app # 后端 OAP Server 地址(gRPC 端口,默认 11800) collector.backend_service=127.0.0.1:11800
启动业务服务(Java)
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-java-app \
-Dskywalking.collector.backend_service=127.0.0.1:11800 \
-jar your-application.jar
说明:
-D参数优先级高于agent.config文件。
验证
访问业务服务一次,过几秒查看 SkyWalking UI(默认 http://localhost:8080),应能看到服务拓扑和调用链。
非 Java 应用集成(修改代码或配置)
Go
使用官方提供的 Go Agent(需要修改代码):
import "github.com/apache/skywalking-go"
func main() {
// 初始化 Agent,传入服务名和 OAP 地址
sk, _ := skywalking.New(
skywalking.WithServiceName("my-go-app"),
skywalking.WithOAPServer("127.0.0.1:11800"),
)
defer sk.Close()
// ... 你的业务代码
}
编译时需加入 Tag:-tags=agent。
Node.js
使用 skywalking-backend-js(需要引入并配置):
// 在应用入口最顶部加载(必须第一行)
require('skywalking-backend-js').start({
serviceName: 'my-node-app',
collectorAddress: '127.0.0.1:11800',
});
Python
安装 apache-skywalking 包,在入口脚本中导入:
from skywalking import agent, config config.service_name = 'my-python-app' config.collector_address = '127.0.0.1:11800' agent.start()
C++ / .NET / Lua
- C++:使用 C++ Agent 库(需源码集成)。
- .NET:使用
SkyAPM.Agent.AspNetCoreNuGet 包。 - Lua(Nginx/OpenResty):使用 nginx-lua-skywalking 模块。
部署 OAP Server 与 UI(后端必须)
Agent 采集的数据需要发送到 OAP Server,然后持久化到存储(推荐 ES,也可用 MySQL)。
使用 Docker Compose(推荐开发/测试)
version: '3.8'
services:
oap:
image: apache/skywalking-oap-server:9.7.0
environment:
- SW_STORAGE=elasticsearch # 存储后端
- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
ports:
- "11800:11800" # gRPC 端口(Agent 上报)
- "12800:12800" # HTTP 端口(UI 查询)
depends_on:
- elasticsearch
ui:
image: apache/skywalking-ui:9.7.0
environment:
- SW_OAP_ADDRESS=http://oap:12800
ports:
- "8080:8080"
elasticsearch: # 存储
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
启动:
docker-compose up -d
如何修改 Agent 的上报地址?
如果你使用 Docker 部署业务应用,Agent 配置的 collector.backend_service 应指向 宿主机 IP(非 localhost),
-Dskywalking.collector.backend_service=192.168.1.100:11800
核心配置详解
| 配置项 | 作用 | 默认值 |
|---|---|---|
agent.service_name |
应用在 SkyWalking 的显示名称 | Your_ApplicationName |
collector.backend_service |
OAP Server 的 gRPC 地址 | 0.0.1:11800 |
agent.sample_n_per_3_secs |
每秒采样数(减少性能消耗) | -1(全量采样) |
agent.span_limit_per_segment |
单个 Trace 最大 Span 数 | 300 |
plugin.mount |
是否自动挂载插件(如 Spring、MySQL) | true |
验证集成的 3 个步骤
-
确认 Agent 启动日志:业务应用日志中应出现:
SkyWalking agent initialized successfully. -
检查 OAP Server 接收状态:访问
http://<OAP_IP>:12800/graphql,若返回 200 说明 UI 可连接。 -
触发一次请求并查看 UI:
- 访问你的业务接口(如
GET /api/user/1)。 - 打开 SkyWalking UI -> 拓扑图,应显示服务节点。
- 进入 追踪 页面,应能看到该请求的完整调用链。
- 访问你的业务接口(如
最佳实践建议
- 生产环境使用 ES 存储:MySQL 仅适用于小规模演示,Elasticsearch 是推荐的存储后端。
- 配置采样率:高并发场景下建议设置
agent.sample_n_per_3_secs=1(每秒采 1 条),避免性能损耗。 - 将 Agent 与业务镜像打包:在 Docker 构建时将 Agent 文件 COPY 进镜像,启动命令挂载
javaagent。 - 使用 Kubernetes 部署:通过
operator或init-container注入 Agent,无需修改业务镜像。
如果你能告诉我你使用的编程语言和部署环境(如 Docker、K8s、物理机),我可以给出更具体的配置命令和脚本。