從這些年從事的監控的平臺開發設計來看,監控的目標不外乎如下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兼容的標準,具體以下,還有待之後觀察。