Skip to main content

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 数据流与工作机制​

  1. 数据采集:Agent 拦截应用请求,生成 Trace/Span/Metric/Log。
  2. 数据上报:Agent 通过 gRPC/HTTP 将数据发送到 OAP Server。
  3. 数据分析:OAP 进行聚合、依赖分析、指标计算、告警判断。
  4. 数据存储:分析结果写入后端存储(如 ES)。
  5. 数据展示: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 软件下载与校验​

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 手动部署(适合生产/自定义)​

  1. 下载并解压 SkyWalking 发行包
  2. 配置 config/application.yml,如:
    storage:
    elasticsearch:
    nameSpace: skywalking
    clusterNodes: 127.0.0.1:9200
  3. 启动 OAP Server:
    bin/oapService.sh
  4. 启动 UI:
    bin/webappService.sh
  5. 访问 UI:http://<服务器IP>:8080
  6. 日志路径:logs/ 目录下,排查启动异常

5.3 Kubernetes 部署(进阶)​

  • 官方 Helm Chart:https://github.com/apache/skywalking-kubernetes
  • 关键参数:存储类型、OAP 副本数、资源限制、Service 类型
  • 示例:
    helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helm
    helm 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,注意兼容性
  • 最佳实践:
    • 生产环境建议分布式部署,OAP/ES/Agent 分离
    • 合理配置采样率,避免全量采集
    • 定期备份存储,监控 OAP/ES 资源
    • 配置权限、认证、TLS,保障数据安全
  • 安全建议:
    • UI、OAP、ES 建议内网访问,配置防火墙
    • 生产环境关闭 UI 未授权访问,定期审计

11. 参考资源​


本文档适用于 SkyWalking 最新版,内容覆盖从环境准备、部署、接入到常见问题排查、进阶开发、最佳实践的全流程,适合零基础用户一比一落地生产环境。