java apm工具

时间:2020-07-29 15:24:09   收藏:0   阅读:93

APM工具对比

本文转自:APM工具对比

市面上有很多分布式链路监控的工具,客观对比。

调研

市面上的APM(Application Performance Management)理论模型大多都是借鉴,Google Dapper论文。

我最近也在选取使用哪一个工具,这里的对比是在Spring Cloud 中的使用。

对比三种工具:

整体架构

zipkin

技术图片

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

组件:

skywalking

技术图片

组件:

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

cat

技术图片

基本原理

zipkin

┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
│ 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会展示数据在界面上。

skywalking

探针将数据通过gRPC或者HTTP传输给后端平台(server),后端平台将数据存储在Storage中,并且分析数据将结果展示在UI中

cat

客户端:收集数据通过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

UI

类别丰富度
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 twitter 接口级 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

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!