开发者

golang程序对接prometheus过程

开发者 https://www.devze.com 2025-10-31 10:49 出处:网络 作者: 云原生运维
目录Golan编程g 程序对接 Prometheus添加 Prometheus 客户端库依赖定义监控指标注册指标到默认注册表暴露指标端点更新指标值配置标签(可选)自定义注册表(高级用法)生产环境建议完整示例代码总结golang 程序对接
目录
  • Golan编程g 程序对接 Prometheus
    • 添加 Prometheus 客户端库依赖
    • 定义监控指标
    • 注册指标到默认注册表
    • 暴露指标端点
    • 更新指标值
    • 配置标签(可选)
    • 自定义注册表(高级用法)
    • 生产环境建议
    • 完整示例代码
  • 总结

    golang 程序对接 Prometheus

    添加 Prometheus 客户端库依赖

    在 Go 项目中引入 Prometheus 官方客户端库,使用python以下命令安装:

    go get github.com/prometheus/client_golang/prometheus
    go get github.cwww.devze.comom/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", niljavascript)
    

    更新指标值

    在业务逻辑中更新指标数值。例如在处理 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"
    javascript    "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)
    }
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号