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

 更新时间:2023年02月15日 15:01:04   作者:a朋  
这篇文章主要为大家介绍了prometheus client_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监控指标的资料请关注脚本之家其它相关文章!

相关文章

  • 浅析Go语言编程当中映射和方法的基本使用

    浅析Go语言编程当中映射和方法的基本使用

    这篇文章主要介绍了浅析Go语言编程当中映射和方法的基本使用,是golang入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Go中Gzip与json搭配实现数据压缩demo

    Go中Gzip与json搭配实现数据压缩demo

    这篇文章主要为大家介绍了Go中Gzip与json搭配使用压缩数据的实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • go原子级内存操作实现

    go原子级内存操作实现

    原子级内存操作是在多线程并发执行时,能够确保某个内存操作是不可中断的操作,本文主要介绍了go原子级内存操作实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Golang中的错误处理的示例详解

    Golang中的错误处理的示例详解

    这篇文章主要为大家详细介绍了Golang中的错误处理的相关资料,文章中的示例代码讲解详细,对我们学习Golang有一定帮助,需要的可以参考一下
    2022-11-11
  • 一文了解Go语言中的函数与方法的用法

    一文了解Go语言中的函数与方法的用法

    与大部分语言一致,Go语言中的函数与方法定义与其他语言基本一致,但也有一定的差别。本文将通过示例详细讲讲Go语言中函数与方法的用法,感兴趣的可以学习一下
    2022-07-07
  • GoPath模式和GoMoudle模式的相爱相杀

    GoPath模式和GoMoudle模式的相爱相杀

    这篇文章主要介绍了GoPath模式和GoMoudle模式的相爱相杀,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Go语言实战之实现一个简单分布式系统

    Go语言实战之实现一个简单分布式系统

    如今很多云原生系统、分布式系统,例如 Kubernetes,都是用 Go 语言写的,这是因为 Go 语言天然支持异步编程。本篇文章将介绍如何用 Go 语言编写一个简单的分布式系统,需要的小伙伴开业跟随小编一起学习一下
    2022-10-10
  • golang metrics各个指标含义讲解说明

    golang metrics各个指标含义讲解说明

    这篇文章主要为大家介绍了golang metrics各个指标含义讲解说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • golang 实现 pdf 转高清晰度 jpeg的处理方法

    golang 实现 pdf 转高清晰度 jpeg的处理方法

    这篇文章主要介绍了golang 实现 pdf 转高清晰度 jpeg,下面主要介绍Golang 代码使用方法及Golang PDF转JPEG的详细代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • golang利用redis和gin实现保存登录状态校验登录功能

    golang利用redis和gin实现保存登录状态校验登录功能

    这篇文章主要介绍了golang利用redis和gin实现保存登录状态校验登录功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论