監控系統的入門搭建 Prometheus(普羅米修斯)
基礎理論篇
對於普羅米修斯的介紹可以參考這篇文章,寫的非常好,非常權威,不遜色於官方文檔,可以說是中文環境下最好的參考資料
Prometheus 入門與實踐
吳莉, 殷一鳴, 和蔡林
2018 年 5 月 30 日發布
我想寫出一篇超過這篇文章顯然以現在的實力是不太現實
畢竟是很權威的文章,這種文章的通病就是太過學術,沒有了解過的人很難讀過就能明確的理解。
那么就有我自己的理解來講講Prometheus的各個方面的問題
可能有的觀點是錯誤的,所以還是把他當成茶余飯后的休閑文章看看吧
Prometheus到底在我的服務器,kvm,或者docker上做了什么?
首先要解答這個問題,我們必須了解一個重要的概念
Metric
這個官方文檔出現頻率的最高的單詞
谷歌機翻翻譯為度量,我覺得翻作指標可能更加貼切
其實它的本質就是存在某一款數據庫的一條記錄
什么是metric
這篇文章介紹的也很詳細
總之就是監控系統通過服務將某個監控數據存入某個數據庫的某條記錄
這條記錄可以動態的增加字段,最終得到了通用的metric結構,name,label(與tag{}同義僅名字不同,在Prometheus中為label),value,timestamp
我們將額外需要擴展增加的數據生成json存入label{} ,這樣可以方便的擴展字段,而不用每次都修改數據庫的表結構
(PS:在Prometheus中提供四種 Metric 類型 Counter, Gauge, Histogram,Summary)
具體的內容我就不再贅述,可以通過上文來了解Metric
那么了解Metric,我們還需要了解alert
Alert其實就是警報,我們的監控系統就是為了在集群出現問題的時候
及時向運維人員報告
那么Prometheus究竟對我們的機器做了什么?
它的組成
Prometheus Server:
用於收集和存儲時間序列數據。
Client Library:
客戶端庫,為需要監控的服務生成相應的 metrics 並暴露給 Prometheus server。
當 Prometheus server 來 pull 時,直接返回實時狀態的 metrics。Push Gateway: 主要用於短期的 jobs。
由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。
為此,這次 jobs 可以直接向 Prometheus server 端推送它們的 metrics。
這種方式主要用於服務層面的 metrics,對於機器層面的 metrices,需要使用 node exporter。
Exporters:
用於暴露已有的第三方服務的 metrics 給 Prometheus。
Alertmanager:
從 Prometheus server 端接收到 alerts 后,會進行去除重復數據,分組,並路由到對收的接受方式,發出報警。
常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。
一些其他的工具:
。。。。。。。。
Prometheus架構圖
其中jobs/Eeporters就是生成metric的,然后我們的Prometheus server從它們那定期獲取metrics,或者一些短暫的jobs生成的metric推送給Pushgateway
再由Pushgateway推送給Prometheus server,或者其他機器的Prometheus server發給本機的Prometheus server,
總之我們想獲取的的數據源在Prometheus server中匯總后按照我們規定的報警機制(alert.rules)推送警報到Alertmanager或者刷新時間序列(就是不報警,相安無事)
最后Alertmanager 根據配置文件,對接收到的警報進行處理,發出告警。在圖形界面中,可視化采集數據(這一步我們放在grafana上去做)
(PS:
instance 和 jobs.的區別
instance:
一個單獨 scrape 的目標, 一般對應於一個進程。
jobs:
一組同種類型的 instances(主要用於保證可擴展性和可靠性))
例如:清單 1. job 和 instance 的關系
job: api-server instance 1: 1.2.3.4:5670 instance 2: 1.2.3.4:5671 instance 3: 5.6.7.8:5670 instance 4: 5.6.7.8:5671
當 scrape 目標時,Prometheus 會自動給這個 scrape 的時間序列附加一些標簽以便更好的分別,例如: instance,job。
下面以實際的 metric 為例,對上述概念進行說明。
如上圖所示,這三個 metric 的名字都一樣,他們僅憑 handler 不同而被標識為不同的 metrics。這類 metrics 只會向上累加,是屬於 Counter 類型的 metric,且 metrics 中都含有 instance 和 job 這兩個標簽
到此我們已經了解了Prometheus 最基礎的個概念,下一篇我們就要小試牛刀,試試實際運行