javaapm⼯具
APM⼯具对⽐
市⾯上有很多分布式链路监控的⼯具,客观对⽐。
调研
市⾯上的APM(Application Performance Management)理论模型⼤多都是借鉴,Google Dapper论⽂。
我最近也在选取使⽤哪⼀个⼯具,这⾥的对⽐是在Spring Cloud 中的使⽤。
对⽐三种⼯具:
zipkin:Twitter公司开源的⼀个分布式追踪⼯具,被Spring Cloud Sleuth集成,使⽤⼴泛⽽稳定
skywalking:中国⼈吴晟(华为)开源的⼀款分布式追踪,分析,告警的⼯具,现在是Apache旗下开源项⽬cat:⼤众点评开源的⼀款分布式链路追踪⼯具。
整体架构
zipkin
zipkin分为zipkin服务端和客户端,每⼀个被监控的服务都是客户端。
组件:
追踪器:位于客户端,并记录有关发⽣的操作的时间和元数据,对⽤户透明
Reporter:将数据发送到Zipkin的检测应⽤程序
Transport :传输数据:HTTP, Kafka and Scribe.
Collector:位于服务端中,收集传输来的数据
Storage :存储数据,默认存储在内存中
search :查询api,JSON应⽤编程接⼝,被UI调⽤
UI :Web UI提供了⼀种基于服务,时间Annotation查看跟踪的⽅法。UI中没有内置⾝份验证
skywalking
组件:
skywalking分为四个部分:探针,平台后端,存储,UI
Probes,探针,探针因使⽤的语⾔不同⽽不通,收集数据并且格式化为skywalking所需的格式。
Platform backend 平台后端,对应于zipkin server,可以集部署,聚合,分析,将数据展⽰在UI中
Storage:存储,可扩展的存储,可以使es,H2,MySQL集
UI 丰富的可视化功能,提供⾝份验证
cat
cat-client 业务模块,埋点,发送消息给consumer
cat-consumer,分析从client接收的数据
cat-home 将数据展⽰在控制端
存储
基本原理
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": [ │java调用python模型
│--snip-- │
└────────────────────────────────┘
当发起⼀个调⽤,Trace Instrumentation会拦截请求,添加tag,添加traceID和spanID进http头,当服务返回时,它会异步地向Collector发送数据。Collector受到数据后存储,分析,同时UI会展⽰数据在界⾯上。
skywalking
探针将数据通过gRPC或者HTTP传输给后端平台(server),后端平台将数据存储在Storage中,并且分析数据将结果展⽰在UI中
cat
客户端:收集数据通过ThreadLocal,将数据存在ThreadLocal中,当结束时发送数据给服务端。
举例:
序列化与通信:⾃定义的序列化协议,Netty数据传输
服务端:
监控模型:
Transaction:适合记录跨越系统边界的程序访问⾏为,⽐如远程调⽤,数据库调⽤,也适合执⾏时间较长的业务逻辑监控,Transaction ⽤来记录⼀段代码的执⾏时间和次数
Event:⽤来记录⼀件事发⽣的次数,开销较⼩
Heartbeat:表⽰程序内定期产⽣的统计信息, 如CPU利⽤率, 内存利⽤率, 连接池状态, 系统负载等
Metric:⽤于记录业务指标、指标可能包含对⼀个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟
类别实现⽅式
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
优点:轻量级,springcloud集成,使⽤⼈数多,成熟
不⾜:功能简单,只有链路监控
skywalking
优点:采集数据丰富,UI友好,扩展性⾼,使⽤者多,⽀持中间件以及框架多,社区活跃
不⾜:成熟度不够⾼
cat
优点采集数据⾮常丰富,UI友好,粒度最细
代码侵⼊,需改动业务代码,git不够活跃,更新缓慢,存储⽀持不够⼴泛这些⼯具各有长短,根据实际场景不同选择之。
参考⽂档
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论