服務上線後咱們每每須要對服務進行監控,以便能及早發現問題並作針對性的優化,監控又可分爲多種形式,好比日誌監控,調用鏈監控,指標監控等等。而經過指標監控能清晰的觀察出服務指標的變化趨勢,瞭解服務的運行狀態,對於保證服務穩定起着很是重要的做用mysql
prometheus是一個開源的系統監控和告警工具,支持強大的查詢語言PromQL容許用戶實時選擇和匯聚時間序列數據,時間序列數據是服務端經過HTTP協議主動拉取得到,也能夠經過中間網關來推送時間序列數據,能夠經過靜態配置文件或服務發現來獲取監控目標git
Prometheus 的總體架構以及生態系統組件以下圖所示:github
Prometheus Server直接從監控目標中或者間接經過推送網關來拉取監控指標,它在本地存儲全部抓取到樣本數據,並對此數據執行一系列規則,以彙總和記錄現有數據的新時間序列或生成告警。能夠經過 Grafana 或者其餘工具來實現監控數據的可視化redis
go-zero 框架中集成了基於prometheus的服務指標監控,下面咱們經過go-zero官方的示例shorturl來演示是如何對服務指標進行收集監控的:sql
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
經過以上幾個步驟咱們完成了prometheus對shorturl服務的指標監控收集的配置工做,爲了演示簡單咱們進行了手動的配置,在實際的生產環境中通常採用定時更新配置文件或者服務發現的方式來配置監控目標,篇幅有限這裏不展開講解,感興趣的同窗請自行查看相關文檔json
go-zero中目前在http的中間件和rpc的攔截器中添加了對請求指標的監控。api
主要從請求耗時和請求錯誤兩個維度,請求耗時採用了Histogram指標類型定義了多個Buckets方便進行分位統計,請求錯誤採用了Counter類型,並在http metric中添加了path標籤rpc metric中添加了method標籤以便進行細分監控。瀏覽器
接下來演示如何查看監控指標:架構
首先在命令行屢次執行以下命令app
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是一款可視化工具,功能強大,支持多種數據來源Prometheus、Elasticsearch、Graphite等,安裝比較簡單請參考官方文檔,grafana默認端口3000,安裝好後再瀏覽器輸入http://localhost:3000/,默認帳號和密碼都爲admin
下面演示如何基於以上指標進行可視化界面的繪製:
以上演示了go-zero中基於prometheus+grafana服務指標監控的簡單流程,生產環境中能夠根據實際的場景作不一樣維度的監控分析。如今go-zero的監控指標主要仍是針對http和rpc,這對於服務的總體監控顯然仍是不足的,好比容器資源的監控,依賴的mysql、redis等資源的監控,以及自定義的指標監控等等,go-zero在這方面後續還會持續優化。但願這篇文章可以給您帶來幫助