Я написал экспортер для экспорта некоторых данных, таких как использование процессора и памяти различными процессами, в моем приложении с помощью клиента Prometheus. Тогда все работает, и я заметил, что когда я убиваю процесс, клиент продолжает отправлять последнее полученное им значение, пока работает экспортер.
Я использовал gaugeve c и метод Set
. Я подозреваю, что из-за Set
клиент был установлен на это значение, и так как он не получает никакого нового значения, он просто продолжает отправлять последнее. Ниже мой код:
var CpuPercentValue = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "MyExporter",
Name: "CpuPercentValue",
Help: "CpuPercentValue",
},
[]string{
"namespace",
"proc_qID",
"opID",
},
)
var MemoryValue = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "MyExporter",
Name: "MemoryValue",
Help: "MemoryValue",
},
[]string{
"namespace",
"proc_qID",
"opID",
},
)
var RunThreadsValue = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "MyExporter",
Name: "RunThreadsValue",
Help: "RunThreadsValue",
},
[]string{
"namespace",
"proc_qID",
"opID",
},
)
prometheus.MustRegister(CpuPercentValue)
prometheus.MustRegister(MemoryValue)
prometheus.MustRegister(RunThreadsValue)
go func() {
for d := range msgs {
// I get the labels from the RabbitMQ routingkey
routingkey = strings.Split(d.RoutingKey, ".")
procid = routingkey[0]
opid = routingkey[1]
// get the data
err := json.Unmarshal([]byte(d.Body), opst)
failOnError(err, "failed to Unmarshal the opstat")
// set the values
// namespace here is the different namespaces in a Kubernetes cluster
CpuPercentValue.With(prometheus.Labels{"namespace": namespace, "proc_qID": procid, "opID": opid}).Set(opst.CpuPercent.Value)
MemoryValue.With(prometheus.Labels{"namespace": namespace, "proc_qID": procid, "opID": opid}).Set(opst.Memory.Value)
RunThreadsValue.With(prometheus.Labels{"namespace": namespace, "proc_qID": procid, "opID": opid}).Set(opst.NumThreads.Value)
}
}()
Как я могу это исправить?