指标收集 - 动态属性
Code Source: https://github.com/gogf/examples/tree/main/observability/metric/dynamic_attributes
简介
本示例演示了如何在 GoFrame
中使用 OpenTelemetry
和 Prometheus
集成来实现动态指标属性。主要展示:
- 在运行时为指标添加动态属性
- 组合使用常量属性和动态属性
- 在常规指标和可观察指标中使用属性
- 导出带有动态属性的指标
目录结构
.
├── go.mod # Go模块文件
├── go.sum # Go模块校验和
└── main.go # 主程序,演示动态属性使用
功能特性
本示例展示了以下功能:
-
动态属性
- 运行时属性赋值
- 属性组合使用
- 基于值的属性
- 灵活的标签管理
-
带属性的指标类型
- 带动态属性的计数器
- 带动态属性的可观察计数器
- 常量属性基线
- 属性继承机制
-
属性管理
- 属性创建
- 值类型处理
- 属性作用域
- 属性生命周期
环境要求
Go
1.22 或更高版本GoFrame
框架GoFrame OpenTelemetry Metric
扩展
使用说明
-
运行示例:
go run main.go
-
访问指标:
# 使用curl
curl http://localhost:8000/metrics
# 或在浏览器中打开
http://localhost:8000/metrics -
指标输出示例:
# HELP goframe_metric_demo_counter 这是Counter使用的简单演示
goframe_metric_demo_counter{const_attr_1="1",dynamic_attr_2="2"} 11
# HELP goframe_metric_demo_observable_counter 这是ObservableCounter使用的简单演示
goframe_metric_demo_observable_counter{const_attr_4="4",dynamic_attr_1="1"} 10
实现说明
-
常规指标的动态属性
counter := meter.MustCounter(
"goframe.metric.demo.counter",
gmetric.MetricOption{
Help: "计数器示例",
Unit: "bytes",
Attributes: gmetric.Attributes{
gmetric.NewAttribute("const_attr_1", 1), // 常量属性
},
},
)
// 添加动态属性
counter.Add(ctx, 10, gmetric.Option{
Attributes: gmetric.Attributes{
gmetric.NewAttribute("dynamic_attr_2", 2), // 动态属性
},
}) -
可观察指标的动态属性
observableCounter := meter.MustObservableCounter(
"goframe.metric.demo.observable_counter",
gmetric.MetricOption{
Help: "可观察计数器示例",
Unit: "%",
Attributes: gmetric.Attributes{
gmetric.NewAttribute("const_attr_4", 4), // 常量属性
},
},
)
// 在回调中添加动态属性
meter.MustRegisterCallback(func(ctx context.Context, obs gmetric.Observer) error {
obs.Observe(observableCounter, 10, gmetric.Option{
Attributes: gmetric.Attributes{
gmetric.NewAttribute("dynamic_attr_1", 1), // 动态属性
},
})
return nil
}, observableCounter)