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

How to disable go_collector metrics in prometheus/client_golang

我正在使用 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
...

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

说 "you'd have to go and do it yourself" 作为答案并没有多大帮助,但它似乎是目前唯一的选择。

由于 Prometheus 是开源的,如果您确实需要这样做;我相信您必须分叉 this one go_collector.go 行 #28 和相关部分,或者更好地修改它以使所有这些指标成为可选的并进行 PR,以便其他人也可以从中受益未来。

这在 Go 客户端中目前是不可能的,一旦 https://github.com/prometheus/client_golang/issues/46 完成,您将有办法做到这一点。

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

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

好吧,这个话题很老了,但以防其他人不得不处理它。 以下代码适用于当前代码库 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))
}

我会这样做 ->

// Register your collectors
elapsed := prometheus.NewGaugeVec(prometheus.GaugeOpts{
    Name: "gogrinder_elapsed_ms",
    Help: "Current time elapsed of gogrinder teststep",
}, []string{"teststep", "user", "iteration", "timestamp"})
prometheus.MustRegister(elapsed)
// Remove Go collector
prometheus.Unregister(prometheus.NewGoCollector())

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

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