自定义指标

概述

Metrics 类型用于采集系统性能等指标数据,可以 Prometheus 格式输出,作为 /metricscurl localhost:<port>/metrics)的数据提供方。

  • 类型:指标采集

  • 功能:采集各子系统的性能指标

  • 特点

    • 指标主要用于采集 CPU 使用率、内存使用量、网络统计等系统性能数据,适用于监控系统性能,支持实时分析和长期趋势观察。
    • 指标来源可以是常规 procfs/sysfs 采集,也可以由 tracing 类型(autotracing、event)生成。
    • 以 Prometheus 格式输出,无缝集成 Prometheus 可观测性生态。
  • 已集成

    • CPU(sys、usr、util、load、nr_running…)
    • 内存(vmstat、memory_stat、directreclaim、asyncreclaim…)
    • IO(d2c、q2c、freeze、flush…)
    • 网络(arp、socket mem、qdisc、netstat、netdev、socketstat…)

如何添加统计指标

只需实现 Collector 接口并完成注册即可将指标添加到系统。

type Collector interface {
    // Get new metrics and expose them via prometheus registry.
    Update() ([]*Data, error)
}

1. 创建结构体

core/metrics 目录下创建实现 Collector 接口的结构体:

type exampleMetric struct{}

2. 注册回调函数

func init() {
    tracing.RegisterEventTracing("example", newExample)
}

func newExample() (*tracing.EventTracingAttr, error) {
    return &tracing.EventTracingAttr{
        TracingData: &exampleMetric{},
        Flag: tracing.FlagMetric, // 标记为 Metric 类型
    }, nil
}

3. 实现 Update 方法

func (c *exampleMetric) Update() ([]*metric.Data, error) {
    // do something
    ...
    return []*metric.Data{
        metric.NewGaugeData("example", value, "description of example", nil),
    }, nil
}

项目 core/metrics 目录中已集成多种实用的 Metrics 示例,框架还提供了丰富的底层接口,包括 BPF 程序和 map 数据交互、容器信息等。更多详情请参考对应的代码实现。