从收集器中清除普罗米修斯指标

clear prometheus metrics from collector

我正在尝试修改 prometheus mesos exporter 以公开框架状态: https://github.com/mesos/mesos_exporter/pull/97/files

关于 mesos 导出器的一些信息 - 它从 mesos /metrics/snapshot 端点和 /state 端点收集数据。 后者的问题,无论是我的 PR 的变化还是关于奴隶的现有指标的报告,都是创建的指标永远持续(直到重新启动导出器)。 因此,例如,如果一个框架已完成,则为该框架报告的指标将是陈旧的(例如,它仍将显示该框架正在使用 CPU)。

所以我想弄清楚如何清除那些过时的指标。如果我每次都能在收集完成之前清除整个 mesosStateCollector,那就太棒了。 对于不同的 p8s 向量(例如 GaugeVec)有一个 delete 方法,但是为了删除一个度量,我不仅需要标签名称,还需要相关度量的标签值。

好的,这似乎比我想象的要容易(如果我在完成此任务之前熟悉 go-lang 就好了)。 只需要将收集器转换为 GaugeVec 并重置它:

        prometheus.NewGaugeVec(prometheus.GaugeOpts{
            Help:      "Total slave CPUs (fractional)",
            Namespace: "mesos",
            Subsystem: "slave",
            Name:      "cpus",
        }, labels): func(st *state, c prometheus.Collector) {
            c.(*prometheus.GaugeVec).Reset() ## <-- added  this for each GaugeVec
            for _, s := range st.Slaves {
                c.(*prometheus.GaugeVec).WithLabelValues(s.PID).Set(s.Total.CPUs)
            }
        },