golang程序对接prometheus过程

 更新时间:2025年10月30日 11:03:56   作者:云原生运维  
文章介绍了如何在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 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)
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • zap接收gin框架默认的日志并配置日志归档示例

    zap接收gin框架默认的日志并配置日志归档示例

    本文介绍了在基于gin框架开发的项目中如何配置并使用zap来接收并记录gin框架默认的日志和如何配置日志归档。有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-04-04
  • golang 删除切片的某个元素及剔除切片内的零值方式

    golang 删除切片的某个元素及剔除切片内的零值方式

    这篇文章主要介绍了golang 删除切片的某个元素及剔除切片内的零值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang读写分离sync.Map的使用

    golang读写分离sync.Map的使用

    sync.Map是Go语言的并发安全映射,通过读写分离优化读性能,本文主要介绍了golang读写分离sync.Map的使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • golang中snappy的使用场合实例详解

    golang中snappy的使用场合实例详解

    在java 和go语言 大字符传达的时候, 采用snappy 压缩 解压缩是最好的方案。下面这篇文章主要给大家介绍了关于golang中snappy使用场合的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • Golang实现四层负载均衡的示例代码

    Golang实现四层负载均衡的示例代码

    做开发的同学应该经常听到过负载均衡的概念,今天我们就来实现一个乞丐版的四层负载均衡,并用它对mysql进行负载均衡测试,感兴趣的可以了解一下
    2023-07-07
  • golang打包成带图标的exe可执行文件

    golang打包成带图标的exe可执行文件

    这篇文章主要给大家介绍了关于golang打包成带图标的exe可执行文件的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-06-06
  • go中的protobuf和grpc使用教程

    go中的protobuf和grpc使用教程

    gRPC 是 Google 公司基于 Protobuf 开发的跨语言的开源 RPC 框架,这篇文章主要介绍了go中的protobuf和grpc使用教程,需要的朋友可以参考下
    2024-08-08
  • Go语言实现可靠的UDP 协议的示例详解

    Go语言实现可靠的UDP 协议的示例详解

    UDP(用户数据报协议)是一种无连接、轻量级的传输层协议,这篇文章主要为大家详细介绍了如何使用Go语言实现可靠的UDP 协议,需要的小伙伴可以了解下
    2025-07-07
  • 在Golang中实现定时任务的几种高效方法

    在Golang中实现定时任务的几种高效方法

    本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和goroutine的自定义实现,我们将通过实际代码示例和性能分析,帮助开发者选择最适合自己场景的定时任务解决方案,需要的朋友可以参考下
    2025-06-06
  • 简单谈谈Golang中的字符串与字节数组

    简单谈谈Golang中的字符串与字节数组

    这篇文章主要给大家介绍了关于Golang中字符串与字节数组的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Golang具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论