天天看點

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

幹掉ELK | 使用Prometheus+Grafana搭建監控平台
幹掉ELK | 使用Prometheus+Grafana搭建監控平台

大資料技術與架構

幹掉ELK | 使用Prometheus+Grafana搭建監控平台
幹掉ELK | 使用Prometheus+Grafana搭建監控平台

暴走大資料

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

什麼是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

警告管理器,用來進行報警。

· 其他輔助性工具

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

它的服務過程是這樣的 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

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

下載下傳node_exporter

node_exporter收集遠端機器的監控資料,提供給Prometheus定時來抓取。

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

安裝node_exporter

安裝Prometheus

編輯prometheus.yml, 将node_exporter添加到Prometheus目标對象,因為這裡node_exporter和Prometheus安裝在同一台機器,使用localhost即可,node_exporter端口9100。

使用配置檔案啟動Prometheus

nohup ./prometheus --config.file=prometheus.yml &

驗證Prometheus是否安裝成功

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

Grafana

Grafana 是一個開箱即用的可視化工具,具有功能齊全的度量儀表盤和圖形編輯器,有靈活豐富的圖形化選項,可以混合多種風格,支援多個資料源特點。

安裝grafana

打開Grafana,初始使用者名/密碼是:admin/admin,登入後需及時修改

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

配置資料源

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

添加表盤,右下角選擇資料源,選擇監控項,儲存即可

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

到此Prometheus+Grafana監控平台搭建完成。下一篇文章将介紹如何使用Prometheus監控web項目,及如何使用AlertManager報警子產品。

幹掉ELK | 使用Prometheus+Grafana搭建監控平台

繼續閱讀