關於監控平臺的一些想法

監控的目標是什麼?

從這些年從事的監控的平臺開發設計來看,監控的目標不外乎如下4種:php

  1. 故障分析定位
    應用系統出問題,首要想到的是,經過監控系統從複雜的系統間找到問題,定位問題所在。
  2. 系統問題預警
    該預警通常要求實時性,同時通常會考慮性能與實時性的中和。所起到的目的就是在客戶反饋問題前,能作到預警,作的更高級一點的就是可以根據預警作到自動處理,取代之前的人工干預的部分。
  3. 提供歷史趨勢分析
    這個比較好理解,隨着時間歷史監控數據的增多,根據歷史數據作一些監控預測分析一類的簡單工做仍是比較容易的,好比:下個月的交易量,下個促銷日的併發量,下個版本發佈後,可以承受的uv等以及衍生出來的CPU,memory,磁盤使用量等預測信息。
  4. 提供可視化報表等,輔助分析
    經過可視化的儀表盤可以直接獲取系統運行狀態,資源使用狀況,以及服務運行狀態等直觀信息。

那實際的監控現狀是什麼?

目前生成上的監控比較弱:只能查詢單個系統,即通過中間總線成的服務;曾有想法經過traceno來串交易,當至今沒有串起來;同時,任何系統交易只要出現問題,相關的系統都會要求協查到場,究其緣由是由於缺乏全局監控的平臺。監控延遲比較嚴重,通常都是過後的,經常是業務報錯反饋後,才主動去生產上查詢業務失敗緣由。html

監控的內容有哪些?

監控的內容基本能夠分3類,即logging, tracing, metrics,這裏有這些類別的具體描述
metrics-tracing-and-logging
具體象限圖原文中有詳細描述java

Metrics的監控

關於Metrics,首推如今的CNCF的Prometheusnode

Logging監控

日誌收集監控是整個監控日誌查詢的基礎,ELK是該架構的解決方案mysql

Tracing監控

目前分佈式監控的鼻祖是google 的Dapper,具體關於Dapper的論文介紹連接以下:
https://bigbully.github.io/Da...c++

那麼Tracing是什麼?

簡單的說,就是服務或交易間的互相調用鏈的跟蹤監控。如今市場上也有不少的開源解決方案,大體分幾類:以字節碼注入方式實現的pinpoint和基於API埋點的Zipkin/Pinpoint/Jaeger。
其中字節碼注入方式實施起來簡單,對應用來講,幾乎無侵入性。但由於提供的API有限,真正hold住的話須要較強的JVM功底,同時想要本地化擴展的話,比較困難。並且,目前是基於JVM的,想要在其它語言中實現,幾乎不可能;相比之下,基於API埋點的方式更加通用實用些;git

zipkin

2012年,Twiter依照Dapper論文,實現的Zipkin,並集成到本身的商用產品中;Zipkin 組件包括以下:github

Collector 收集
storage 存儲,默認是in-memory模式,支持mysql,cassandra,es
Api 查詢api
ui界面

官方網站:https://zipkin.io/sql

Jaeger

Uber公司基於Dapper,Zipkin的靈感,實現開源分佈式跟蹤系統Jaeger。目前該項目已被Uber,Redhat,SeatGeek和UnderArmour等公司使用,包括阿里雲,都有對應的實現服務。它被設計爲具備高度可擴展性和可用性,併爲OpenTracing標準和衆多存儲後端提供本地支持。它具備現代的UI,並與雲原生應用kubernetes,OpenTraing和Prometheus進行無縫融合。
官方網站:https://www.jaegertracing.io/docker

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兼容的標準,具體以下,還有待之後觀察。

相關文章
相關標籤/搜索