當前位置:
首頁 > 最新 > Prometheus+Grafana實現監控系統

Prometheus+Grafana實現監控系統

最近在研究系統監控,把一些心得成果分享一下。

Prometheus

一款時序資料庫,比較適合應用在系統監控領域,特點是豐富的插件(exporter)支持來面向多種業務及系統場景,包括告警通知等,還支持從多種數據源pull數據,並且性能還挺不錯。官網https://prometheus.io/download/ 提供了多種平台的安裝包,不過我很懶:

docker pull prom/prometheus

docker run -p 9090:9090 prom/prometheus

打開瀏覽器訪問http://localhost:9090看到prometheus運行成功。

Exporter

通過菜單status--targets可以看到目前正在運行的exporter任務,exporter主要是來負責導出數據到prometheus,不過實際上是prometheus pull數據。當前只有prometheus自己的任務,我們需要加入新的任務。這裡需要修改prometheus的配置文件來新增,具體位置在/etc/prometheus/prometheus.yml,修改如下:

對了,我們要先進入docker 鏡像里才行,prometheus不知為何並沒有/bin/bash,這裡使用docker exec -it ecc /bin/sh的方式。

可以看到我一口氣加入了3個exporter,並且聲明了他們的地址,但目前他們還不存在,我們需要單獨下載和運行這些exporter。這裡,我想監控一台centos機器的系統指標,就需要node_exporter https://github.com/prometheus/node_exporter, 我還想監控一下我本機windows10系統的性能指標,就需要wmi exporter https://github.com/martinlindhe/wmi_exporter,最後我想通過sql查詢的方式得到具體業務系統的數據,就需要 prometheus-sql exporter https://github.com/chop-dbhi/prometheus-sql。

我需要將他們分別部署在對應的機器上,然後運行他們即可。對於node和wmi來說還是比較簡單的,直接運行即可。這裡介紹一下prometheus-sql,他還需要一個額外的sql-agent來執行處理sql,按照官方的推薦:

docker pull dbhi/sql-agent

docker run -d -p 5000:5000 dbhi/sql-agent

然後就可以不管他了。

prometheus-sql需要一個queries.yml來配置資料庫連接及必要的sql語句:

-num_products:

driver:mssql

connection:

host:192.168.1.100

port:1433

user:sa

password:369

database:KXI

select HotelCode as hotel_code,DataType as data_type,convert(char(10),QueueDate,120) as queue_date,count(*) as error_count from queuemessage where status="F"

group by HotelCode,DataType,convert(char(10),QueueDate,120)

interval:30s

data-field:error_count

將之放在prometheus-sql.exe同級目錄即可,接下來powershell執行:

./prometheus-sql.exe -service http://localhost:5000

現在我們查看prometheus的status--targets,他們都run起來了。

我們可以在prometheus首頁執行一些查詢,比如執行node_memory_Active可以查看centos機器的內存使用情況,執行wmi_cs_physical_memory_bytes - wmi_os_physical_memory_free_bytes可以查看windows機器的內存佔用,可以看到一個難看的圖。

Grafana

圖很難看,我們需要高大上一點,所以下面要祭出Grafana,依然很懶:

docker pull grafana/grafana

docker run -d -p 3000:3000 grafana/grafana

訪問http://localhost:3000 看到登錄頁就說明run起來了。默認登錄用戶名密碼都是admin。我們需要創建一個Prometheus的數據源:

注意點擊save & test如果不報錯就成功了,這是一切的基礎,很重要。

接下來就是創建dashboard了,通過左邊菜單的加號可以創建,Grafana提供了多種圖例,這裡我們嘗試第一種graph,然後通過點擊title找到edit進行詳細設置,可以設置諸如數據源,具體的查詢,告警通知等等:

可以看到我本機內存佔用較高,畢竟搭建了這一整套環境。

我們還有一個查看酒店消息錯誤數的exporter,我們也通過grafana實現。依然是新建graph,然後進入edit模式。我們需要先將axes--mode設置為series,value設置為current,因為我的需求是查看各個酒店消息錯誤數的對比,並且不考慮時間軸的波動。設置後圖表將變成柱狀圖。現在我們可以在metrics寫query了:

sum(query_result_num_products) by (hotel_code)

這是一個按照酒店代碼sum聚合查詢。我們還需要設置legend format為{}來格式化一些橫軸為純凈的酒店代碼,最終效果圖:

可以看到fsdh和opera1酒店的指標數據數相對較高,就顯得其他酒店似乎沒有錯誤數了?如果能有一個條件選擇器過濾選擇具體一些酒店是否會更好一些?grafana提供了變數功能來實現。我們需要點擊右上方的settings--variables新建一個變數:

變數名為HotelCode,是基於Query方式獲取,所以要指定查詢的數據源,這裡是Prometheus,並指定在每次進入dashboard時要Refresh一次。然後就可以寫Query了,注意這裡的label_values是grafana提供的,用於將具體的維度值截取出來。再往下,我們需要多選,同時也要有一個All選項來選中所有值,所以要勾選Multi-value和Include All option,最下面就是查詢的預覽結果,是我想要的。

回到dashboard,我們會發現界面上出現一個HotelCode篩選器,可以下拉選擇一些hotelcode,但是選中也沒有效果,因為我們還沒有設置變數的具體應用場景。我們再次回到圖表中,需要修改查詢加入變數:

sum(query_result_num_products) by (hotel_code)

除了fsdh和opera1之外剩下的酒店都選中,這回看起來明朗多了。

Alert

作為一個監控系統,報警通知是必不可少的功能,grafana支持對指定維度的指標數據設置警戒值報警,報警方式豐富,從傳統的email,到時下流行的釘釘,雖然沒有簡訊方式,但也有webhook方式來自行擴展,下面我們來嘗試加入一個報警通知,這裡採用釘釘。

首先下載註冊釘釘,然後需要創建一個團隊,通過機器人管理創建自定義的webhook機器人,最後記得將發布的地址copy一下即可。

接下來就是grafana的配置了。在左側菜單alerting--notification channels創建通知方式如下:

url填入之前複製的釘釘機器人地址。

Grafana的告警還是有一些限制的,首先只有graph的圖表才支持,然後告警是指定不包含參數的查詢的,所以之前例子里涉及HotelCode參數的查詢都無法設置告警。這邊我新建一個圖表查詢:

sum(query_result_num_products) by (hotel_code)

在graph的alert--alert config進行配置,我們可以給告警設置一個友好的名字,默認60s檢查一次,通過conditions來設置具體的警戒值條件,在這裡我設置指標值的最大值,在B查詢在過去5分鐘內達到12765。然後在alert--notification選擇具體的通知方式和消息。

從上圖看指標值明顯超過警戒值,我們需要在alert--alert rules重啟,60s內我的釘釘就會收到消息:

告警信息包含了基本的名字和描述,點擊可跳轉到對應graph頁面。

最後在許可權控制方面,Grafana通過role+organization可實現用戶可看或編輯哪些dashboard。grafana有集成keycloak的可能,因為支持oauth2.0。

有關監控方面的技術框架還有很多值得深挖,未來先從構建我們內部使用的監控平台開始吧。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Garfield的世界 的精彩文章:

TAG:Garfield的世界 |