[英]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
...
我怀疑这是一种默认行为,但我在文档中没有找到有关如何禁用它的任何内容。 关于如何配置我的自定义导出器以使这些默认指标消失的任何想法?
好吧,这个话题已经很老了,但以防万一其他人不得不处理它。 以下代码适用于当前代码库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))
}
这在 Go 客户端中目前是不可能的,一旦https://github.com/prometheus/client_golang/issues/46完成,您将有办法做到这一点。
一般来说,您希望您的自定义导出器导出这些,我知道目前没有意义的唯一导出器是 snmp 和 blackbox 导出器。
顺便说一句, timestamp
作为标签似乎很奇怪,如果您想要,您可能应该使用日志记录而不是指标。 请参阅https://blog.raintank.io/logs-and-metrics-and-graphs-oh-my/普罗米修斯的方式是将时间戳作为一个值,而不是一个标签。
作为回答说“你必须自己去做”并没有真正的帮助,但这似乎是目前唯一的选择。
由于 Prometheus 是开源的,如果您真的需要这样做; 我相信你必须分叉这个go_collector.go line #28 和相关部分,或者更好地修改它以使所有这些指标可选并制作 PR,以便其他人将来也可以从中受益。
我会简单地这样做 - >
// 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
。
这个解决方案对我有用。 想法是创建一个自定义注册表并注册我们的指标。 确保我们在打开指标的处理程序选项中传递False
将禁用这些默认指标
var httpDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "golang_api_http_duration_seconds",
Help: "Duration of HTTP requests.",
}, []string{"path", "host"})
promReg := prometheus.NewRegistry()
promReg.MustRegister(httpDuration)
handler := promhttp.HandlerFor(
promReg,
promhttp.HandlerOpts{
EnableOpenMetrics: false,
}))
http.Handle("/metrics", handler)
log.Fatal(http.ListenAndServe(":12345", nil))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.