文章目录
- 在 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 main import ( “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) }
目录
- 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 进行可视化展示
service_name_metric)
package main
import (
"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)
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- golang获取prometheus数据(prometheus/client_golang包)
- 使用golang生成prometheus格式数据
- Golang语言中的Prometheus的日志模块使用案例代码编写
- Golang自定义开发Prometheus exporter详解
- Golang程序中使用Prometheus的client_golang库
- 一文带你玩转Golang Prometheus Eexporter开发
- 详解prometheus监控golang服务实践记录