SkyWalking APM:应用性能监控与诊断
yaml version: '3.8' services: oap: image: apache/skywalking-oap-server:9.7.0 container_name: oap restart: always ports: - "11800:11800" # gRPC 数据上报端口 - "12800:12800" # HTTP 数据上报端口 environment: SW_STORAGE: h2 # 默认内存数据库,生产环境请更换为 ElasticSearch ui: image: apache/skywalking-ui:9.7.0 container_name: ui restart: always ports: - "8080:8080" # UI 访问端口 environment: SW_OAP_ADDRESS: http://oap:12800 depends_on: - oap
### 2. 启动服务
```bash
docker-compose up -d
浏览器访问 http://localhost:8080,即可看到 SkyWalking UI 界面。
生产环境建议:将存储切换为 ElasticSearch,只需修改 OAP 容器环境变量:
SW_STORAGE: elasticsearch SW_STORAGE_ES_CLUSTER_NODES: your-es-cluster:9200
应用接入:Java Agent 无侵入监控
SkyWalking 最强大之处在于对 Java 应用的无侵入性,只需在启动命令中添加一行 -javaagent 参数即可。
1. 下载 Agent 包
从 官方下载页 获取 apache-skywalking-java-agent-9.2.0.tgz,解压后找到 skywalking-agent.jar。
2. 修改 Agent 配置(可选)
打开 agent/config/agent.config,可以调整服务名和后端地址:
agent.service_name=${SW_AGENT_NAME:your-application-name}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
3. 启动应用挂载探针
以 Spring Boot 应用为例:
java -javaagent:/path/to/skywalking-agent.jar \
-DSW_AGENT_NAME=my-cool-service \
-jar my-app.jar
启动后,SkyWalking UI 的“General”页面就会自动出现该服务,并能观察到它产生的请求指标。
核心功能实操指南
1. 查看全链路追踪
- 打开 UI,点击 Trace 菜单。
- 按时间范围、服务、端点等条件筛选。
- 点击任意一条 Trace,可以看到详细的水波图(甘特图),每个 Span 的耗时、调用关系一目了然。
- 单击某个 Span,可以查看具体标签(如 SQL 语句、HTTP URL、响应状态码)。
诊断慢请求:在 Trace 列表按耗时降序排列,快速定位最慢的调用链。
2. 理解服务拓扑图
- 进入 Topology 页面。
- 图上的每个节点代表一个服务,连线代表调用关系。
- 连线上会显示平均延迟、吞吐率和成功率。
- 选中某个服务,可以高亮它的上下游依赖。
拓扑图能帮你快速发现:
- 不合理的调用链(如循环依赖)。
- 突然消失的服务实例。
- 某个依赖服务的流量异常飙升。
3. 监控核心性能指标
在 Dashboard(或者通过菜单进入各服务的指标页面),你可以看到:
- 服务级指标:平均响应时间、吞吐量(CPM)、成功率。
- 端点级指标:每个接口的 QPS 和延迟分位数(P99、P95、P90)。
- 实例级指标:单个 JVM 的 CPU、堆内存、GC 情况、线程数。
- 基础设施指标:通过 JMX 或外部 Prometheus 可采集数据库连接池、MQ 等指标。
这些指标都支持时间范围选择和自定义图表。
4. 设置告警规则
SkyWalking 内置了一些维度的告警,例如服务平均响应时间、成功率等。规则在 config/alarm-settings.yml 中定义。
rules:
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 3
silence-period: 5
message: 服务 {name} 平均响应时间超过 1 秒