Клиент экспортера Prometheus продолжает отправлять последнее значение после остановки источника - PullRequest
0 голосов
/ 06 марта 2020

Я написал экспортер для экспорта некоторых данных, таких как использование процессора и памяти различными процессами, в моем приложении с помощью клиента 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)
    }
}()

Как я могу это исправить?

1 Ответ

0 голосов
/ 11 марта 2020

Проблема была в том, что я не удалял ярлыки, которые не публиковались. Я ожидал, что клиент Prometheus просто экспортирует, когда он получает новое значение, но это предположение / ожидание было неверным.

...