首页 > 解决方案 > 如何向 Prometheus Gauge 添加更多信息?

问题描述

我想使用 Prometheus 监视在不同命名空间中的 pod 中运行的不同子进程的统计信息,并且我正在寻找一种方法来正确公开这些信息。

我的集群类似于以下:

cluster
├── ns1
│   ├── ns1-pod1
│   │   ├── proc-p1-1
│   │   └── proc-p1-2
│   └── ns1-pod2
│       ├── proc-p2-1
│       └── proc-p2-2
└── ns2
    ├── ns2-pod1
    │   ├── proc-p1-1
    │   └── proc-p1-2
    └── ns2-pod2
        ├── proc-p2-1
        └── proc-p2-2

每个 pod 都使用特定的路由键将其进程的统计信息发布到 RabbitMQ,我可以从那里读取统计信息。

我编写了一个导出器,它可以连接到一个命名空间中的 RMQ,读取统计信息并将它们公开,/metrics以便 Prometheus 可以读取它。我的出口商的一个例子:

// prometheus go client
var MemoryValue = prometheus.NewGauge(
    prometheus.GaugeOpts{
        Namespace: namespace,
        Name:      "MemoryValue",
        Help:      "MemoryValue",
    })

prometheus.MustRegister(MemoryValue)
MemoryValue.Set(opst.Memory.Value) // "opst.Memory.Value" is what I get from RMQ

问题是我不知道如何标记 pod 中每个进程的指标。我的意思是,例如,目前我在 ns1 中有 4 个进程,但我将它们全部暴露在MemoryValue. 我需要一种类似于Namespace通过 pod 和进程名称标记每个进程的方法(我有这些信息,但如何将它们添加到 Prometheus?)。

标签: goprometheus

解决方案


正如@Peter 正确提到的,解决方案是使用GaugeVec

var CpuPercentValue = prometheus.NewGaugeVec(
    prometheus.GaugeOpts{
        Namespace: "MyExporter",
        Name:      "CpuPercentValue",
        Help:      "CpuPercentValue",
    },
    []string{
        "namespace",
        "proc_qID",
        "opID",
    },
)

CpuPercentValue.With(prometheus.Labels{"namespace": namespace, "proc_qID": procid, "opID": opid}).Set(opst.CpuPercent.Value)


推荐阅读