監控系統學習總結

1.背景介紹

      我們在工作中開發的業務系統都要接入監控系統並配置上報警信息,當某個業務系統的某個方法調用性能飈高,或者可用率下降的時候,我們通過報警能及時發現並處理,監控系統可以按照秒,分鐘,小時看這個方法的執行調用情況,類似下圖,那麼這種監控系統我們是否考慮過業界有哪些實現?以及這種監控系統的原理是啥?底層存儲的數據結構是啥?

2. 原理分析

       通常我們的業務系統要集成監控系統的SDK,業務系統進行在統計的方法前後埋點(可通過AOP實現)寫調用日誌信息到本地磁盤裏,然後應用的所在docker還有一個日誌收集器服務agent,這個agent定時蒐集日誌信息往日誌中心進行上報,如下圖所示

       如果不用這種日誌收集agent的話,我們也可以把日誌信息放到LinkedBlockingQueue,然後另外啓動一個線程把這些信息傳到日誌收集中心,如果要統計CPU的信息要啓動2個線程,一個線程負責收集CPU信息到LinkedBlockingQueue,另外一個線程從隊列獲取數據放到日誌收集中心,比如像秒級監控收集可以基於guava的Cache(RemovalListener)做的調用量計數器,由於調用日誌可能非常大,我們需要考慮是否實時把調用日誌都要傳到日誌收集中,是否容忍日誌數據丟失的問題,

      針對這種調用日誌採用什麼數據結構存儲呢,比如上圖哪個監控頁面是統計某個保存方法的性能情況,監控key爲system.product.doSave,上面有每5分鐘的監控數據,我們很容易想到可以用redis的hash,key是時間,value是改時間段的調用性能情況(tp99),調用次數和其它監控指標也一樣 ,如下圖所示

2020-05-04 10:50:00   2
2020-05-04 10:55:00   3
2020-05-04 11:00:00   3
2020-05-04 11:05:00   4

   至於這個監控key的生成算法則則比較簡答,可以本地測試下

   public static void main(String[] args) {
        long currentTime = System.currentTimeMillis()/1000;
        long timePrex  = currentTime/300*300;
        System.out.println(timePrex);
    }


3. 業界參考

3.1 Openstack Telemetry

polling agents:一種server,週期性的去探測狀態和數據,並進行轉化,完了推送至消息中間件(Notification Bus)
notification agents:監聽消息隊列,把消息轉化爲事件和數據採樣,執行預定義的一系列動
collector: 保存polling agents和notification agents產生的數據,寫入某種存儲
api:對外提供數據查詢,屏蔽存儲細節,存儲系統不對外直接暴露

採集:celiometer
telemetry數據採集,雖然官方推薦用戶使用主動推送數據的方式,目前仍然以polling agent主動去探測爲主。
http://docs.openstack.org/developer/ceilometer/architecture.html
存儲:gnocchi
http://docs.openstack.org/developer/gnocchi/architecture.html
報警:aodh
http://docs.openstack.org/developer/aodh/architecture.html

3.2 Google Stackdriver

Stackdriver原本是一家創業公司,主要面向AWS和Rackspace平臺用戶提供監控服務。
後被google收購,併入Google Cloud Platform,爲GCP用戶提供監控、日誌、問題診斷支持,目前處於beta階段,不對外提供SLA保證。

3.3 AWS CloudWatch(https://www.amazonaws.cn/en/cloudwatch/)

3.4 influxdb+grafana(https://docs.influxdata.com/influxdb/v1.5/introduction/installation/)

3.5 ELK日誌分析系統(參見https://www.cnblogs.com/cheyunhua/p/11238489.html

3.6 Google Dapper分佈式鏈路追蹤監控系統論文(參見https://blog.csdn.net/vking_wang/article/details/89203639) 

  https://github.com/dianping/cat(大衆點評)
   https://github.com/apache/skywalking
  https://github.com/naver/pinpoint(韓國)
  https://github.com/openzipkin/zipkin( Twitter)
  https://github.com/apache/incubator-skywalking   

3.7 阿里性能分析工具https://github.com/alibaba/TProfiler/wiki/TProfiler%E4%BB%8B%E7%BB%8D%E6%96%87%E6%A1%A3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章