架构
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查看集群调用链路。
架构图
常见端口
| 组件 | 端口 | 说明 |
|---|---|---|
| OAP | 11800 | gRPC,Agent 与 OAP 通讯 |
| OAP | 12800 | HTTP,UI 与 OAP 通讯、Metrics 拉取 |
| UI | 8080(映射为如 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;支持容器化部署;跨平台运行。
- 意义:可以在不同技术栈和环境无缝使用,降低迁移成本。
部署与配置示例见存储与部署。