基於 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
微信交流群
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 微服務:指標和健康監控微服務指標
- 使用Prometheus搞定微服務監控Prometheus微服務
- K8S Canal基於Prometheus進行實時指標監控K8SPrometheus指標
- 基於Prometheus和Grafana打造業務監控看板PrometheusGrafana
- 使用Prometheus監控Golang服務-基於YoyoGo框架PrometheusGolang框架
- SpringCloud使用Prometheus監控(基於Eureka)SpringGCCloudPrometheus
- .Net Core服務監控報警指標上報Prometheus+Grafana指標PrometheusGrafana
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- go-kit 微服務 服務監控 (prometheus 實現)Go微服務Prometheus
- 基於 Prometheus 的監控系統實踐Prometheus
- 基於 Prometheus 的監控神器,簡單靈活!Prometheus
- 微服務監控微服務
- Orabbix監控指標指標
- EMQ 監控指標MQ指標
- mongodb 監控指標MongoDB指標
- Netflix開源Mantis:基於微服務的運維監控平臺微服務運維
- 簡單4步,利用Prometheus Operator實現自定義指標監控Prometheus指標
- 微服務監控探索微服務
- 基於Prometheus+Grafana監控Laravel+Swoole應用PrometheusGrafanaLaravel
- 基於Prometheus閘道器的監控完整實現參考Prometheus
- SSH Exporter:基於Prometheus的遠端系統效能監控神器ExportPrometheus
- Java程式監控指標Java指標
- Grafana+Prometheus 監控 MySql服務GrafanaPrometheusMySql
- prometheus監控golang服務實踐PrometheusGolang
- Skywalking微服務監控分析微服務
- prometheus JVM監控PrometheusJVM
- Prometheus監控mongoPrometheusGo
- Prometheus 監控arangodbPrometheusGo
- 6.prometheus監控--監控dockerPrometheusDocker
- Java服務端監控:Prometheus與Grafana的整合Java服務端PrometheusGrafana
- 基於 Prometheus 的監控神器,看完不信你不會,簡單靈活!Prometheus
- 系統監控&JVM監控指標資料查詢JVM指標
- 基於websocket的celery任務狀態監控Web
- MYSQL和SQLServer效能監控指標MySqlServer指標
- 運維監控指標彙總運維指標
- go 服務監控指標(metric)上報open-falconGo指標
- Prometheus監控神器-服務發現篇(二)Prometheus
- SpringBoot使用prometheus監控Spring BootPrometheus