golang程序对接prometheus过程

作者:

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

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

      您可能感兴趣的文章:

      • golang获取prometheus数据(prometheus/client_golang包)
      • 使用golang生成prometheus格式数据
      • Golang语言中的Prometheus的日志模块使用案例代码编写
      • Golang自定义开发Prometheus exporter详解
      • Golang程序中使用Prometheus的client_golang库
      • 一文带你玩转Golang Prometheus Eexporter开发
      • 详解prometheus监控golang服务实践记录

      站内搜索