Go 从收集器中清除普罗米修斯度量值

Go 从收集器中清除普罗米修斯度量值,go,prometheus,Go,Prometheus,我正试图修改prometheus mesos exporter以暴露框架状态: 关于mesos exporter的一点信息-它从mesos/metrics/snapshot端点和/state端点收集数据。 后者的问题是,无论是我的PR中的更改还是从机上报告的现有度量,所创建的度量都将永远持续(直到重新启动导出程序)。 因此,例如,如果一个框架已经完成,那么为该框架报告的度量将是过时的(例如,它仍将显示该框架正在使用CPU) 因此,我试图找出如何清除这些陈旧的指标。如果每次收集之前我都能清除整个

我正试图修改prometheus mesos exporter以暴露框架状态:

关于mesos exporter的一点信息-它从mesos
/metrics/snapshot
端点和
/state
端点收集数据。 后者的问题是,无论是我的PR中的更改还是从机上报告的现有度量,所创建的度量都将永远持续(直到重新启动导出程序)。 因此,例如,如果一个框架已经完成,那么为该框架报告的度量将是过时的(例如,它仍将显示该框架正在使用CPU)

因此,我试图找出如何清除这些陈旧的指标。如果每次收集之前我都能清除整个
mesosStateCollector
,那就太棒了。
对于不同的p8s向量(例如),有一种
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)
            }
        },
prometheus.newgaugeevec(prometheus.gaugeepts){
帮助:“总从属CPU(分数)”,
名称空间:“mesos”,
子系统:“从”,
名称:“CPU”,
},标签):func(圣*州,c普罗米修斯采集器){
c、 (*prometheus.GaugeVec).Reset()##