在微服務(wù)治理中,服務(wù)監(jiān)控也是非常重要的一個(gè)環(huán)節(jié),監(jiān)控一個(gè)服務(wù)是否正常工作,需要從多維度進(jìn)行,如:
監(jiān)控的工作非常大,本節(jié)僅以其中的服務(wù)指標(biāo)監(jiān)控作為例子進(jìn)行說(shuō)明。
服務(wù)上線后我們往往需要對(duì)服務(wù)進(jìn)行監(jiān)控,以便能及早發(fā)現(xiàn)問(wèn)題并做針對(duì)性的優(yōu)化,監(jiān)控又可分為多種形式,比如日志監(jiān)控,調(diào)用鏈監(jiān)控,指標(biāo)監(jiān)控等等。而通過(guò)指標(biāo)監(jiān)控能清晰的觀察出服務(wù)指標(biāo)的變化趨勢(shì),了解服務(wù)的運(yùn)行狀態(tài),對(duì)于保證服務(wù)穩(wěn)定起著非常重要的作用 prometheus是一個(gè)開源的系統(tǒng)監(jiān)控和告警工具,支持強(qiáng)大的查詢語(yǔ)言PromQL允許用戶實(shí)時(shí)選擇和匯聚時(shí)間序列數(shù)據(jù),時(shí)間序列數(shù)據(jù)是服務(wù)端通過(guò)HTTP協(xié)議主動(dòng)拉取獲得,也可以通過(guò)中間網(wǎng)關(guān)來(lái)推送時(shí)間序列數(shù)據(jù),可以通過(guò)靜態(tài)配置文件或服務(wù)發(fā)現(xiàn)來(lái)獲取監(jiān)控目標(biāo)
Prometheus 的整體架構(gòu)以及生態(tài)系統(tǒng)組件如下圖所示:
Prometheus Server直接從監(jiān)控目標(biāo)中或者間接通過(guò)推送網(wǎng)關(guān)來(lái)拉取監(jiān)控指標(biāo),它在本地存儲(chǔ)所有抓取到樣本數(shù)據(jù),并對(duì)此數(shù)據(jù)執(zhí)行一系列規(guī)則,以匯總和記錄現(xiàn)有數(shù)據(jù)的新時(shí)間序列或生成告警??梢酝ㄟ^(guò) Grafana 或者其他工具來(lái)實(shí)現(xiàn)監(jiān)控?cái)?shù)據(jù)的可視化
go-zero 框架中集成了基于prometheus的服務(wù)指標(biāo)監(jiān)控,下面我們通過(guò)go-zero官方的示例shorturl來(lái)演示是如何對(duì)服務(wù)指標(biāo)進(jìn)行收集監(jiān)控的:
Prometheus:
Host: 127.0.0.1
Port: 9091
Path: /metrics
- job_name: 'file_ds'
file_sd_configs:
- files:
- targets.json
[
{
"targets": ["127.0.0.1:9091"],
"labels": {
"job": "shorturl-api",
"app": "shorturl-api",
"env": "test",
"instance": "127.0.0.1:8888"
}
}
]
$ prometheus --config.file=prometheus.yml
通過(guò)以上幾個(gè)步驟我們完成了prometheus對(duì)shorturl服務(wù)的指標(biāo)監(jiān)控收集的配置工作,為了演示簡(jiǎn)單我們進(jìn)行了手動(dòng)的配置,在實(shí)際的生產(chǎn)環(huán)境中一般采用定時(shí)更新配置文件或者服務(wù)發(fā)現(xiàn)的方式來(lái)配置監(jiān)控目標(biāo)。
go-zero目前在http的中間件和rpc的攔截器中添加了對(duì)請(qǐng)求指標(biāo)的監(jiān)控。
主要從請(qǐng)求耗時(shí)和請(qǐng)求錯(cuò)誤兩個(gè)維度,請(qǐng)求耗時(shí)采用了Histogram指標(biāo)類型定義了多個(gè)Buckets方便進(jìn)行分位統(tǒng)計(jì),請(qǐng)求錯(cuò)誤采用了Counter類型,并在http metric中添加了path標(biāo)簽rpc metric中添加了method標(biāo)簽以便進(jìn)行細(xì)分監(jiān)控。 接下來(lái)演示如何查看監(jiān)控指標(biāo): 首先在命令行多次執(zhí)行如下命令
$ curl -i "http://localhost:8888/shorten?url=http://www.xiaoheiban.cn"
打開Prometheus切換到Graph界面,在輸入框中輸入{path="/shorten"}指令,即可查看監(jiān)控指標(biāo),如下圖
我們通過(guò)PromQL語(yǔ)法查詢過(guò)濾path為/shorten的指標(biāo),結(jié)果中顯示了指標(biāo)名以及指標(biāo)數(shù)值,其中http_server_requests_code_total指標(biāo)中code值為http的狀態(tài)碼,200表明請(qǐng)求成功,http_server_requests_duration_ms_bucket中對(duì)不同bucket結(jié)果分別進(jìn)行了統(tǒng)計(jì),還可以看到所有的指標(biāo)中都添加了我們配置的默認(rèn)指標(biāo) Console界面主要展示了查詢的指標(biāo)結(jié)果,Graph界面為我們提供了簡(jiǎn)單的圖形化的展示界面,在實(shí)際的生產(chǎn)環(huán)境中我們一般使用Grafana做圖形化的展示
grafana是一款可視化工具,功能強(qiáng)大,支持多種數(shù)據(jù)來(lái)源Prometheus、Elasticsearch、Graphite等,安裝比較簡(jiǎn)單請(qǐng)參考官方文檔,grafana默認(rèn)端口3000,安裝好后再瀏覽器輸入http://localhost:3000/,默認(rèn)賬號(hào)和密碼都為admin 下面演示如何基于以上指標(biāo)進(jìn)行可視化界面的繪制: 點(diǎn)擊左側(cè)邊欄Configuration->Data Source->Add data source進(jìn)行數(shù)據(jù)源添加,其中HTTP的URL為數(shù)據(jù)源的地址
點(diǎn)擊左側(cè)邊欄添加dashboard,然后添加Variables方便針對(duì)不同的標(biāo)簽進(jìn)行過(guò)濾篩選比如添加app變量用來(lái)過(guò)濾不同的服務(wù)
進(jìn)入dashboard點(diǎn)擊右上角Add panel添加面板,以path維度統(tǒng)計(jì)接口的qps
最終的效果如下所示,可以通過(guò)服務(wù)名稱過(guò)濾不同的服務(wù),面板展示了path為/shorten的qps變化趨勢(shì)
以上演示了go-zero中基于prometheus+grafana服務(wù)指標(biāo)監(jiān)控的簡(jiǎn)單流程,生產(chǎn)環(huán)境中可以根據(jù)實(shí)際的場(chǎng)景做不同維度的監(jiān)控分析?,F(xiàn)在go-zero的監(jiān)控指標(biāo)主要還是針對(duì)http和rpc,這對(duì)于服務(wù)的整體監(jiān)控顯然還是不足的,比如容器資源的監(jiān)控,依賴的mysql、redis等資源的監(jiān)控,以及自定義的指標(biāo)監(jiān)控等等,go-zero在這方面后續(xù)還會(huì)持續(xù)優(yōu)化。希望這篇文章能夠給您帶來(lái)幫助
更多建議: