go-kit 微服務 服務監控 (prometheus 實現)
go-kit 微服務 服務監控(prometheus 實現)
- 實現對登入方法的請求次數,與請求耗時進行監控
prometheus
- 相關介紹使用請看文章《docker 安裝 prometheus(普羅米修斯)》
- Prometheus 的四種資料型別
- Counter(計數器) 它是一個只能遞增的數值,重啟程式後會被重置 (例如記錄:請求次數、任務完成數、錯誤發生次數)
- Gauge(測量器) 它表示一個既可以遞增, 又可以遞減的值,重啟程式後,會被重置 (例如 溫度變化、CPU,記憶體,網路使用變化)
- Histogram(柱狀圖)
- 每個取樣點進行統計,打到各個分類值中 (bucket)
- 對每個取樣點值累計和 (sum)
- 對取樣點的次數累計和 (count)
- 例如:請求耗時、響應大小。
- Summary 類似 histogram 柱狀圖,summary 是取樣點分點陣圖統計
- 有一個 quantiles 的功能,可以按% 比劃分跟蹤的結果。例如:quantile 取值 0.85,表示取取樣值裡面的 85% 資料。
- 例如:請求耗時、響應大小。
- 具體區別可看文件histogram 和 summaries
定義統計服務中介軟體
- 建立 metricsMiddlewareServer 結構體
type metricsMiddlewareServer struct {
next Service
counter metrics.Counter
histogram metrics.Histogram
}
- 建立 NewMetricsMiddlewareServer 把統計物件嵌入中介軟體(其實就是對 Service 新增了一層裝飾)
func NewMetricsMiddlewareServer(counter metrics.Counter, histogram metrics.Histogram) NewMiddlewareServer {
return func(service Service) Service {
return metricsMiddlewareServer{
next: service,
counter: counter,
histogram: histogram,
}
}
}
- 讓 metricsMiddlewareServer 實現 Service 中的全部方法
func (l metricsMiddlewareServer) Login(ctx context.Context, in *pb.Login) (out *pb.LoginAck, err error) {
defer func(start time.Time) {
method := []string{"method","login"}
l.counter.With(method...).Add(1)//統計請求次數
l.histogram.With(method...).Observe(time.Since(start).Seconds())//統計請求耗時
}(time.Now())
out, err = l.next.Login(ctx, in)
return
}
定義 prometheus (Counter 與 Histogram)
count := metricsprometheus.NewCounterFrom(prometheus.CounterOpts{
Subsystem: "user_agent",
Name: "request_count",
Help: "Number of requests",
}, []string{"method"})
histogram := metricsprometheus.NewHistogramFrom(prometheus.HistogramOpts{
Subsystem: "user_agent",
Name: "request_consume",
Help: "Request consumes time",
}, []string{"method"})
實現 prometheus http 服務
utils.GetLogger().Info("[user_agent] prometheus run " + *prometheusAddr)
m := http.NewServeMux()
m.Handle("/metrics", promhttp.Handler())
quitChan <- http.ListenAndServe(*prometheusAddr, m)
編寫 prometheus 配置檔案
- prometheus.yml
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'user_agent'
metrics_path: "/metrics"
scrape_interval: 5s
static_configs:
- targets: ['192.168.2.28:10001']
- 啟動 prometheus 服務(docker 啟動請看《docker 安裝 prometheus(普羅米修斯)》)
執行
- 執行 TestNewUserAgentClient 方法 (呼叫 Login 介面 20 次)
- 我們登入 http://127.0.0.1:9090/ prometheus 後臺查詢資訊
結語
- prometheus 的用法還有很多,這裡只展示簡單的統計介面請求量和請求耗時,還有監控 mysql,redis 等
- 歡迎新增 QQ 一起討論
完整程式碼地址
聯絡 QQ: 3355168235
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- go-kit微服務:API監控Go微服務API
- prometheus監控golang服務實踐PrometheusGolang
- 使用Prometheus搞定微服務監控Prometheus微服務
- Prometheus監控神器-服務發現篇(二)Prometheus
- Grafana+Prometheus 監控 MySql服務GrafanaPrometheusMySql
- go-kit微服務:服務註冊與發現Go微服務
- go-kit 微服務 服務鏈路追蹤 (jaeger 實現)(2)Go微服務
- go-kit 微服務 服務鏈路追蹤 (jaeger 實現)(1)Go微服務
- go-kit微服務:服務熔斷Go微服務
- 基於 prometheus 的微服務指標監控Prometheus微服務指標
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- go-kit微服務:服務鏈路追蹤Go微服務
- go-kit 微服務實踐Go微服務
- 微服務監控微服務
- 使用Prometheus監控Golang服務-基於YoyoGo框架PrometheusGolang框架
- Java服務端監控:Prometheus與Grafana的整合Java服務端PrometheusGrafana
- 微服務監控探索微服務
- go-kit微服務:限流Go微服務
- Skywalking微服務監控分析微服務
- 搭建服務端效能監控系統 Prometheus 詳細指南服務端Prometheus
- 【flask】使用prometheus_client監控服務相關狀態FlaskPrometheusclient
- go-kit 微服務 限流 (uber/ratelimit 和 golang/rate 實現)微服務MITGolang
- go-zero docker-compose 搭建課件服務(七):prometheus+grafana服務監控GoDockerPrometheusGrafana
- 服務監控工具
- go-kit微服務:HTTP RESTGo微服務HTTPREST
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- 構建Spring Boot應用的微服務服務監控與告警Spring Boot微服務
- Ubuntu下監控服務Ubuntu
- .Net Core服務監控報警指標上報Prometheus+Grafana指標PrometheusGrafana
- go-kit微服務:日誌功能Go微服務
- go-kit微服務系列目錄Go微服務
- 微服務:指標和健康監控微服務指標
- 帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)Go微服務
- RestCloud監控平臺,專為微服務API打造的實時監控中心RESTCloud微服務API
- 基於Prometheus和Grafana打造業務監控看板PrometheusGrafana
- 愛奇藝微服務監控的探索與實踐微服務
- SpringBoot系列——admin服務監控Spring Boot
- go-kit微服務:JWT身份認證Go微服務JWT