Golang如何使用Prometheus抓取自定义指标

答案是使用Prometheus Go客户端库定义并注册自定义指标,通过HTTP中间件记录请求数据,暴露/metrics端点供Prometheus抓取。具体步骤为:1. 引入prometheus/client_golang依赖,定义计数器http_requests_total和直方图request_duration_seconds;2. 在init函数中注册指标;3. 编写中间件更新指标,利用包装的ResponseWriter捕获状态码;4. 使用promhttp.Handler()暴露/metrics路径;5. 配置prometheus.yml的scrape_configs添加目标地址,即可在UI查询指标。

golang如何使用prometheus抓取自定义指标

在Go应用中集成Prometheus来抓取自定义指标,核心是使用官方客户端库 prometheus/client_golang。你需要定义指标、注册到处理器,并暴露一个HTTP端点供Prometheus抓取。

1. 引入依赖并初始化指标

先安装Prometheus Go客户端:

go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promhttp

然后定义你关心的自定义指标,比如计数器、直方图或仪表盘:

var ( httpRequestsTotal = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: “http_requests_total”, Help: “Total number of HTTP requests.”, }, []string{“method”, “endpoint”, “status”}, )

requestDuration = prometheus.NewHistogramVec(    prometheus.HistogramOpts{        Name:    "http_request_duration_seconds",        Help:    "HTTP request latency in seconds.",        Buckets: []float64{0.1, 0.3, 0.5, 1.0, 2.0},    },    []string{"endpoint"},)

)

在程序启动时注册这些指标:

立即学习“go语言免费学习笔记(深入)”;

func init() { prometheus.MustRegister(httpRequestsTotal) prometheus.MustRegister(requestDuration)}

2. 在代码中更新指标

在处理请求的地方记录数据。例如,在HTTP中间件中:

func metricsMiddleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { start := time.Now()

    // 包装 ResponseWriter 来捕获状态码    rw := &responseWriter{ResponseWriter: w, statusCode: 200}    next.ServeHTTP(rw, r)    duration := time.Since(start).Seconds()    endpoint := r.URL.Path    httpRequestsTotal.WithLabelValues(r.Method, endpoint, fmt.Sprintf("%d", rw.statusCode)).Inc()    requestDuration.WithLabelValues(endpoint).Observe(duration)}

}

确保实现自定义的 responseWriter 来获取状态码:

type responseWriter struct { http.ResponseWriter statusCode int}

func (rw *responseWriter) WriteHeader(code int) {rw.statusCode = coderw.ResponseWriter.WriteHeader(code)}

3. 暴露/metrics端点

使用 promhttp 处理器暴露指标:

func main() { http.Handle(“/metrics”, promhttp.Handler())

// 示例接口http.HandleFunc("/api/users", metricsMiddleware(func(w http.ResponseWriter, r *http.Request) {    fmt.Fprintln(w, "user list")}))log.Println("Server starting on :8080")log.Fatal(http.ListenAndServe(":8080", nil))

}

Prometheus就可以通过 http://your-service:8080/metrics 抓取数据了。

4. 配置Prometheus抓取

prometheus.yml 中添加你的目标:

scrape_configs: – job_name: ‘go-service’ static_configs: – targets: [‘localhost:8080’]

重启Prometheus后,就能在Prometheus UI中查询如 http_requests_totalhttp_request_duration_seconds 等指标。

基本上就这些。只要定义好指标、正确记录、暴露端点,Prometheus就能自动抓取你的Go服务中的自定义监控数据。

以上就是Golang如何使用Prometheus抓取自定义指标的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1414392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang开发环境依赖安装与配置示例
上一篇 2025年12月16日 08:43:11
解决Go install总是安装到GOROOT/bin目录的问题
下一篇 2025年12月16日 08:43:30

相关推荐

发表回复

登录后才能评论
关注微信