我想用 Prometheus 监视在不同命名空间的 Pod 中运行的不同子进程的统计信息,我正在寻找一种方法来正确地公开这些信息。
我的集群类似于下面:
cer
├── 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?)。
正如 @ 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)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(55条)