prometheus client_go为应用程序自定义监控指标

Fawziya ·
更新时间:2024-05-16
· 1780 次阅读

目录

使用prometheus client_go为应用程序添加监控指标

原因

去掉Proc和Go指标

使用prometheus client_go为应用程序添加监控指标

使用prometheus client_go为应用程序添加监控指标时,通常为http注册一个client_go默认的handler,这样就可以通过/metrics接口,拉取应用程序的metrics指标了:

http.Handle("/metrics", promhttp.Handler())

但是,该默认的handler会自动引入go的指标和proc的指标:

go的指标:

go_gc_duration_seconds go_goroutines go_info ....

proc的指标

process_start_time_seconds process_cpu_seconds_total ....

默认handler为啥会引入go指标和proc指标,如果不需要要,可以去掉它们吗?

原因

从源码中找原因,http handler:

http.Handle("/metrics", promhttp.Handler())

client_go中该handler的实现:

// prometheus/client_golang/prometheus/promhttp/http.go func Handler() http.Handler { return InstrumentMetricHandler( prometheus.DefaultRegisterer, HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}), ) }

其中DefaultRegister、DefaultGather指向同一个Registry对象,即defaultRegistry

// prometheus/client_golang/prometheus/registry.go var ( defaultRegistry = NewRegistry() DefaultRegisterer Registerer = defaultRegistry DefaultGatherer Gatherer = defaultRegistry ) func init() { MustRegister(NewProcessCollector(ProcessCollectorOpts{})) // 采集Proc指标 MustRegister(NewGoCollector()) // 采集Go指标 } func MustRegister(cs ...Collector) { DefaultRegisterer.MustRegister(cs...) }

该Registry对象在init()中,被注入了:

NewProcessCollector:采集进程的指标信息;

NewGoCollector: 采集go runtime的指标信息;

去掉Proc和Go指标

在实现自己的exporter或为应用程序添加指标时,若不需要Proc/Go指标,可以:

不使用 defaultRegister,自己 NewRegister,自定义使用哪些collector,即可去掉 Proc/Go 指标;

import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { // 创建一个自定义的注册表 registry := prometheus.NewRegistry() // 可选: 添加 process 和 Go 运行时指标到我们自定义的注册表中 registry.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{})) registry.MustRegister(prometheus.NewGoCollector()) // 创建一个简单的 gauge 指标。 temp := prometheus.NewGauge(prometheus.GaugeOpts{ Name: "home_temperature_celsius", Help: "The current temperature in degrees Celsius.", }) // 使用我们自定义的注册表注册 gauge registry.MustRegister(temp) // 设置 gague 的值为 39 temp.Set(39) // 暴露自定义指标 http.Handle("/metrics", promhttp.HandlerFor(registry, promhttp.HandlerOpts{Registry: registry})) http.ListenAndServe(":8080", nil) }

其中:

prometheus.NewRegistry()创建自己的注册表(不使用defaultRegistry);

registry.MustRegister():

若添加了ProcessCollector,会自动添加process_*监控指标;

若添加了GoCollector,会自动添加go_*监控指标;

promhttp.HandlerFor创建针对registry的http handler;

promhttp.HandlerOpts{Registry: registry}: 将添加promhttp_*相关的指标;

参考: https://github.com/prometheus...

以上就是prometheus client_go为应用程序自定义监控指标的详细内容,更多关于prometheus client_go监控指标的资料请关注软件开发网其它相关文章!



client 自定义 prometheus 监控 GO 程序 应用程序

需要 登录 后方可回复, 如果你还没有账号请 注册新账号