市面上有很多分布式链路监控的工具,客观对比。
市面上的APM(Application Performance Management)理论模型大多都是借鉴,Google Dapper论文。
我最近也在选取使用哪一个工具,这里的对比是在Spring Cloud 中的使用。
对比三种工具:

zipkin分为zipkin服务端和客户端,每一个被监控的服务都是客户端。
组件:

组件:
skywalking分为四个部分:探针,平台后端,存储,UI

┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
│ User Code   │ │ Trace Instrumentation │  │ Http Client │  │ Zipkin Collector │
└─────────────┘ └───────────────────────┘  └─────────────┘  └──────────────────┘
       │                 │                         │                 │
           ┌─────────┐
       │ ──┤GET /foo ├─? │ ────┐                   │                 │
           └─────────┘         │ record tags
       │                 │ ?───┘                   │                 │
                           ────┐
       │                 │     │ add trace headers │                 │
                           ?───┘
       │                 │ ────┐                   │                 │
                               │ record timestamp
       │                 │ ?───┘                   │                 │
                             ┌─────────────────┐
       │                 │ ──┤GET /foo         ├─? │                 │
                             │X-B3-TraceId: aa │     ────┐
       │                 │   │X-B3-SpanId: 6b  │   │     │           │
                             └─────────────────┘         │ invoke
       │                 │                         │     │ request   │
                                                         │
       │                 │                         │     │           │
                                 ┌────────┐          ?───┘
       │                 │ ?─────┤200 OK  ├─────── │                 │
                           ────┐ └────────┘
       │                 │     │ record duration   │                 │
            ┌────────┐     ?───┘
       │ ?──┤200 OK  ├── │                         │                 │
            └────────┘       ┌────────────────────────────────┐
       │                 │ ──┤ asynchronously report span     ├────? │
                             │                                │
                             │{                               │
                             │  "traceId": "aa",              │
                             │  "id": "6b",                   │
                             │  "name": "get",                │
                             │  "timestamp": 1483945573944000,│
                             │  "duration": 386000,           │
                             │  "annotations": [              │
                             │--snip--                        │
                             └────────────────────────────────┘
当发起一个调用,Trace Instrumentation会拦截请求,添加tag,添加traceID和spanID进http头,当服务返回时,它会异步地向Collector发送数据。Collector受到数据后存储,分析,同时UI会展示数据在界面上。
探针将数据通过gRPC或者HTTP传输给后端平台(server),后端平台将数据存储在Storage中,并且分析数据将结果展示在UI中
客户端:收集数据通过ThreadLocal,将数据存在ThreadLocal中,当结束时发送数据给服务端。
举例:

序列化与通信:自定义的序列化协议,Netty数据传输
服务端:

监控模型:
| 类别 | 实现方式 | 
|---|---|
| zipkin | 拦截请求 | 
| skywalking | java探针,字节码增强 | 
| cat | 代码埋点 | 
| 类别 | 接入方式 | agent到collector的协议 | 
|---|---|---|
| zipkin | sleuth,引入依赖和配置 | http,mq | 
| skywalking | javaanent | gRPC,http | 
| cat | 代码侵入 | http/tcp | 
| 类别 | 数据 | 
|---|---|
| zipkin | 链路,耗时 | 
| skywalking | 链路,耗时,cpu,mem,JVM | 
| cat | 链路,耗时,cpu,mem,JVM | 
| 类别 | 丰富度 | 
|---|---|
| zipkin | 一般 | 
| skywalking | 丰富 | 
| cat | 丰富 | 
| 类别 | 存储方案 | 
|---|---|
| zipkin | 内存,mysql,es,Cassandra | 
| skywalking | es,mysql,h2,TiDB | 
| cat | mysql,hdfs | 
| 类别 | 语言 | 
|---|---|
| zipkin | C#,Go,Java,JS,Ruby,Scala,PHP;社区支持c++,Python | 
| skywalking | Java,c#,PHP,Node.js | 
| cat | Java, C/C++, Node.js, Python, Go | 
| 类别 | 使用者 | 
|---|---|
| zipkin | 多 | 
| skywalking | 多 | 
| cat | 较多 | 
| 类别 | 速度 | 
|---|---|
| zipkin | 快 | 
| skywalking | 快 | 
| cat | 慢 | 
| 类别 | 作者 | 粒度 | traceID查询 | 告警 | 依赖分析 | OpenTracing标准 | 
|---|---|---|---|---|---|---|
| zipkin | 接口级 | yes | no | yes | 部分支持 | |
| skywalking | 吴晟,华为 | 方法级 | yes | yes | yes | 完全支持 | 
| cat | 吴其敏,尤勇,大众点评 | 代码级 | no | yes | no | 不支持 | 
注:OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
zipkin
skywalking
cat
这些工具各有长短,根据实际场景不同选择之。
https://zipkin.io/
https://github.com/apache/skywalking
https://github.com/dianping/cat/wiki
https://juejin.im/post/5a274614518825592c07f8b8
https://www.jianshu.com/p/0fbbf99a236e
原文:https://www.cnblogs.com/cheyunhua/p/13396614.html