golang程序对接prometheus
Golang 程序对接 Prometheus
添加 Prometheus 客户端库依赖
在 Go 项目中引入 Prometheus 官方客户端库,使用以下命令安装:
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
定义监控指标
根据需求定义指标类型(Counter、Gauge、Histogram 或 Summary)。例如定义一个请求计数器:
var (requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{Name: "http_requests_total",Help: "Total number of HTTP requests",},)
)
注册指标到默认注册表
在程序初始化阶段注册定义好的指标:
func init() {prometheus.MustRegister(requestsTotal)
}
暴露指标端点
创建一个 HTTP 端点供 Prometheus 抓取数据。通常使用 /metrics 路径:
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
更新指标值
在业务逻辑中更新指标数值。例如在处理 HTTP 请求时增加计数器:
func handler(w http.ResponseWriter, r *http.Request) {requestsTotal.Inc()w.Write([]byte("Hello World"))
}
配置标签(可选)
为指标添加动态标签以支持多维监控。例如按状态码统计请求:
requestsByStatus := prometheus.NewCounterVec(prometheus.CounterOpts{Name: "http_requests_by_status",Help: "Requests grouped by status code",},[]string{"code"},
)
自定义注册表(高级用法)
需要隔离指标时创建独立注册表:
reg := prometheus.NewRegistry()
reg.MustRegister(customMetric)
handler := promhttp.HandlerFor(reg, promhttp.HandlerOpts{})
生产环境建议
- 设置合适的采集间隔(通常15-30秒)
- 为指标添加前缀(如service_name_metric)
- 监控关键资源(内存、Goroutine数量等)
- 使用 Grafana 进行可视化展示
完整示例代码
package mainimport ("net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)var (requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{Name: "myapp_requests_total",Help: "Total requests served",})
)func init() {prometheus.MustRegister(requestsTotal)
}func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {requestsTotal.Inc()w.Write([]byte("OK"))})http.Handle("/metrics", promhttp.Handler())http.ListenAndServe(":8080", nil)
}
