Skip to content

架构

Apache SkyWalking 采用"探针(Agent)— 后端(OAP)— 存储(Storage)— 界面(UI)"四层架构。Agent 在应用进程内采集数据,OAP 负责接收、聚合、分析并将数据持久化,UI 提供查询和可视化,Storage 承载明细数据。

核心组件

组件职责位置
Agent / SDK生成 Trace、Metric、Profile 等 Telemetry应用进程或 Runtime 内
OAP接收、聚合、分析数据,生成 Service / Instance / Endpoint / Topology 视图独立进程或 K8s Workload
Storage持久化分析结果和明细数据H2 / ES / MySQL / PG 等
UI查询 Trace、Metric、Log、Topology 与告警独立前端服务

组件职责详解

Agent

  • 作用:探针,嵌入到应用进程(Java、Go、Python 等),拦截方法调用、采集 Trace、指标、日志。
  • 位置:运行在业务服务内(JVM、Go runtime、Python interpreter 等)。
  • 关键功能
    • 采集调用链数据(Trace Segment)
    • 统计接口耗时、错误率、吞吐量
    • 插桩支持多种框架(Spring、Dubbo、HTTP Client、JDBC、Redis 等)
    • 将数据通过 gRPC 或 HTTP 发送到 OAP Server
  • 举例: 在 Java 应用中加 -javaagent:/path/skywalking-agent.jar -Dskywalking.agent.service_name=my-service

Agent 的加载、插件与配置详见 Java Agent

OAP(Observability Analysis Platform)

  • 作用:SkyWalking 的核心分析引擎,接收 Agent 上报的数据并进行处理。
  • 位置:独立运行的服务,可部署在 Docker、K8s、VM。
  • 关键功能
    • 接收 Trace、Metrics、Logs 数据
    • 分析并拼接调用链(Trace Merging)
    • 生成拓扑图(Service / Endpoint / Instance 关系)
    • 存储到后端数据库(H2、ES、MySQL 等)
    • 提供 GraphQL API 给 UI 使用
  • 举例:接收 Java Agent 采集的"服务 A 调用服务 B"数据,合并为一个完整链路。

Storage

  • 作用:存储 OAP 处理后的监控数据(Trace、指标、日志等)。
  • 常见类型
    • H2(嵌入式,单机调试用)
    • MySQL / PostgreSQL(结构化存储,适合小规模生产)
    • Elasticsearch(分布式检索,适合大规模生产)
  • 关键功能:保存历史调用链,支持 UI 查询;支持按时间、服务、端点等多维度分析。
  • 举例:Elasticsearch 保存最近 7 天的调用链数据,方便查询"接口延迟趋势"。

存储选型的权衡详见 存储与部署

UI

  • 作用:SkyWalking 的可视化界面(Web),通过 GraphQL 向 OAP 查询数据并展示。
  • 位置:独立前端服务(默认端口 8080,可通过 Docker 运行)。
  • 关键功能
    • 展示服务拓扑图(调用关系)
    • 展示 Trace 明细(每一步耗时)
    • 展示 Metrics 图表(QPS、RT、错误率等)
    • 展示日志(需接入日志插件)
  • 举例:在浏览器访问 http://<skywalking-ui-host>:8080 查看集群调用链路。

架构图

常见端口

组件端口说明
OAP11800gRPC,Agent 与 OAP 通讯
OAP12800HTTP,UI 与 OAP 通讯、Metrics 拉取
UI8080(映射为如 18081)Web 控制台页面
Prometheus Fetcher无默认端口(通过 OAP 拉取)用于接入 Prometheus 数据源

设计目标

保持可观测性

  • 解释:核心目标是让用户能清晰了解系统的运行状况,特别是分布式系统中的调用链路、性能瓶颈和异常点。
  • 具体体现
    • Trace 展示每一次请求的路径
    • Metrics 展示服务健康趋势
    • Logs 结合 Trace 定位问题
  • 意义:快速发现并定位问题,降低 MTTR。

拓扑结构

  • 解释:自动分析服务间调用关系并生成拓扑图。
  • 具体体现:节点代表服务、实例或端点;边代表调用方向及次数/耗时;自动更新(无需人工维护)。
  • 意义:让复杂系统的依赖关系可视化,方便架构优化和瓶颈分析。

轻量级

  • 解释:部署和运行成本低,尽可能减少对业务性能的影响。
  • 具体体现:Agent 运行在业务进程中,占用资源低(一般 CPU < 5%,内存 < 50MB);OAP 支持按需部署、可横向扩展。
  • 意义:在生产环境中不会成为新的性能瓶颈。

可插拔

  • 解释:功能模块可灵活选择、扩展和替换。
  • 具体体现:插件机制支持多种框架探针;存储层可替换;数据接入协议可扩展(gRPC、HTTP、Prometheus Fetcher 等)。
  • 意义:用户可以按需裁剪功能,减少不必要的开销。

可移植

  • 解释:支持多种运行环境和语言,不依赖特定平台。
  • 具体体现:支持 Java、Go、Node.js、Python、PHP 等多语言 Agent;支持容器化部署;跨平台运行。
  • 意义:可以在不同技术栈和环境无缝使用,降低迁移成本。

部署与配置示例见存储与部署