SkyWalking 全链路追踪组件(Skywalking)
1. SkyWalking 概述与发展背景
1.1 什么是 SkyWalking?
SkyWalking(Apache SkyWalking)是由中国工程师吴晟发起并捐赠给 Apache 基金会的顶级开源 APM(应用性能监控)与可观测性平台。它专为云原生、微服务、容器、Service Mesh 等现代分布式系统设计,支持多语言(Java、.NET、Node.js、PHP、Go、Rust、Python 等),具备链路追踪、服务依赖分析、性能指标采集、告警、日志等一站式能力。
1.2 发展背景
- 2015 年起步,2017 年进入 Apache 孵化器,2019 年成为 Apache 顶级项目。
- 现已成为国内外主流微服务监控解决方案,广泛应用于金融、电商、互联网、云服务等行业。
1.3 适用场景
- 微服务架构、Spring Cloud、Dubbo、Kubernetes、Service Mesh(如 Istio)
- 单体应用、传统三层架构
- 多语言混合部署
- 需要链路追踪、性能瓶颈定位、依赖分析、自动告警的场景
1.4 核心优势
- 全栈可观测:支持链路、指标、日志、告警一体化
- 多语言支持:Java、.NET、Node.js、Go、PHP、Python、Rust 等
- 高性能:支持大规模分布式系统,OAP 支持集群、分布式存储
- 易用性强:自动探针、无侵入接入、丰富的 UI
- 生态丰富:与 Prometheus、Grafana、Alertmanager、K8s 等无缝集成
2. SkyWalking 架构与原理详解
2.1 架构总览
2.2 组件详解
- Agent(探针):以 Java agent、SDK、Sidecar 等方式集成到应用进程,自动拦截 HTTP、RPC、数据库、MQ 等调用,采集 Trace、Metrics、Logs。
- OAP Server:核心分析平台,负责数据聚合、分析、存储、告警、规则引擎等。支持集群部署,横向扩展。
- UI:Web 前端,提供链路、拓扑、告警、日志、仪表盘等可视化能力。
- 存储:支持 ElasticSearch(推荐)、MySQL、TiDB、H2、InfluxDB、PostgreSQL 等。
- 插件机制:支持自定义采集、分析、告警、存储插件,便于二次开发。
2.3 数据流与工作机制
- 数据采集:Agent 拦截应用请求,生成 Trace/Span/Metric/Log。
- 数据上报:Agent 通过 gRPC/HTTP 将数据发送到 OAP Server。
- 数据分析:OAP 进行聚合、依赖分析、指标计算、告警判断。
- 数据存储:分析结果写入后端存储(如 ES)。
- 数据展示:UI 通过 API 查询 OAP,展示链路、拓扑、告警、日志等。
3. 关键名词解释与举例
- Trace(追踪):一次分布式调用的全链路记录。例如:用户下单请求跨越网关、订单服务、库存服务。
- Span(跨度):Trace 中的一个操作片段,如一次 HTTP 请求、数据库操作。一个 Trace 由多个 Span 组成。
- Service:被监控的服务单元,如 order-service。
- Instance:服务的一个运行实例,如 order-service-1。
- Endpoint:服务的具体接口或方法,如 /api/order/create。
- OAP:Observability Analysis Platform,SkyWalking 的后端分析平台。
- Agent:应用内的探针,自动采集数据。
- Topology(拓扑):服务间依赖关系图。
- Metrics(指标):如 QPS、响应时间、错误率等。
- Alarm(告警):基于规则的自动告警。
- Log(日志):SkyWalking 8+ 支持链路日志关联。
4. 环境准备与下载
4.1 系统与依赖
- 操作系统:Linux(推荐)、Windows、Mac
- JDK 8+(OAP、Agent)
- 存储:ElasticSearch 7.x/8.x(推荐)、MySQL、TiDB、H2、PostgreSQL、InfluxDB
- Docker/Kubernetes(可选)
4.2 软件下载与校验
- SkyWalking 官方下载
- ElasticSearch 下载
- 官方 Docker 镜像
- 校验包完整性(SHA256 校验)
5. 部署方式详解
5.1 Docker 单机部署(推荐新手)
步骤一:启动 ElasticSearch
docker run -d --name es -e "discovery.type=single-node" -p 9200:9200 elasticsearch:8.11.1
- 参数说明:
discovery.type=single-node:单节点模式,适合测试-p 9200:9200:暴露 ES HTTP 端口
- 常见问题:内存不足可加
-e ES_JAVA_OPTS="-Xms512m -Xmx512m"
步骤二:启动 SkyWalking OAP
docker run -d --name oap --restart always \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=es:9200 \
-p 11800:11800 -p 12800:12800 \
apache/skywalking-oap-server:latest
- 11800:gRPC 端口,Agent 用于上报
- 12800:HTTP 端口,UI 用于查询
步骤三:启动 SkyWalking UI
docker run -d --name ui --restart always \
-e SW_OAP_ADDRESS=oap:12800 \
-p 8080:8080 \
apache/skywalking-ui:latest
- 8080:Web UI 端口
步骤四:访问 UI
- 浏览器访问
http://localhost:8080,初始无需登录。
常见问题与建议
- 容器互通:确保 es、oap、ui 在同一网络(可用
--network参数) - 生产建议:ES、OAP、UI 分别独立主机/容器,避免单点
- 安全建议:生产环境建议配置认证、TLS、网络隔离
5.2 手动部署(适合生产/自定义)
- 下载并解压 SkyWalking 发行包
- 配置
config/application.yml,如:storage:elasticsearch:nameSpace: skywalkingclusterNodes: 127.0.0.1:9200 - 启动 OAP Server:
bin/oapService.sh
- 启动 UI:
bin/webappService.sh
- 访问 UI:
http://<服务器IP>:8080 - 日志路径:
logs/目录下,排查启动异常
5.3 Kubernetes 部署(进阶)
- 官方 Helm Chart:https://github.com/apache/skywalking-kubernetes
- 关键参数:存储类型、OAP 副本数、资源限制、Service 类型
- 示例:
helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helmhelm install skywalking skywalking/skywalking -n skywalking --create-namespace \--set oap.storageType=elasticsearch \--set elasticsearch.enabled=true
- 建议:生产环境自建 ES 集群,OAP/ES/Agent 分离
6. Java 应用接入 SkyWalking
6.1 获取 Agent
- 下载 agent 包 并解压。
- 目录结构:
skywalking-agent.jar、config/、plugins/、logs/
6.2 Spring Boot 应用接入
假设你的 Spring Boot 应用 jar 包为 app.jar,在启动时加上 agent:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-springboot-service \
-Dskywalking.collector.backend_service=127.0.0.1:11800 \
-jar app.jar
skywalking.agent.service_name:当前服务名skywalking.collector.backend_service:OAP 地址agent.config可配置采样率、排除路径、自定义标签等
6.3 Tomcat/War 包接入
- 将
skywalking-agent目录放到 Tomcat 根目录 - 修改
bin/catalina.sh,添加:JAVA_OPTS="$JAVA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=my-tomcat-app -Dskywalking.collector.backend_service=127.0.0.1:11800" - 重启 Tomcat
6.4 微服务/多模块接入
- 每个服务单独配置 agent,
service_name唯一 - 支持 Spring Cloud、Dubbo、gRPC、Kafka、RocketMQ 等自动探针
- 可用注解自定义追踪片段:
import org.apache.skywalking.apm.toolkit.trace.Trace;public class DemoService {@Trace(operationName = "custom-operation")public void doSomething() {// 该方法会被单独追踪}}
6.5 进阶配置
agent/config/agent.config支持采样率、排除路径、插件开关、日志级别等- 支持自定义插件开发,详见官方文档
7. SkyWalking UI 功能详解
- 链路追踪:可视化展示分布式调用链,支持按服务、实例、接口、时间过滤
- 拓扑图:自动生成服务依赖关系图,支持点击查看调用详情
- 性能指标:QPS、响应时间、错误率、JVM 指标等
- 告警中心:自定义规则,支持邮件、Webhook、钉钉、企业微信等通知
- 日志分析:链路日志、错误日志、慢查询日志等
- 仪表盘:自定义大盘,支持多维度指标展示
- 搜索与过滤:支持多条件检索、标签过滤
- 权限管理:支持多用户、角色、权限分配(需配置)
8. 常见问题排查与性能调优
- OAP 启动失败:检查 JDK 版本、存储配置、端口冲突,查看
logs/skywalking-oap-server.log - UI 无数据:确认 agent 日志有无连接 OAP 成功,检查网络、防火墙
- 链路不全/丢失:检查采样率、排除规则、插件是否生效
- 性能瓶颈:合理配置采样率(如 10%),避免全量采集;OAP/ES 资源需充足
- 高可用建议:OAP、ES、UI 分布式部署,存储多副本,定期备份
- 安全建议:生产环境建议配置 TLS、认证、网络隔离,限制 UI 访问
- 日志分析:善用 grep、less、tail -f 等命令分析 OAP/Agent 日志
9. 进阶用法与生态集成
- 自定义插件开发:可扩展采集、分析、告警、存储等能力,详见 官方插件开发文档
- 与 Prometheus 集成:OAP 可采集 Prometheus 指标,统一展示
- 与 Grafana 集成:通过 SkyWalking Grafana 插件或 Prometheus 数据源展示指标
- 与 Alertmanager 集成:告警可推送到 Alertmanager、钉钉、企业微信等
- 二次开发:支持自定义 UI、API、存储、分析逻辑
10. FAQ、最佳实践与安全建议
- FAQ:
- Q: Agent 会影响应用性能吗?
- A: 影响极小,采样率合理配置下 <5% 开销
- Q: 支持哪些中间件?
- A: 支持常见 HTTP、RPC、数据库、MQ、缓存等
- Q: 如何升级 SkyWalking?
- A: 先升级 OAP,再升级 Agent,注意兼容性
- Q: Agent 会影响应用性能吗?
- 最佳实践:
- 生产环境建议分布式部署,OAP/ES/Agent 分离
- 合理配置采样率,避免全量采集
- 定期备份存储,监控 OAP/ES 资源
- 配置权限、认证、TLS,保障数据安全
- 安全建议:
- UI、OAP、ES 建议内网访问,配置防火墙
- 生产环境关闭 UI 未授权访问,定期审计
11. 参考资源
本文档适用于 SkyWalking 最新版,内容覆盖从环境准备、部署、接入到常见问题排查、进阶开发、最佳实践的全流程,适合零基础用户一比一落地生产环境。