从这些年从事的监控的平台开发设计来看,监控的目标不外乎如下4种:php
目前生成上的监控比较弱:只能查询单个系统,即通过中间总线成的服务;曾有想法经过traceno来串交易,当至今没有串起来;同时,任何系统交易只要出现问题,相关的系统都会要求协查到场,究其缘由是由于缺乏全局监控的平台。监控延迟比较严重,通常都是过后的,经常是业务报错反馈后,才主动去生产上查询业务失败缘由。html
监控的内容基本能够分3类,即logging, tracing, metrics,这里有这些类别的具体描述
metrics-tracing-and-logging
具体象限图原文中有详细描述java
关于Metrics,首推如今的CNCF的Prometheusnode
日志收集监控是整个监控日志查询的基础,ELK是该架构的解决方案mysql
目前分布式监控的鼻祖是google 的Dapper,具体关于Dapper的论文介绍连接以下:
https://bigbully.github.io/Da...c++
简单的说,就是服务或交易间的互相调用链的跟踪监控。如今市场上也有不少的开源解决方案,大体分几类:以字节码注入方式实现的pinpoint和基于API埋点的Zipkin/Pinpoint/Jaeger。
其中字节码注入方式实施起来简单,对应用来讲,几乎无侵入性。但由于提供的API有限,真正hold住的话须要较强的JVM功底,同时想要本地化扩展的话,比较困难。并且,目前是基于JVM的,想要在其它语言中实现,几乎不可能;相比之下,基于API埋点的方式更加通用实用些;git
2012年,Twiter依照Dapper论文,实现的Zipkin,并集成到本身的商用产品中;Zipkin 组件包括以下:github
Collector 收集 storage 存储,默认是in-memory模式,支持mysql,cassandra,es Api 查询api ui界面
官方网站:https://zipkin.io/sql
Uber公司基于Dapper,Zipkin的灵感,实现开源分布式跟踪系统Jaeger。目前该项目已被Uber,Redhat,SeatGeek和UnderArmour等公司使用,包括阿里云,都有对应的实现服务。它被设计为具备高度可扩展性和可用性,并为OpenTracing标准和众多存储后端提供本地支持。它具备现代的UI,并与云原生应用kubernetes,OpenTraing和Prometheus进行无缝融合。
官方网站:https://www.jaegertracing.io/docker
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化;
google也开源了OpenCensus, 该项目解决Dapper中缺乏的如何从生成服务中提取数据的解决方案。该项目用来收集和跟踪应用指标,同时提供一套统一的度量工具,如跨服务捕获跟踪(span),应用级别指标以及来自其它应用的元数据(如日志),
该工具备一下特色:
标准通讯协议与一致的API, 多语言支持 与RPC框架集成,可提供开箱即用的追踪和指标 集成存储和分析工具 开源并支持第三方集成和插件化输出 不须要额外的服务器
在Tracing领域,确实有不少优秀的开源工具,以我看来,已经归入CNCF会员项目的Jaeger有很大优点,同时,在符合opentracing API标准的前提下,得天独厚。Zipkin次之,而OpenCensus选择另造轮子,并且目前尚未保持和Opentracing兼容的标准,具体以下,还有待之后观察。