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

目录
  • 使用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监控指标的资料请关注我们其它相关文章!

(0)

相关推荐

  • golang通过node_exporter监控GPU及cpu频率、温度的代码

    导语:通过node_exporter监控GPU以及cpu频率.温度,不想用一个node_exporter再加一个dcgm,分开监控.我这里监控的是热区的温度.如果需要监控各个cpu核心的温度需要修改一下代码. 结合了https://gitee.com/kevinliu_CQ/node_exporter监控GPU的代码. 加入了cpu的2项自定义监控https://gitee.com/jiaminxu/self_node_exporter 安装一下go wget https://dl.google

  • GoLang日志监控系统实现

    目录 日志监控系统 项目简答介绍 系统架构 读取模块具体实现 日志解析模块 日志监控系统 Nginx(日志文件) -> log_process (实时读取解析写入) -> influxdb(存储) ->grafana(前端日志展示器) influxdb 属于GO语言编写的开源的时序型数据,着力于高性能 查询与存储时序型数据,influxdb 广泛的应用于存储系统的监控数据,IOT行业的实时数据. 目前市面上流行 TSDB(时序型处理数据库):influxDB, TimescaleDB,

  • Go prometheus metrics条目自动回收与清理方法

    目录 事件背景 现象获取 架构图 问题定位 原理分析 处理方法 最终效果 事件背景 现网上运行着一个自己开发的 metrics exporter,它是专门来捕获后端资源的运行状态,并生成对应的 prometheus metrics 供监控报警系统使用.当然这个 exporter 只是负责远程监控资源,并不能实际控制后端的资源,也不能实时动态获得被监控的资源的变动事件.当我们的运维小伙伴手动错误删除后端被监控的资源,导致业务流量异常.此时也没有报警出来,而这个报警却是依赖这个 metrics ex

  • Go语言metrics应用监控指标基本使用说明

    目录 metrics是什么? 五种Metrics类型 metrics 是什么? 当我们需要为某个系统某个服务做监控.做统计,就需要用到Metrics 五种 Metrics 类型 Gauges :最简单的度量指标,只有一个简单的返回值,或者叫瞬时状态 Counters:Counter 就是计数器,Counter 只是用 Gauge 封装了 AtomicLong Meters:Meter度量一系列事件发生的速率(rate),例如TPS.Meters会统计最近1分钟,5分钟,15分钟,还有全部时间的速

  • golang实现对docker容器心跳监控功能

    自己写的go程序放到线上本来编译成二进制扔上去就行啦,但是怀着一颗docker的心,最终还是将它放到docker容器中运行起来了,运行起来也ok,一个最小容器64M,统一管理起来也方便,但是毕竟是个线上长驻内存的服务程序,万一跑挂了怎么办,如何才能监控它,直接上go代码,网上代码,略微做了下注释,但实测过,真实有效: package main import ( "encoding/json" "errors" "flag" "fmt&q

  • 详解prometheus监控golang服务实践记录

    一.prometheus基本原理介绍 prometheus是基于metric采样的监控,可以自定义监控指标,如:服务每秒请求数.请求失败数.请求执行时间等,每经过一个时间间隔,数据都会从运行的服务中流出,存储到一个时间序列数据库中,之后可通过PromQL语法查询. 主要特点: 多维数据模型,时间序列数据通过metric名以key.value的形式标识: 使用PromQL语法灵活地查询数据: 不需要依赖分布式存储,各服务器节点是独立自治的: 时间序列的收集,通过 HTTP 调用,基于pull 模型

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

    目录 使用prometheus client_go为应用程序添加监控指标 原因 去掉Proc和Go指标 使用prometheus client_go为应用程序添加监控指标 使用prometheus client_go为应用程序添加监控指标时,通常为http注册一个client_go默认的handler,这样就可以通过/metrics接口,拉取应用程序的metrics指标了: http.Handle("/metrics", promhttp.Handler()) 但是,该默认的handl

  • spring boot metrics监控指标使用教程

    目录 springbootmetrics是什么? 一.引入依赖 二.配置启用 三.独立的web服务 四.全局标签设置 五.自定义指标收集 六.推送or拉取指标 引入依赖 启用push模式 spring boot metrics是什么? 针对应用监控指标暴露,spring boot有一套完整的解决方案,并且内置了好很多的指标收集器,如tomcat.jvm.cpu.kafka.DataSource.spring mvc(缺少直方图的数据)等.基于micrometer技术,几乎支持所有主流的监控服务的

  • .NET程序性能监控系统Elastic AMP的使用方法

    目录 什么是Elastic AMP 工作原理 代码演示 1.新增Web项目 2.新增Nuget包 3.配置HttpModule 4.配置Agent 5.启动网站 Elastic APM核心模块 1.Transaction:我们通过Transaction可以看其中Api的调用信息 2. Dependencies:通过Dependencies看到服务依赖关系 3. Error: 能通过Error看到程序中的错误信息 4. Matrics: 可以通过Matrics看到服务气的内存与CPU信息 Elas

  • 详解Metrics应用监控指标的使用说明

    目录 引用Metric库 Registry Gauge(仪表) Counter(计数器) Meter() Histogram(直方图) Timer(计时器) HealthCheck(健康检查) JMX报表 HTTP报表 其它报表 MetricSet 第三方库 MetricsforSpring 基本用法 XML风格的配置 java注解的方式 题前:做过虚拟化级别.系统级别.容器级别监控:应用级别监控有哪些方法可以做? Metrics是个很好的选择.java.python.go均可支持. Metri

  • 使用 Docker安装 Zabbix并配置自定义监控项的过程详解

    目录 一.Zabbix 简介 1.监控功能 2.Zabbix 工作原理 3.Zabbix 组件 4.Zabbix 进程 二.使用 Zabbix 配置自定义监控项 1.安装 Zabbix 2.开启自定义监控项 3.编写 Nginx 自定义监控脚本 一.Zabbix 简介 Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行.并且 Zabbix 还提供了灵活的通知机制,以此来让系统管理员快速定位/解决存在的各种问题.是一个基于 Web 界面提供的分布式系统监控以及网络监控功能的企业级

  • 详解微信小程序——自定义圆形进度条

    微信小程序 自定义圆形进度条,具体如下: 无图无真相,先上图: 实现思路,先绘制底层的灰色圆圈背景,再绘制上层的蓝色进度条. 代码实现: JS代码: Page({ data: {}, onLoad: function (options) { // 页面初始化 options为页面跳转所带来的参数 }, onReady: function () { // 页面渲染完成 var cxt_arc = wx.createCanvasContext('canvasArc');//创建并返回绘图上下文con

  • JS中微信小程序自定义底部弹出框

    实现微信小程序底部弹出框效果,代码分为html,css和js两部分,具体代码详情大家参考下本文. html <view class="commodity_screen" bindtap="hideModal" wx:if="{{showModalStatus}}"></view> <view animation="{{animationData}}" class="commodity_a

  • 微信小程序 自定义Toast实例代码

    微信小程序 自定义Toast实例代码 Toast样式可以根据需求自定义,本例中是圆形 <!--按钮--> <view class="btn" bindtap="btn_toast">自定义Toast</view> <!--以下为toast显示的内容 opacity为透明度--> <view class="toast_box" style="opacity:{{0.9}}"

  • 微信小程序自定义组件

    前言 最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好.各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下.本次主要分享下小程序自定义组件的一点思路,小程序官方提供的框架比较简陋,原始,可复用较差,没有实现自定义组件的功能,这让很多使用vue ,react前端开发非常难受.网上存在各种吐槽,也有分享实现自定义组件的方法,但是要么过于复杂,要么是微信小程序升级之后就不兼容,反正是各种坑你没商量.在这分享下本人

随机推荐