分佈式系統學習:04 分佈式系統關鍵技術:全棧監控

全棧監控的重要性

全棧系統監控,就像是我們的眼睛,沒有它,我們就不知道系統到底發生了什麼,我們將無法管理或是運維整個分佈式系統。所以,這個系統是非常非常關鍵的。

在分佈式或 Cloud Native 的情況下,系統分層多,服務各種關聯,相應的需要監控的東西也就特別多,那麼這個監控系統需要完成的功能爲:

  • 全棧監控;
  • 關聯分析;
  • 跨系統調用的串聯;
  • 實時報警和自動處置;
  • 系統性能分析。

全棧監控的分層

謂全棧監控,其實就是三層監控,基礎層、中間層、應用層

  • 基礎層: 監控主機和底層資源。比如:CPU、內存、網絡吞吐、硬盤 I/O、硬盤使用等硬件相關的資源。
  • 中間層: 就是中間件層的監控。比如:Nginx、Redis、ActiveMQ、Kafka、MySQL、Tomcat 等
  • 應用層:監控應用層的使用。比如:HTTP 訪問的吞吐量、響應時間、返回碼、調用鏈路分析、性能瓶頸,還包括用戶端的監控。

圖片來自左耳聽風(極客時間)
監控這麼多東西,需要一些監控的標準化,讓行爲有規矩,繁而不亂。

  • 日誌數據結構化
  • 監控數據格式標準化
  • 統一的監控平臺
  • 統一的日誌分析

什麼纔是好的監控系統

要知道不好的監控系統,主要有兩個很大的問題:

1.監控數據是隔離開來的: 開發、應用運維、系統運維各管各的,監控系統之間都有一道牆,完全串不起來
2. 監控的數據項太多: 數據和信息太多等於沒有信息,抓不住重點

好的監控系統應該有以下幾個特徵:

  • 關注於整體應用的 SLA。主要從爲用戶服務的 API 來監控整個系統。
  • 關聯指標聚合。 把有關聯的系統及其指標聚合展示。
  • 快速故障定位。

換句話說,一個好的監控系統主要是爲以下兩個場景所設計的。

“體檢”:容量管理(是否需要增加機器或者其它資源)、性能管理。(針對性地優化系統和相應代碼)
“急診”:定位問題(快速定位問題,幫助診斷問題)、性能分析(分析系統瓶頸)

如何做出一個好的監控系統

  • 服務調用鏈跟蹤:從對外的 API 開始,一步步關聯相關依賴,直到最後一個服務,形成服務調用鏈,這樣把整個服務全部串連起來。
  • 服務調用時長分佈:可以查看一個服務調用鏈上的時間分佈,這樣有助於知道最耗時的服務是什麼。
  • 服務的 TOP N 視圖:所謂 TOP N 視圖就是一個系統請求的排名情況。可以快速找到系統中的關鍵點。一般來說,這個排名會有三種排名的方法:a)按調用量排名,b) 按請求最耗時排名,c)按熱點排名(一個時間段內的請求次數的響應時間和)。
  • 數據庫操作關聯: 反應數據庫操作的執行時間,有助於定位數據庫相關問題的定位
  • 服務資源跟蹤:服務運行的機器節點上的數據(如 CPU、MEM、I/O、DISK、NETWORK)關聯起來。

有了這些數據上的關聯,我們就可以達到如下的目標。

  • 當一臺機器掛掉是因爲 CPU 或 I/O 過高的時候,我們馬上可以知道其會影響到哪些對外服務的 API。
  • 當一個服務響應過慢的時候,我們馬上能關聯出來是否在做 Java GC,或是其所在的計算結點上是否有資源不足的情況,或是依賴的服務是否出現了問題。
  • 當發現一個 SQL 操作過慢的時候,我們能馬上知道其會影響哪個對外服務的 API。
  • 當發現一個消息隊列擁塞的時候,我們能馬上知道其會影響哪些對外服務的 API。

總之,我們就是想知道用戶訪問哪些請求會出現問題,這對於我們瞭解故障的影響面非常有幫助。

一旦瞭解了這些信息,就知道問題在哪瓶頸在哪,我們就可以做出調度

所以,一個分佈式系統,或是一個自動化運維繫統,或是一個 Cloud Native 的雲化系統,最重要的事就是把監控系統做好。在把數據收集好的同時,更重要的是把數據關聯好。這樣,我們纔可能很快地定位故障,進而才能進行自動化調度。

參考資料:

左耳聽風(極客時間)鏈接:
http://gk.link/a/10f5D


GitHub鏈接:
https://github.com/lichangke/LeetCode
知乎個人首頁:
https://www.zhihu.com/people/lichangke/
CSDN首頁:
https://me.csdn.net/leacock1991
歡迎大家來一起交流學習

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