指标收集 - Prometheus直接集成
Code Source: https://github.com/gogf/examples/tree/main/observability/metric/prometheus
简介
本示例演示了如何在 GoFrame
中直接集成 Prometheus
指标,而不使用 OpenTelemetry
。主要展示:
- 直接创建Prometheus指标
- 向Prometheus注册表注册指标
- 通过HTTP端点暴露指标
- 动态更新指标值
目录结构
.
├── go.mod # Go模块文件
├── go.sum # Go模块校验和
└── prometheus.go # 主程序,演示Prometheus直接集成
功能特性
本示例展示了以下功能:
-
指标类型
- 计数器(Counter):单调递增的值
- 仪表盘(Gauge):可上下变化的值
-
指标操作
- 指标注册
- 值更新
- HTTP暴露
- 随机值生成
-
HTTP端点
/
: 触发指标更新/metrics
: 暴露Prometheus指标
环境要求
Go
1.22 或更高版本GoFrame
框架Prometheus
客户端库
使用说明
-
运行示例:
go run prometheus.go
-
测试应用:
# 生成一些指标值
curl http://localhost:8000/
# 查看指标
curl http://localhost:8000/metrics -
指标输出示例:
# HELP demo_counter 这是一个演示计数器
# TYPE demo_counter counter
demo_counter 1
# HELP demo_gauge 这是一个演示仪表盘
# TYPE demo_gauge gauge
demo_gauge 42
实现说明
-
定义指标变量
// 创建计数器类型指标
metricCounter = promauto.NewCounter(
prometheus.CounterOpts{
Name: "demo_counter", // Prometheus格式的指标名称
Help: "这是一个演示计数器", // 指标描述
},
)
// 创建仪表盘类型指标
metricGauge = promauto.NewGauge(
prometheus.GaugeOpts{
Name: "demo_gauge", // Prometheus格式的指标名称
Help: "这是一个演示仪表盘", // 指标描述
},
) -
注册指标
// 创建Prometheus注册表
registry := prometheus.NewRegistry()
// 注册指标
registry.MustRegister(
metricCounter, // 注册计数器指标
metricGauge, // 注册仪表盘指标
) -
配置HTTP服务器
s := g.Server()
// 更新指标的处理器
s.BindHandler("/", func(r *ghttp.Request) {
metricCounter.Add(1) // 增加计数器
metricGauge.Set(float64(grand.N(1, 100))) // 设置随机仪表盘值
r.Response.Write("fake ok")
})
// 暴露指标的处理器
s.BindHandler("/metrics", ghttp.WrapH(promhttp.Handler()))