go - 如何向 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?)。
解决方案
正如@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)
推荐阅读
- curl - 使用 Indy10 进行卷曲执行
- c# - 仅在文件上传时出现 Asp.Net Core API CORS 策略错误
- java - 我试图使用firebase对用户进行身份验证,但我的应用程序在成功检索凭据后加载 Intent 方法时崩溃
- web - 阿杜诺。将文本文件从 SD 卡发送到 Web 服务器
- reactjs - 反应路由器不适用于 webpack dora?
- dialogflow-es - 更改 Dialogflow Messenger 图标的位置
- mapbox-gl-js - 地理位置在移动浏览器中不起作用
- java - BroadcastReceiver onRecive 无法正常工作
- tensorflow - 我用什么将数据集导入到 tensorflow
- python - Selenium - 下载文件 - click() 仅有时有效