从收集器中清除普罗米修斯指标
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)
}
},
我正在尝试修改 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)
}
},