golang程序对接prometheus

Golang 程序对接 Prometheus

添加 Prometheus 客户端库依赖

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

bash 复制代码
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
定义监控指标

根据需求定义指标类型(Counter、Gauge、Histogram 或 Summary)。例如定义一个请求计数器:

go 复制代码
var (
    requestsTotal = prometheus.NewCounter(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Total number of HTTP requests",
        },
    )
)
注册指标到默认注册表

在程序初始化阶段注册定义好的指标:

go 复制代码
func init() {
    prometheus.MustRegister(requestsTotal)
}
暴露指标端点

创建一个 HTTP 端点供 Prometheus 抓取数据。通常使用 /metrics 路径:

go 复制代码
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
更新指标值

在业务逻辑中更新指标数值。例如在处理 HTTP 请求时增加计数器:

go 复制代码
func handler(w http.ResponseWriter, r *http.Request) {
    requestsTotal.Inc()
    w.Write([]byte("Hello World"))
}
配置标签(可选)

为指标添加动态标签以支持多维监控。例如按状态码统计请求:

go 复制代码
requestsByStatus := prometheus.NewCounterVec(
    prometheus.CounterOpts{
        Name: "http_requests_by_status",
        Help: "Requests grouped by status code",
    },
    []string{"code"},
)
自定义注册表(高级用法)

需要隔离指标时创建独立注册表:

go 复制代码
reg := prometheus.NewRegistry()
reg.MustRegister(customMetric)
handler := promhttp.HandlerFor(reg, promhttp.HandlerOpts{})
生产环境建议
  • 设置合适的采集间隔(通常15-30秒)
  • 为指标添加前缀(如service_name_metric
  • 监控关键资源(内存、Goroutine数量等)
  • 使用 Grafana 进行可视化展示
完整示例代码
go 复制代码
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)
}
相关推荐
冯汉栩27 分钟前
Swift Control RollingCountdownView(动画倒计时)
开发语言·ios·swift
lisanmengmeng30 分钟前
搭建elk环境并接入frostmourne,实现监控报警效果(五)
开发语言·elk·日志·日志监控
oh,huoyuyan1 小时前
JS 动态网页抓不到?试试火车采集器网页抓取工具
开发语言·javascript·ecmascript
风流 少年1 小时前
hutool
java·服务器·开发语言
一木 之林2 小时前
四、STL容器与数据结构
开发语言·数据结构·c++
QX_hao2 小时前
【Go】--Cobra-cli的用法
开发语言·后端·golang
艾醒(AiXing-w)2 小时前
LangChain 1.0 入门(三):稳定性双核心——重试机制+速率限速器参数详解与实战
开发语言·langchain·php
总有刁民想爱朕ha3 小时前
Python PyQt5图片批量转MP4视频工具:本地离线免费无水印,完整代码
开发语言·python·qt
圣殿骑士-Khtangc3 小时前
Go-Kubernetes-CRD自定义资源开发从零实现Operator模式
golang
宸津-代码粉碎机3 小时前
FastUtil+AI多Agent实战:Java AI项目性能终极加速方案
java·服务器·开发语言·python·安全·php