
大資料技術與架構
暴走大資料
什麼是Prometheus?
Prometheus是由SoundCloud開發的開源監控報警系統和時序列資料庫(TSDB)。Prometheus使用Go語言開發,是Google BorgMon監控系統的開源版本。
Prometheus的特點
· 多元度資料模型。
· 靈活的查詢語言。
· 不依賴分布式存儲,單個伺服器節點是自主的。
· 通過基于HTTP的pull方式采集時序資料。
· 可以通過中間網關進行時序列資料推送。
· 通過服務發現或者靜态配置來發現目标服務對象。
· 支援多種多樣的圖表和界面展示,比如Grafana等
Prometheus的元件
Prometheus生态系統由多個元件組成,它們中的一些是可選的。多數Prometheus元件是Go語言寫的,這使得這些元件很容易編譯和部署。
· Prometheus Server
主要負責資料采集和存儲,提供PromQL查詢語言的支援。
· 用戶端SDK
官方提供的用戶端類庫有go、java、scala、python、ruby,其他還有很多第三方開發的類庫,支援nodejs、php、erlang等。
· Push Gateway
支援臨時性Job主動推送名額的中間網關。
· Exporter
Exporter是Prometheus的一類資料采集元件的總稱。它負責從目标處搜集資料,并将其轉化為Prometheus支援的格式。與傳統的資料采集元件不同的是,它并不向中央伺服器發送資料,而是等待中央伺服器主動前來抓取。
Prometheus提供多種類型的Exporter用于采集各種不同服務的運作狀态。目前支援的有資料庫、硬體、消息中間件、存儲系統、HTTP伺服器、JMX等。
· alertmanager
警告管理器,用來進行報警。
· 其他輔助性工具
它的服務過程是這樣的 Prometheus daemon 負責定時去目标上抓取 metrics(名額) 資料,每個抓取目标需要暴露一個http服務的接口給它定時抓取。
Prometheus支援通過配置檔案、文本檔案、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。
Alertmanager 是獨立于Prometheus的一個元件,可以支援Prometheus的查詢語句,提供十分靈活的報警方式。
Prometheus支援很多方式的圖表可視化,例如十分精美的Grafana,自帶的Promdash,以及自身提供的模版引擎等等,還提供HTTP API的查詢方式,自定義所需要的輸出。
PushGateway這個元件是支援Client主動推送 metrics 到PushGateway,而Prometheus隻是定時去Gateway上抓取資料。
Prometheus 的資料模型
Prometheus 從根本上所有的存儲都是按時間序列去實作的,相同的 metrics(名額名稱) 和 label(一個或多個标簽) 組成一條時間序列,不同的label表示不同的時間序列。為了支援一些查詢,有時還會臨時産生一些時間序列存儲。
metrics name & label 名額名稱和标簽
每條時間序列是由唯一的 名額名稱 和 一組 标簽 (key=value)的形式組成。
名額名稱 一般是給監測對像起一名字,例如 http_requests_total 這樣,它有一些命名規則,可以包字母數字_之類的的。
通常是以應用名稱開頭_監測對像_數值類型_機關這樣。
例如:
push_total
userlogin_mysql_duration_seconds
app_memory_usage_bytes
标簽 就是對一條時間序列不同次元的識别了,例如 一個http請求用的是POST還是GET,它的endpoint是什麼,這時候就要用标簽去标記了。
最終形成的辨別便是這樣了。
記住,針對http_requests_total這個metrics name 無論是增加标簽還是删除标簽都會形成一條新的時間序列。
查詢語句就可以根據上面标簽的組合來查詢聚合結果了。
如果以傳統資料庫的了解來看這條語句,則可以考慮 http_requests_total是表名,标簽是字段,而timestamp是主鍵,還有一個float64字段是值了。(Prometheus裡面所有值都是按float64存儲)。
Counter 用于累計值,例如 記錄 請求次數、任務完成數、錯誤發生次數。
一直增加,不會減少。
重新開機程序後,會被重置。
例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒後抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100
Gauge 正常數值,例如 溫度變化、記憶體使用變化。
可變大,可變小。
重新開機程序後,會被重置
例如:memory_usage_bytes{host="master-01"} 100 < 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 < 抓取值
Histogram 可以了解為柱狀圖的意思,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。它特别之處是可以對記錄的内容進行分組,提供 count 和 sum 全部值的功能。
例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值
Summary
Summary和Histogram十分相似,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。同樣提供 count 和 sum 全部值的功能。
例如:count=7次,sum=7次的值求值
它提供一個quantiles的功能,可以按%比劃分跟蹤的結果。例如:quantile取值0.95,表示取采樣值裡面的95%資料。
大部分監控項都可以使用Counter來實作,少部分使用Gauge和Histogram,其中Histogram在服務端計算是相當費CPU的,是以也沒要導出太多Histogram資料。
Prometheus适用的場景
Prometheus在記錄純數字時間序列方面表現非常好。它既适用于面向伺服器等硬體名額的監控,也适用于高動态的面向服務架構的監控。對于現在流行的微服務,Prometheus的多元度資料收集和資料篩選查詢語言也是非常的強大。Prometheus是為服務的可靠性而設計的,當服務出現故障時,它可以使你快速定位和診斷問題。它的搭建過程對硬體和服務沒有很強的依賴關系。
Prometheus不适用的場景
Prometheus它的價值在于可靠性,甚至在很惡劣的環境下,你都可以随時通路它和檢視系統服務各種名額的統計資訊。如果你對統計資料需要100%的精确,它并不适用,例如:它不适用于實時計費系統。
Prometheus安裝
官網位址: https://prometheus.io/
下載下傳prometheus
下載下傳node_exporter
node_exporter收集遠端機器的監控資料,提供給Prometheus定時來抓取。
安裝node_exporter
安裝Prometheus
編輯prometheus.yml, 将node_exporter添加到Prometheus目标對象,因為這裡node_exporter和Prometheus安裝在同一台機器,使用localhost即可,node_exporter端口9100。
使用配置檔案啟動Prometheus
nohup ./prometheus --config.file=prometheus.yml &
驗證Prometheus是否安裝成功
Grafana
Grafana 是一個開箱即用的可視化工具,具有功能齊全的度量儀表盤和圖形編輯器,有靈活豐富的圖形化選項,可以混合多種風格,支援多個資料源特點。
安裝grafana
打開Grafana,初始使用者名/密碼是:admin/admin,登入後需及時修改
配置資料源
添加表盤,右下角選擇資料源,選擇監控項,儲存即可
到此Prometheus+Grafana監控平台搭建完成。下一篇文章将介紹如何使用Prometheus監控web項目,及如何使用AlertManager報警子產品。