SkyWalking
Apache SkyWalking 是面向分布式系统的开源 APM 与可观测性平台,基于 Google Dapper 论文的分布式链路追踪思想实现。它从应用、语言 Runtime、Service Mesh 和基础设施接收 Telemetry,分析 Trace、Metric、Log 与 Service Topology,帮助回答以下问题:
- 一次请求经过了哪些服务和组件;
- 延迟主要发生在哪个 Endpoint、Database 或 Remote Call;
- 哪个 Service Instance 的错误率或响应时间异常;
- 服务之间实际形成了怎样的调用依赖;
- Log 如何与 Trace ID、Service 和 Instance 关联。
能力边界
SkyWalking 解决"观察和定位"问题,不负责服务发现、配置中心、业务限流或分布式事务。它主要提供:
| 能力 | 说明 |
|---|---|
| 分布式链路追踪 | 自动记录跨服务调用链(Trace) |
| 性能指标分析 | 响应时间、QPS、吞吐量、错误率等指标 |
| 服务拓扑图 | 服务、实例、端点之间的调用依赖关系 |
| 告警系统 | 指标触发条件可配置的报警 |
| 日志关联(增强) | 通过 Trace Context 关联日志与调用链 |
不负责的部分:
- 服务发现、配置中心 → Spring Cloud Alibaba / Nacos
- 日志采集与检索 → 日志平台
- Service Mesh 数据面(Envoy 等)→ 由 Mesh 自身提供,SkyWalking 只是接收方
SkyWalking Java Agent 位于 JVM Language Runtime 内,OAP 是独立 Process 或 Kubernetes Workload。它不是 Dapr 这类 Distributed Application Runtime;二者的区别参见微服务建设层次图。
采集层次
Java Agent 属于 JVM Runtime 层,通过 Bytecode Instrumentation 拦截受支持的 Framework、RPC、Database 和 MQ Client。它通常不要求修改业务代码,但仍需正确配置 Service Name、Backend Address、采样和 Plugin。
核心对象
| 对象 | 含义 |
|---|---|
| Service | 一个逻辑服务,例如 order-service |
| Service Instance | 服务的一个运行副本,例如某个 JVM Process 或 Pod |
| Endpoint | 服务暴露或处理的逻辑操作,例如 HTTP Route 或 RPC Method |
| Trace | 一次分布式请求的完整调用路径 |
| Span | Trace 中的一段操作,例如一次 HTTP Client Call 或 SQL Query |
| Segment | 某个进程内产生并上报的一组 Span |
文档入口
| 文档 | 内容 |
|---|---|
| APM | Dapper 模型、三大可观测信号、上下文传播、采样、OpenTracing/W3C |
| 架构 | Agent / OAP / Storage / UI 职责、端口、设计目标与部署形态 |
| Java Agent | 探针加载、字节码插桩、插件、配置、采样与 Trace ID 注入 |
| 链路追踪原理 | Trace / Span / Segment、跨进程上下文传播与合并 |
| 存储与部署 | H2 / ES / MySQL 存储、compose、Kubernetes、压测调优与问题排查 |
| 告警与指标 | 告警规则、自定义指标与二次开发入口 |