监控的目标是什么?
从这些年从事的监控的平台开发设计来看,监控的目标不外乎以下4种:
- 故障分析定位
应用系统出问题,首要想到的是,通过监控系统从复杂的系统间找到问题,定位问题所在。 - 系统问题预警
该预警一般要求实时性,同时一般会考虑性能与实时性的中和。所起到的目的就是在客户反馈问题前,能做到预警,做的更高级一点的就是能够根据预警做到自动处理,取代以前的人工干预的部分。 - 提供历史趋势分析
这个比较好理解,随着时间历史监控数据的增多,根据历史数据做一些监控预测分析一类的简单工作还是比较容易的,比如:下个月的交易量,下个促销日的并发量,下个版本发布后,能够承受的uv等以及衍生出来的CPU,memory,磁盘使用量等预测信息。 - 提供可视化报表等,辅助分析
通过可视化的仪表盘能够直接获取系统运行状态,资源使用情况,以及服务运行状态等直观信息。
那实际的监控现状是什么?
目前生成上的监控比较弱:只能查询单个系统,即经过中间总线成的服务;曾有想法通过traceno来串交易,当至今没有串起来;同时,任何系统交易只要出现问题,相关的系统都会要求协查到场,究其原因是因为缺少全局监控的平台。监控延迟比较严重,一般都是事后的,常常是业务报错反馈后,才主动去生产上查询业务失败原因。
监控的内容有哪些?
监控的内容基本可以分3类,即logging, tracing, metrics,这里有这些类别的具体描述
metrics-tracing-and-logging
具体象限图原文中有详细描述
Metrics的监控
关于Metrics,首推现在的CNCF的Prometheus
Logging监控
日志收集监控是整个监控日志查询的基础,ELK是该架构的解决方案
Tracing监控
目前分布式监控的鼻祖是google 的Dapper,具体关于Dapper的论文介绍链接如下:
https://bigbully.github.io/Da...
那么Tracing是什么?
简单的说,就是服务或交易间的互相调用链的跟踪监控。现在市场上也有很多的开源解决方案,大致分几类:以字节码注入方式实现的pinpoint和基于API埋点的Zipkin/Pinpoint/Jaeger。
其中字节码注入方式实施起来简单,对应用来说,几乎无侵入性。但因为提供的API有限,真正hold住的话需要较强的JVM功底,同时想要本地化扩展的话,比较困难。而且,目前是基于JVM的,想要在其它语言中实现,几乎不可能;相比之下,基于API埋点的方式更加通用实用些;
zipkin
2012年,Twiter依照Dapper论文,实现的Zipkin,并集成到自己的商用产品中;Zipkin 组件包括如下:
Collector 收集
storage 存储,默认是in-memory模式,支持mysql,cassandra,es
Api 查询api
ui界面
官方网站:https://zipkin.io/
Jaeger
Uber公司基于Dapper,Zipkin的灵感,实现开源分布式跟踪系统Jaeger。目前该项目已被Uber,Redhat,SeatGeek和UnderArmour等公司使用,包括阿里云,都有对应的实现服务。它被设计为具有高度可扩展性和可用性,并为OpenTracing标准和众多存储后端提供本地支持。它具有现代的UI,并与云原生应用kubernetes,OpenTraing和Prometheus进行无缝融合。
官方网站:https://www.jaegertracing.io/
Zipkin VS Jaeger
1:在OpenTracing兼容上,两个都兼容,其中Jaeger原生支持;
2:客户端支持语言: Jaeger支持 java/c++/go/node/php;Zipkin支持java/c++/go/
3:支持存储: 两者都支持In-memory/Cassandra/es
4:采样策略上,Jeager支持动态采样(支持速率限制和概率抽样策略);Zipkin固定采样速率(支持概率抽样策略)
5:传输协议上, Jaeger支持udp/http;Zipkin支持http/AMQP/Kafka/Scribe
6:docker化 两者都支持docker化;
OpenCensus
google也开源了OpenCensus, 该项目解决Dapper中缺少的如何从生成服务中提取数据的解决方案。该项目用来收集和跟踪应用指标,同时提供一套统一的度量工具,如跨服务捕获跟踪(span),应用级别指标以及来自其它应用的元数据(如日志),
该工具有一下特点:
标准通信协议与一致的API,
多语言支持
与RPC框架集成,可提供开箱即用的追踪和指标
集成存储和分析工具
开源并支持第三方集成和插件化输出
不需要额外的服务器
如何选择?
在Tracing领域,确实有很多优秀的开源工具,以我看来,已经纳入CNCF会员项目的Jaeger有很大优势,同时,在符合opentracing API标准的前提下,得天独厚。Zipkin次之,而OpenCensus选择另造轮子,而且目前还没有保持和Opentracing兼容的标准,具体如下,还有待以后观察。