全链路监控选型

个人专题目录


实现全链路监控

SkyWalking

https://github.com/apache/skywalking

SkyWalking是apache基金会下面的一个开源APM项目,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知
应用间关系和服务间关系,并进行相应的指标统计。Skywalking支持链路追踪和监控应用组件基本涵盖
主流框架和容器,如国产RPC Dubbo和motan等,国际化的spring boot,spring cloud。SkyWalking 是针对分布式系统的 APM 系统,也被称为分布式追踪系统

  • 全自动探针监控,不需要修改应用程序代码。查看支持的中间件和组件库列表:https://github.com/apache/incubator-skywalking
  • 支持手动探针监控, 提供了支持 OpenTracing 标准的SDK。覆盖范围扩大到 OpenTracing-Java 支持的组件。查看OpenTracing组件支持列表:https://github.com/opentracing-contrib/meta
  • 自动监控和手动监控可以同时使用,使用手动监控弥补自动监控不支持的组件,甚至私有化组件。
  • 纯 Java 后端分析程序,提供 RESTful 服务,可为其他语言探针提供分析能力。
  • 高性能纯流式分析
  • 支持多种插件,UI功能较强,接入端无代码侵入。

Zipkin

https://zipkin.io/

https://github.com/openzipkin/zipkin

由Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现。特点是轻量,使用部署简单。通过Java程序中引入客户端,可隐式拦截Http、Thrift等形式服务调用。通过Http、Kafka、Scribe等方式同步监控数据到服务端,ZipKin带有Web UI,但没有告警功能。

Pinpoint

https://github.com/naver/pinpoint

一款对Java编写的大规模分布式系统的APM工具,由韩国人开源的分布式跟踪组件。特点是支持多种插件,UI功能强大,接入端无代码侵入。

CAT

https://github.com/dianping/cat

CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。支持JVM性能数据采集、服务Trace、告警等功能,但需要写监控代码。

维度 Cat Zipkin PinPoint Skywalking
实现方式 代码埋点(拦截器,注解,过滤器等) 拦截请求,发送(HTTP,MQ)数据至Zipkin服务 Java探针,字节码增强 Java探针,字节码增强
接入方式 代码侵入 基于Linkerd或者Sleuth方式,引入配置即可 JavaAgent字节码,高并发情况下,代理对吞吐量的影响比skywalking和zipkin都大 JavaAgent字节码,支持20+的中间件、框架、类库
agent到collector的协议 http/tcp http,MQ thrift gRPC
可扩展性 水平扩展服务端 多个zipkin-Server实例进行异步消费mq中的监控信息 collector+web+agent+存储,使得能够水平扩展以便支持大规模服务器集群。 OAP(skywalking6.x才有OAP这个概念,skywalking5.x叫collector)+Web+agent+存储+zk,使得能够水平扩展以便支持大规模服务器集群。
数据存储 Mysql,Hdfs ES,mysql,Cassandra Hbase(RowKey精确查找,SCAN范围查找,全表扫描),Mysql ES,H2,Mysql,TiDB,Sharding-Sphere
分析粒度 代码级,全局调用统计,报警,JVM监控 接口级,支持traceid查询 方法级,全局调用统计、报警 方法级,全局调用统计、traceid查询,报警,JVM监控
调用链可视化
报表 丰富
调用链应用拓扑 简单,仅限于服务与服务之间 简单,仅限于服务与服务之间
埋点方式 侵入 侵入 无侵入 无侵入
Heartbeat支持
Metric支持
是否支持webflux
客户端支持 Java、C/C++、Node.js、Python java Java,php Java, C#, PHP, Node.js, Go
中文支持
社区支持 一般
国内案例 美团、携程、陆金所等等 京东,阿里定制后不开源 暂无 阿里,小米,滴滴,华为、当当等等
社区活跃度(截止2020-2) 12.7k 12.5k 9.9k 12.3k
社区活跃度(截止2019-12 12.3K 12.2K 11.8K
社区活跃度(截止2018-5) 4.9k 8.4k 5.9k 3.3k

字节码注入 vs API 调用

Pinpoint 实现了基于字节码注入的 Java Agent 探针,而 Zipkin 的 Brave 框架仅仅提供了应用层面的 API,但是细想问题远不那么简单。字节码注入是一种简单粗暴的解决方案,理论上来说无论任何方法调用,都可以通过注入代码的方式实现拦截,也就是说没有实现不了的,只有不会实现的。但 Brave 则不同,其提供的应用层面的 API 还需要框架底层驱动的支持,才能实现拦截

全链路监控大数据解决方案

image-20200225100520627.png

全链路监控特质

低侵入性

监控系统应尽可能减少对业务系统的侵入,保持对使用方的透明性,减少开发人员的负担,降低接入门槛和难度。对于应用的程序员来说,是不需要知道有跟踪系统这回事的。如果一个跟踪系统想生效,就必须需要依赖应用的开发者主动配合,那么这个跟踪系统也太脆弱了,往往由于跟踪系统在应用中植入代码的bug或疏忽导致应用出问题,这样才是无法满足对跟踪系统“无所不在的部署”这个需求。

低性能影响

由于全链路监控系统需要对各种应用中间件进行日志数据采集,大多都需要在业务系统内进行“埋点”或放置agent,一般都是在核心业务流程。在一些高度优化过的服务,即使一点点损耗也会很容易察觉到,而且有可能迫使在线服务的部署团队不得不将跟踪系统关停。

因此应尽可能降低对业务系统造成的性能影响,一般来说,对CPU的耗用低于2%可以作为一个参考阈值。

灵活全面的接入策略

为了尽可能降低接入成本,应该提供灵活的监控配置策略,让业务方决定是否接入,以及收集数据的范围和粒度,并提供对应的技术方案保障监控策略生效。

时效性

实时有效的监控数据展示功能,帮助相关人员理解系统行为,为流程、架构、代码优化,以及扩容缩容、服务限流降级提供正确客观的数据参考。

可扩展性

一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。能够支持的组件越多当然越好。或者提供便捷的插件开发API,对于一些没有监控到的组件,应用开发者也可以根据需要自行扩展。

全链路监控功能模块

一般的全链路监控系统,大致可分为四大功能模块:

埋点与生成日志

埋点即系统在当前节点的上下文信息,可以分为 客户端埋点、服务端埋点,以及客户端和服务端双向型埋点。埋点日志通常要包含以下内容traceId、spanId、调用的开始时间,协议类型、调用方ip和端口,请求的服务名、调用耗时,调用结果,异常信息等,同时预留可扩展字段,为下一步扩展做准备;

收集和存储日志

主要支持分布式日志采集的方案,同时增加MQ作为缓冲;

每个机器上有一个 deamon 做日志收集,业务进程把自己的Trace发到daemon,daemon把收集Trace往上一级发送;

多级的collector,类似pub/sub架构,可以负载均衡;

对聚合的数据进行 实时分析和离线存储;

离线分析 需要将同一条调用链的日志汇总在一起;

分析和统计调用链路数据,以及时效性

调用链跟踪分析:把同一TraceID的Span收集起来,按时间排序就是timeline。把ParentID串起来就是调用栈。

抛异常或者超时,在日志里打印TraceID。利用TraceID查询调用链情况,定位问题。

依赖度量:

  • 强依赖:调用失败会直接中断主流程
  • 高度依赖:一次链路中调用某个依赖的几率高
  • 频繁依赖:一次链路调用同一个依赖的次数多

离线分析:按TraceID汇总,通过Span的ID和ParentID还原调用关系,分析链路形态。

实时分析:对单条日志直接分析,不做汇总,重组。得到当前QPS,延迟。

全链路监控系统希望达到的效果

请求链路追踪,故障快速定位

可以通过调用链结合业务日志快速定位错误原因。

可视化

记录各个阶段耗时,进行性能分析。

依赖优化

统计各个调用环节的可用性、梳理服务依赖关系以及优化。

数据分析,链路梳理和优化

分析用户的行为路径,梳理和优化整体调用链路。

本文参考:

(一文搞懂全链路监控:方案概述与比较)https://cloud.tencent.com/developer/article/1501891

(APM巅峰对决:skywalking P.K. Pinpoint)https://skywalking.apache.org/zh/blog/2019-02-24-skywalking-pk-pinpoint.html

(开源APM之Skywalking和Pinpoint的实测对比)http://blog.zollty.com/b/archive/apm-comparison-of-skywalking-and-pinpiont.html

《OpenTracing 官方标准 —— 中文版》

Google 论文 《Dapper,大规模分布式系统的跟踪系统》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,158评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,600评论 1 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,785评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,655评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,075评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,002评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,146评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,918评论 0 211
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,671评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,838评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,318评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,636评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,343评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,187评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,982评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,126评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,934评论 2 279

推荐阅读更多精彩内容