首页 > 其他分享 >Prometheus监控实战系列八:标签重写

Prometheus监控实战系列八:标签重写

时间:2023-08-29 15:50:05浏览次数:47  
标签:__ labels 标签 hostname machine Prometheus 重写 idc

标签重写(Relabeling)是Prometheus一个非常有用的功能,它可以在任务拉取(scraping)阶段前,修改target和它的labels。该功能在日常的监控中常常会使用到,值得我们好好了解。

 

一. 默认标签

 

默认情况下,Prometheus加载targets后,都会包含一些默认的标签,其中以__作为前置的标签是在系统内部使用的,因此这些标签不会写入到样本数据中。

 

如:

__address__:当前Target实例的访问地址 

__scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS;

__metrics_path__:采集目标服务访问地址的访问路径;

 

上面这些标签将会告诉Prometheus如何从该目标实例中获取监控数据,而通过标签重写功能,我们可以对这些标签进行重写,从而实现对Target目标的控制。

 

二. relabel_config

 

标签重写的配置参数为relabel_config,其完整的配置格式如下 :

#源标签,需要在现有标签中已存在[ source_labels: '[' <labelname> [, ...] ']' ]
# 多个源标签的分隔符;[ separator: <string> | default = ; ]
# 要替换的目标标签;[ target_label: <labelname> ]
# 正则表达式,用于匹配源标签的值[ regex: <regex> | default = (.*) ]
# 源标签值取hash的模块;[ modulus: <uint64> ]
# 当正则表达式匹配时,用于替换的值,$1代替正则匹配到的值;[ replacement: <string> | default = $1 ]
# 基于正则匹配的动作[ action: <relabel_action> | default = replace ]

 

其中,相关的action类型有如下几种:

replace:正则匹配源标签的值用来替换目标标签,如果有replacement,使用replacement替换目标标签;keep:   如果正则没有匹配到源标签的值,删除该targets ,不进行采集;drop:   与keep相反,正则匹配到源标签,删除该targets;labelmap:正则匹配所有标签名,将匹配的标签值部分做为新标签名,原标签值  做为新标签的值;labeldrop:正则匹配所有标签名,匹配则移除标签;labelkeep:正则匹配所有标签名,不匹配的标签会被移除;

 

注意重定义标签并应用后,__开头的标签会被删除;要临时存储值用于下一阶段的处理,使用__tmp开头的标签名,这种标签不会被Prometheus使用;

 

三. 功能操作

 

在开始测试前,我们先配置一个测试Job,该Job包含两个实例,实例分别包含了两个标签,__machine_hostname和__machine_idc__。

 

scrape_configs:
- job_name: 'myjob'
static_configs:
- targets:
- '10.12.61.1:9100'
labels:
__machine_hostname__: 'node-01'
__machine_idc__: 'idc-01'
- targets:
- '10.12.61.2:9100'
labels:
__machine_hostname__: 'node-02'
__machine_idc__: 'idc-02'

 

replace操作

将__machine_hostname__的值替换到新标签hostname

scrape_configs:
- job_name: 'myjob'
static_configs:
- targets:
- '10.12.61.1:9100'
labels:
__machine_hostname__: 'node-01'
__machine_idc__: 'idc-01'
- targets:
- '10.12.61.2:9100'
labels:
__machine_hostname__: 'node-02'
__machine_idc__: 'idc-02'
relabel_configs:
- source_labels: [__machine_hostname__]
regex: "(.*)"
target_label: "hostname"

action: replace

replacement: '$1'

 重启Prometheus后,查看target信息如下:

 

 

keep/drop操作

排除标签值不匹配正则的targets 目标,此处正则匹配__machine_hostname__: 'node-01' 。

scrape_configs:
- job_name: 'myjob'
static_configs:
- targets:
- '10.12.61.1:9100'
labels:
__machine_hostname__: 'node-01'
__machine_idc__: 'idc-01'
- targets:
- '10.12.61.2:9100'
labels:
__machine_hostname__: 'node-02'
__machine_idc__: 'idc-02'
relabel_configs:
- source_labels: [__machine_hostname__]
regex: "(.*)-01"
target_label: "hostname"
action: keep
replacement: '$1'

 查看target信息,发现只保留正则匹配的实例。

 如果将上面配置的action改为drop,则结果相反,将删除正则匹配到标签的实例。

 

labelmap操作

重写新的标签hostname和idc,使用原有__machine_hostname__和__machine_idc__标签的值。

scrape_configs:
- job_name: 'myjob'
static_configs:
- targets:
- '10.12.61.1:9100'
labels:
__machine_hostname__: 'node-01'
__machine_idc__: 'idc-01'
- targets:
- '10.12.61.2:9100'
labels:
__machine_hostname__: 'node-02'
__machine_idc__: 'idc-02'
relabel_configs:
- action: labelmap
regex: __machine_(.+)__
查看target信息,可看到重写的新标签。

 

标签:__,labels,标签,hostname,machine,Prometheus,重写,idc
From: https://www.cnblogs.com/quqibinggan/p/17664952.html

相关文章

  • Prometheus监控实战系列九:主机监控
    前面我们介绍了Prometheus的基础概念,包括数据格式、PromQL语法等,本节我们将讲解如何通过Prometheus实现主机的监控。 Prometheus使用各种Exporter来监控资源。Exporter可以看成是监控的agent端,它负责收集对应资源的指标,并提供接口给到Prometheus读取。不同资源的监控对应不同......
  • Prometheus监控运维实战十: 主机监控指标
    在上一篇文章中我们学习了如何通过node-exporter获取主机监控信息。但安装好监控只是第一步,我们还需要知道哪些监控指标是我们需要关注的。本文将对Prometheus相关的主机监控指标进行介绍。一.CPU监控CPU负载node_load1node_load5node_load15 以上三个指标为主机的CPU平均......
  • Prometheus监控实战系列七:任务与实例
    一. 功能概述 任务与实例,是Prometheus监控中经常会提到的词汇。在其术语中,每一个提供样本数据的端点称为一个实例(instance),它可以是各种exporter,如node-exporter、mysql-exporter,也可以是你自己开发的一个服务。只要提供符合prometheus要求的数据格式,并允许通过HTTP请求获取......
  • Prometheus监控实战系列五:PromQL语法(上篇)
    PromQL是Prometheus内置的数据查询DSL(DomainSpecificLanguage)语言,其提供对时间序列丰富的查询功能,聚合以及逻辑运算能力的支持。当前,PromQL被广泛应用在Prometheus的日常使用中,包括数据查询、可视化、告警处理等,可以说,掌握PromQL是熟练使用prometheus的必备条件。 本文将通......
  • Prometheus监控实战系列六:PromQL语法(下篇)
    一.操作符在PromQL的查询中,还可以通过表达式操作符,进行更加复杂的结果查询,常见的操作有下列几种。数学运算符数据运算符使用的加、减、乘、除等方式,对样本值进行计算,并返回计算后的结果。例如,通过process_virtual_memory_bytes获取到的内存值单位为byte,我们希望转换为GB为单......
  • Prometheus监控实战系列一: 产品介绍
    一.概述 Promehteus是一款近年来非常火热的容器监控系统,它使用go语言开发,设计思路来源于Google的Borgmom(一个监控容器平台的系统)。 产品由前谷歌SRE MattT.Proudd发起开发,并在其加入SoundCloud公司后,与另一位工程师JuliusVolz合伙推出,将其开源发布。 2016年,由Googl......
  • Prometheus监控实战系列二: 安装部署
    Prometheus支持多种操作系统,例如Linux、Windows和MaxOSX等。在产品官网上提供了独立的二进制文件进行下载,可下载对应的tar包并在相应系统的服务器上进行安装部署。 当然,做为与容器有着紧密联系的监控系统,Promethesu也可以很方便的通过docker、kubernetes等容器平台进行部署。......
  • Prometheus监控实战系列三:配置介绍
    Prometheus使用名为prometheus.yml的配置文件进行设置,通过在启动时指定相关的文件,对配置内容进行加载。该配置文件分为四个模块:global(全局配置)、alerting(告警配置)、rule_files(规则配置)、scrape_configs(目标拉取配置),本文将分别对其进行讲解介绍。一.global 用于定义promethe......
  • Prometheus监控实战系列四:数据格式
    在Prometheus监控中,对于采集到服务端的指标,称为metrics数据。metrics指标为时间序列数据,它们按相同的时序,以时间维度来存储连续数据的集合。metrics有自定义的一套数据格式,不管对于日常运维管理或者监控开发来说,了解并对其熟练掌握都是非常必要的,本文将对此进行详细介绍。 一.......
  • 动态修改浏览器标签页图标
    //动态修改浏览器图标 getIcon(){//this.favicon是浏览器图标的地址或者路径 if(this.favicon){ letlink=document.querySelector("link[rel*='icon']")||document.createElement('link'); link.type='image/vnd.microsoft.icon......