如何在prometheus / client_golang中禁用go_collector指标

时间:2016-01-31 18:59:42

标签: go monitoring prometheus

我正在使用NewGaugeVec来报告我的指标:

elapsed := prometheus.NewGaugeVec(prometheus.GaugeOpts{
    Name: "gogrinder_elapsed_ms",
    Help: "Current time elapsed of gogrinder teststep",
}, []string{"teststep", "user", "iteration", "timestamp"})
prometheus.MustRegister(elapsed)

一切正常,但我注意到我的自定义导出器包含来自prometheus / go_collector.go的所有指标:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.00041795300000000004
go_gc_duration_seconds{quantile="0.25"} 0.00041795300000000004
go_gc_duration_seconds{quantile="0.5"} 0.00041795300000000004
...

我怀疑这是一种默认行为,但我没有在文档中找到有关如何禁用它的任何内容。有关如何配置我的自定义导出器以使这些默认指标消失的任何想法?

5 个答案:

答案 0 :(得分:3)

这个话题很老,但万一其他人不得不处理它。 以下代码适用于当前代码库v0.9.0-pre1

// [...] imports, metric initialization ...

func main() {
  // go get rid of any additional metrics 
  // we have to expose our metrics with a custom registry
  r := prometheus.NewRegistry()
  r.MustRegister(myMetrics)
  handler := promhttp.HandlerFor(r, promhttp.HandlerOpts{})

  // [...] update metrics within a goroutine

  http.Handle("/metrics", handler)
  log.Fatal(http.ListenAndServe(":12345", nil))
}

答案 1 :(得分:2)

Go客户端目前无法实现这一点,https://github.com/prometheus/client_golang/issues/46完成后您将有办法实现此目的。

一般情况下,您希望自定义导出器导出这些导出器,我唯一知道目前没有意义的是snmp和blackbox导出器。

顺便说一句,timestamp作为标签似乎很奇怪,如果您希望您应该使用日志而不是指标。见https://blog.raintank.io/logs-and-metrics-and-graphs-oh-my/ Prometheus方式是将时间戳作为值,而不是标签。

答案 2 :(得分:0)

作为一个答案,并没有真正有用的说法"你必须自己去做"但它似乎是现在唯一的选择。

因为普罗米修斯是开源的,如果你真的需要那样做;我相信您必须分叉this one go_collector.go第28行和相关部分,或者更好地修改它以使所有这些指标都是可选的并制作PR以便其他人也可以从中受益未来。

答案 3 :(得分:0)

我只会这样->

msg

答案 4 :(得分:0)

您现在可以使用 --web.disable-exporter-metrics

https://github.com/prometheus/node_exporter/pull/1148