Prometheus监控指标的label注入方法

Prometheus采集监控指标的方式如下图所示,Prometheus Server经过一定的配置可以从各种Exporter主动采集监控数据。广义上的Exporter可以是任何以Prometheus标准暴露监控指标的进程。不过严格来说可以划分为以下两类:

1. 对于Etcd这类应用程序,它们在代码中利用Prometheus官方提供的SDK定义了一系列自定义指标供Prometheus Server采集,此类指标一般用于描述该程序自身的运行状况。一般对于新开发或者改动难度较小的程序,可以用这种对代码侵入性较大的方式暴露指标。

2. 标准意义上的Expoerter本质上就是指标的转换层,例如Prometheus社区提供了一个名为Node Exporter的组件,该组件的作用为采集节点的CPU,内存等指标并转换以符合Prometheus标准的格式暴露出去。一般对于代码改动难度较大或已经有成熟的指标暴露机制的程序,这种方式是较为合适的。

Prometheus Server采集指标的方式,本质上是向Exporter发送一个HTTP请求并获取该Exporter定义的所有指标内容,例如对于Node Expoerter的采集形式如下:

# curl http://192.168.0.6:9100/metrics
# HELP node_network_transmit_bytes_total Network device statistic transmit_bytes.
# TYPE node_network_transmit_bytes_total counter
node_network_transmit_bytes_total{device="eth0"} 2.74314960472e+11
node_network_transmit_bytes_total{device="lo"} 7.248889467e+09
# HELP node_boot_time_seconds Node boot time, in unixtime.
# TYPE node_boot_time_seconds gauge
node_boot_time_seconds 1.574417622e+09
...

  

从上述示例可以看到,一次抓取过程返回的内容本质上是纯文本,我们截取了其中的两个指标,`node_network_transmit_bytes_total`和`node_boot_time_seconds`分别表示节点上各个网卡发送的数据的字节数以及节点的启动时间。对于`node_network_transmit_bytes_total`包含一个key为`device`的label用于区分各个网卡,而`node_boot_time_seconds`并不包含任何指标。

事实上,指标中包含的label能够让我们从更多维度更好地对指标进行操作。但是很多时候,Exporter指标中原生定义的label是不足以满足我们的需求的。例如,对于Node Exporter暴露的指标中显然没有包含组织信息的label,但是如果有这么一个label存在,加上Prometheus强大的PromQL查询语句,我们能够很容易地从组织维度对指标进行划分。

那么如何在Exporter暴露的指标中添加额外的label呢?最直接的方式当然是侵入式地修改Exporter的源码,从而在源头加上这些“定制化”的labels。当然,这种方式对于一些简单的自研组件是可行的。但是对于Node Exporter以及Nginx Exporter等较为复杂的Exporter直接修改源码并不是那么地简单,而且假如我要为所有指标加上一个公共的label,那么也就意味着要修改所有Exporter的源码。

显然,我们需要一种更为通用的方式,从上文的分析可知,标准意义的Exporter本质上是一个中间层,用于指标的转换。那么我们是否可以再加一个中间层,用于自定义label的添加呢?架构如下:

在Prometheus Server和Exporter之间构建一个中间组件Adapter,此时Prometheus不再直接向Exporter发起HTTP请求抓取监控指标,而是向Adapter发起请求。一旦Adapter接收到请求之后会转而向Exporter发起请求真正抓取到监控指标。已知指标内容其实就是一些文本,因此只要做一些简单的插入操作就能将自定义的指标注入。最后,将处理后的内容再返回至Prometheus Server即可。若Adapter注入的指标为{org="dev"},那么经过Adapter处理之后,Prometheus Server真正抓取到的指标如下:

# curl http://192.168.0.6:9100/metrics
# HELP node_network_transmit_bytes_total Network device statistic transmit_bytes.
# TYPE node_network_transmit_bytes_total counter
node_network_transmit_bytes_total{device="eth0", org="dev"} 2.74314960472e+11
node_network_transmit_bytes_total{device="lo", org="dev"} 7.248889467e+09
# HELP node_boot_time_seconds Node boot time, in unixtime.
# TYPE node_boot_time_seconds gauge
node_boot_time_seconds{org="dev"} 1.574417622e+09
...

  

通常在Kubernetes环境下,我们会将Adapter以Sidecar的形式部署在Exporter所在的Pod中,如果能够将Adapter需要注入的指标值从配置文件中读取并支持动态加载机制,那么我们就能非常灵活地为任意Exporter的指标加入任意的定制化label。

原文地址:https://www.cnblogs.com/YaoDD/p/12173218.html

时间: 2024-10-25 09:50:44

Prometheus监控指标的label注入方法的相关文章

2019最新 prometheus视频教程 prometheus监控视频 prometheus入门与实践教程

┣━━prometheus-3 [15.6G]┃ ┣━━01.监控介绍.mov [989.9M]┃ ┣━━prometheus1-5.pdf [2.3M]┃ ┣━━03.prometheus数据及安全模型介绍.mov [336.9M]┃ ┣━━04.prometheus在centos7上安装.mov [364.6M]┃ ┣━━05.prometheus在docker容器中运行.mov [283.2M]┃ ┣━━06.使用Node-exporter监控节点.mov [1.2G]┃ ┣━━07.使用

Prometheus(三):Prometheus监控交换机(snmp)

默认已安装Prometheus服务,服务地址:192.168.56.200 一.获取交换机snmp信息 snmp服务IP(交换机IP):172.20.2.83 snmp community:dfetest 二.部署 snmp_exporter 2.1 下载snmp_exporter 下载snmp_exporter安装包,下载地址:https://github.com/prometheus/snmp_exporter/releases 下载完成后,上传至机器的  /usr/local 目录下 解压

prometheus监控第二篇之告警alertmanager

kubernetes之prometheus监控第二篇-alertmanager监控告警:   在前期的博文中,我已经简单的介绍过了prometheus的安装,以及通过grafana来实施监控.这篇博文,我们更深入的介绍一下prometheus的监控.本篇博文主要分为以下几个知识点: 1. 使用prometheus监控ceph存储: 2. 学习简单的PromQL语言,在grafana里面根据业务自定义dashboard; 3. alertmanager自定义告警的配置:讲述邮件告警和企业微信告警:

Prometheus监控系列最佳实践

Prometheus是继kubernetes第二个从CNCF中毕业的项目,个人也是非常的喜欢这款通过数据指标发现和预测告警的开源监控平台,官方的话就不多说了,根据官网的介绍有以下功能,但是有些简短的概括了你也不一定知道,所以加了一些个人的白话官方截图 Prometheus之白话文一段 实现高纬度的数据模型 时间序列数据通过 metric 名和键值对来区分,这里你可以区分多(隔离)环境的监控指标. 所有的 metrics 都可以设置任意的多维标签,可以自定义添加多个,比如这个服务的监控属于哪个团队

ASM(四) 利用Method 组件动态注入方法逻辑

这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现.通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例.那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以通过继承MethodVisitor,来编写一个MethodXXXAdapter来实现对于方法逻辑的注入.通过下面的两个例子来介绍下无状态注入和有状态注入方法逻辑的实现.例子主要

远程线程注入方法CreateRemoteThread

最近在整理学习Windows注入方面的知识,这个远程注入前面早写过,现在看看人家博客的理解整理,整理, 需要源码的可以到我的github上下载. 链接是  https://github.com/Arsense/WindowsCode 首先先来说说什么是注入,为什么要注入 0x00 Baise 注入就是把自己的Dll注入到人家的代码中,被注入的DLL拥有目标进程内存的访问权限,所以我们可以通过该 向某个进程注入DLL时的方法主要有以下三种: 创建远程线程(CreateRemoteThread()

Prometheus 监控K8S Node监控

Prometheus 监控K8S Node监控 Prometheus社区提供的NodeExporter项目可以对主机的关键度量指标进行监控,通过Kubernetes的DeamonSet可以在各个主机节点上部署有且仅有一个NodeExporter实例,实现对主机性能指标数据的监控,但由于容器隔离原因,使用容器NodeExporter并不能正确获取到宿主机磁盘信息,故此本课程将NodeExporter部署到宿主机. node_exporter:用于*NIX系统监控,使用Go语言编写的收集器 使用文档

Prometheus(二):Prometheus 监控Windows机器

一.安装wmi-exporter 首先在需要监控的Windows机器上安装wmi_exporter.wmi_exporter下载地址:https://github.com/martinlindhe/wmi_exporter/releases 下载后,双击即可完成安装. 完成安装后,会自动创建一个开机自启的服务 验证服务是否启动,默认wmi-exporter端口为9182 浏览器访问  http://192.168.56.1:9182/metrics  (Windows系统IP地址:9182端口)

Prometheus 监控 Redis 集群

Prometheus 监控 Redis cluster,其实套路都是一样的,使用 exporter. exporter 负责采集指标,通过 http 暴露给 Prometheus 拉取.granafa 则通过这些指标绘图展示数据.Prometheus 收集的数据还会根据你设置的告警规则判断是否要发送给 Alertmanager, Alertmanager 则要判断是否要发出告警. Alertmanager 告警分为三个阶段 Inactive 触发告警的规则会被发送到这来. Pending 你设置