基于prometheus的微服務指標監控
服務上線后我們往往需要對服務進行監控,以便能及早發現問題并做針對性的優化,監控又可分為多種形式,比如日志監控,呼叫鏈監控,指標監控等等,而通過指標監控能清晰的觀察出服務指標的變化趨勢,了解服務的運行狀態,對于保證服務穩定起著非常重要的作用
prometheus是一個開源的系統監控和告警工具,支持強大的查詢語言PromQL允許用戶實時選擇和匯聚時間序列資料,時間序列資料是服務端通過HTTP協議主動拉取獲得,也可以通過中間網關來推送時間序列資料,可以通過靜態組態檔或服務發現來獲取監控目標
Prometheus 的架構
Prometheus 的整體架構以及生態系統組件如下圖所示:

Prometheus Server直接從監控目標中或者間接通過推送網關來拉取監控指標,它在本地存盤所有抓取到樣本資料,并對此資料執行一系列規則,以匯總和記錄現有資料的新時間序列或生成告警,可以通過 Grafana 或者其他工具來實作監控資料的可視化
go-zero基于prometheus的服務指標監控
go-zero 框架中集成了基于prometheus的服務指標監控,下面我們通過go-zero官方的示例shorturl來演示是如何對服務指標進行收集監控的:
- 第一步需要先安裝Prometheus,安裝步驟請參考官方檔案
- go-zero默認不開啟prometheus監控,開啟方式很簡單,只需要在shorturl-api.yaml檔案中增加配置如下,其中Host為Prometheus Server地址為必填配置,Port埠不填默認9091,Path為用來拉取指標的路徑默認為/metrics
Prometheus:
Host: 127.0.0.1
Port: 9091
Path: /metrics
- 編輯prometheus的組態檔prometheus.yml,添加如下配置,并創建targets.json
- job_name: 'file_ds'
file_sd_configs:
- files:
- targets.json
- 編輯targets.json檔案,其中targets為shorturl配置的目標地址,并添加了幾個默認的標簽
[
{
"targets": ["127.0.0.1:9091"],
"labels": {
"job": "shorturl-api",
"app": "shorturl-api",
"env": "test",
"instance": "127.0.0.1:8888"
}
}
]
- 啟動prometheus服務,默認偵聽在9090埠
prometheus --config.file=prometheus.yml
- 在瀏覽器輸入http://127.0.0.1:9090/,然后點擊Status -> Targets即可看到狀態為Up的Job,并且Lables欄可以看到我們配置的默認的標簽

通過以上幾個步驟我們完成了prometheus對shorturl服務的指標監控收集的配置作業,為了演示簡單我們進行了手動的配置,在實際的生產環境中一般采用定時更新組態檔或者服務發現的方式來配置監控目標,篇幅有限這里不展開講解,感興趣的同學請自行查看相關檔案
go-zero監控的指標型別
go-zero中目前在http的中間件和rpc的攔截器中添加了對請求指標的監控,
主要從請求耗時和請求錯誤兩個維度,請求耗時采用了Histogram指標型別定義了多個Buckets方便進行分位統計,請求錯誤采用了Counter型別,并在http metric中添加了path標簽rpc metric中添加了method標簽以便進行細分監控,
接下來演示如何查看監控指標:
首先在命令列多次執行如下命令
curl -i "http://localhost:8888/shorten?url=http://www.xiaoheiban.cn"
打開Prometheus切換到Graph界面,在輸入框中輸入{path="/shorten"}指令,即可查看監控指標,如下圖

我們通過PromQL語法查詢過濾path為/shorten的指標,結果中顯示了指標名以及指標數值,其中http_server_requests_code_total指標中code值為http的狀態碼,200表明請求成功,http_server_requests_duration_ms_bucket中對不同bucket結果分別進行了統計,還可以看到所有的指標中都添加了我們配置的默認指標
Console界面主要展示了查詢的指標結果,Graph界面為我們提供了簡單的圖形化的展示界面,在實際的生產環境中我們一般使用Grafana做圖形化的展示
grafana可視化界面
grafana是一款可視化工具,功能強大,支持多種資料來源Prometheus、Elasticsearch、Graphite等,安裝比較簡單請參考官方檔案,grafana默認埠3000,安裝好后再瀏覽器輸入http://localhost:3000/,默認賬號和密碼都為admin
下面演示如何基于以上指標進行可視化界面的繪制:
- 點擊左側邊欄Configuration->Data Source->Add data source進行資料源添加,其中HTTP的URL為資料源的地址

- 點擊左側邊欄添加dashboard,然后添加Variables方便針對不同的標簽進行過濾篩選比如添加app變數用來過濾不同的服務

- 進入dashboard點擊右上角Add panel添加面板,以path維度統計介面的qps

- 最終的效果如下所示,可以通過服務名稱過濾不同的服務,面板展示了path為/shorten的qps變化趨勢

總結
以上演示了go-zero中基于prometheus+grafana服務指標監控的簡單流程,生產環境中可以根據實際的場景做不同維度的監控分析,現在go-zero的監控指標主要還是針對http和rpc,這對于服務的整體監控顯然還是不足的,比如容器資源的監控,依賴的mysql、redis等資源的監控,以及自定義的指標監控等等,go-zero在這方面后續還會持續優化,希望這篇文章能夠給您帶來幫助
專案地址:
https://github.com/tal-tech/go-zero
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/199684.html
標籤:其他
上一篇:Java In This Week : 打工人的一周
下一篇:執行緒(一)
