首页 > 其他分享 >Prometheus-5:relabel标签重新打标

Prometheus-5:relabel标签重新打标

时间:2023-07-23 10:55:56浏览次数:38  
标签:__ regex 匹配 target 标签 relabel Prometheus 打标

Prometheus relabel重新打标

对target重新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,它们将按照定义的顺序依次执行。 对于发现的每个target,Prometheus默认会执行如下操作:
  1. job的标签设定为其所属job_name的值;
  2. __address__标签的值为该target的套接字地址“:”
  3. instance标签的值为__address__的值
  4. __scheme__标签的值为抓取该target上指标时使用的协议(http或https)
  5. __metrics_path__标签的值为抓取该target指标时使用的URL路径,默认为/metrics
  6. __param_标签的值为传递的URL参数中第一个名称为的参数的值
需要注意: 重新标记期间,还可以使用该target上以"__meta_"开头的元标签,各服务发现机制为其target添加的源标签会有所不同。 重新标记完成后,该target上以"__"开头的所有标签都会被移除,若在relabel的过程中需要临时存储标签值,则要使用__tmp为前缀进行保存,以避免同Prometheus的内建标签冲突。

relabel_config

relabel中几个重要的字段作用:
# source_labels从指定标签中匹配值。并将值串联
# 使用配置的分隔符并与配置的正则表达式匹配
# 用于替换、保留和丢弃操作。
[ source_labels: '[' <labelname> [, ...] ']' ]

# 串联源标签值之间的分隔符,默认;
[ separator: <string> | default = ; ]

# 在替换操作中将结果值写入的标签。
# 对于替换操作,它是强制性的。Regex捕获组可用。
[ target_label: <labelname> ]

# 与提取值匹配的正则表达式。
# 当actions等于replace, keep, drop, labelmap,labeldrop and labelkeep时使用
[ regex: <regex> | default = (.*) ]

# 获取源标签值的哈希值的模数。
[ modulus: <int> ]

# 如果正则表达式匹配,则对其执行正则表达式替换的替换值。
[ replacement: <string> | default = $1 ]

# 基于正则表达式匹配要执行的操作。
[ action: <relabel_action> | default = replace ]
官网:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

<relabel_action>字段用于定义重新标记的行为,其可用取值有:

1. 替换标签值

  • replace:首先将source_labels中指定的各标签的值进行串联,而后将regex字段中的正则表达式对源标签值进行匹配判定,若匹配,则将target_label字段中指定的标签的值替换为replacement字段中保存的值
    • replacement可按需引用保存regex中的某个“分组模式”匹配到的值;默认保存整个regex匹配到的内容
    • 进行值替换时,replacement字段中指定标签的值也支持以分组格式进行引用
  • hashmod:将target_label的值设置为一个hash值,该hash则由modules字段指定的hash模块对source_labels上各标签的串联值进行hash计算

2. 删除指标:该处的每个指标名称对应一个target

  • keep:regex不能匹配到target上的source_labels上的各标签的串联值时,则删除该target
  • drop:regex能够匹配到target上的source_labels上的各标签的串联值时,则删除该target

3. 创建或删除标签

  • labelmap:将regex对所有的标签名进行匹配判定,而后将匹配到的标签的值赋给replacement字段指定的标签名之上,通常用于取出匹配的标签名的一部分生成新标签
  • labeldrop:将regex对所有的标签名进行匹配判定,能够匹配到的标签将从target的标签集中删除
  • labelkeep:将regex对所有的标签名进行匹配判定,不能够匹配到的标签将从target的标签集中删除
注意:要确保labeldrop或labelkeep操作后,余下的标签集依然能唯一标识该指标

relabel示例之replace

以我们上节基于consul自动发现的target来做示例,下图是服务发现后自动打上的标签: 我们这里做一个拼接,将__scheme__、__address__和__metrics_path__的值拼接成一个值并重新赋予给endpoint这个标签,如下:
  - job_name: 'nodes'
    consul_sd_configs:
    - server: "monitor.example.com:8500"
      tags:
      - "nodes"
      refresh_interval: 2m
    scrape_interval: 15s
    relabel_configs:
    - source_labels: 
      - __scheme__
      - __address__
      - __metrics_path__
      regex: (http|https)(.*)
      separator: ""
      target_label: endpoint
      replacement: ${1}://${2}
      action: replace
重新加载配置
curl -XPOST monitor.example.com:9090/-/reload
查看: 如此配置之后,所有job_name=nodes的target都会执行此relabel操作。

relabel示例之labelmap

以我们上节基于consul自动发现的target来做示例,下图是服务发现后自动打上的标签,都以__meta__consul开头: 我们这里做一个类似重命名的操作,将__meta_consul_service开头的标签再次利用起来,将__meta_consul_service_这么一堆去掉,改为node_xxx这种类型:
    - regex: (__meta_consul_service_)(.*)
      replacement: node_${2}
      action: labelmap
重新加载配置
curl -XPOST monitor.example.com:9090/-/reload
查看: 已经达到预期,这个时候可以通过node_address等这些标签进行筛选target了。

relabel示例之labeldrop

以上两种方式实现了标签的拼接及重命名操作,但是还有很多标签是我们不想要的,我们也可以通过labeldrop来将它们删除,例如上边所有job开头的指标名称全部删除:
    - regex: ^job.*
      action: labeldrop
需要注意,relabel是按照配置顺序从上往下执行的,所以在删除操作之前如果有用到此类标签,一定要把drop的配置放在其后边
./promtool check config prometheus.yml
curl -XPOST monitor.example.com:9090/-/reload
此时包含所有以job开头的标签均已被删除:

relabel示例之keep

以上都是对target的标签进行了一系列操作,keep和drop是针对target本身的操作,例如,我想仅仅保持node_port标签值为9.+1的target,其他全部删除:
    - source_labels: 
      - node_port
      regex: 9.+1
      action: keep
最终结果,node_port=9100的target被筛选走了:

以上实现最终prometheus.yml配置文件

scrape_configs:
  - job_name: 'nodes'
    consul_sd_configs:
    - server: "monitor.example.com:8500"
      tags:
      - "nodes"
      refresh_interval: 2m
    scrape_interval: 15s
    relabel_configs:
    - source_labels: 
      - __scheme__
      - __address__
      - __metrics_path__
      regex: (http|https)(.*)
      separator: ""
      target_label: endpoint
      replacement: ${1}://${2}
      action: replace
    - regex: (__meta_consul_service_)(.*)
      replacement: node_${2}
      action: labelmap
    - regex: job
      action: labeldrop
    - source_labels: 
      - node_port
      regex: 9.+1
      action: keep

metric_relabel_config

上边对target的标签进行relabel后,在获取指标的最后一步,还可以对metric进行重新打标,其作用在于:
  1. 删除不必要的指标
  2. 从指标中删除敏感或不需要的标签
  3. 添加、编辑或者修改指标的标签值或者标签格式
对metric重新打标的配置格式与target重新打标的格式相同,但要定义到 metric_relabel_configs 字段中。 需要注意的是:
  • 更改或添加标签会创建新的时间序列,所以要明确使用各标签,尽可能保持不变,避免创建出一个动态的数据环境
  • 标签是时间序列的唯一性约束,删除标签并导致时间序列重复时,可能会导致系统出现问题

metric relabel删除指标

例如删除go_info指标,通过__name__元标签引用指标名称,然后由regex进行匹配判定,可使用drop action删除匹配的指标。 注:__name__ 是一个特殊的标签名称,用于存储指标名称(也称为“指标类型”),例如go_info它就是一个指标名称。 下边示例,用于在响应的job_name之上,删除go_info指标:
  - job_name: 'nodes'
    consul_sd_configs:
    - server: "monitor.example.com:8500"
      tags:
      - "nodes"
      refresh_interval: 2m
    scrape_interval: 15s
    metric_relabel_configs:
    - source_labels: [__name__]
      regex: go_info
      action: drop
重新加载:
curl -XPOST monitor.example.com:9090/-/reload
删除前: 删除后: 至此,Prometheus relabel相关功能演示完毕。

写到最后

到此博客,Prometheus本身相关的话题、知识点及应用方式基本上都汇总完毕,后续会更着重于与Prometheus息息相关的组件介绍,包括查询结果的持久化、grafana、pushgateway以及告警组件altermanager等服务,感兴趣的朋友可以欢迎关注。

标签:__,regex,匹配,target,标签,relabel,Prometheus,打标
From: https://www.cnblogs.com/v-fan/p/17574762.html

相关文章

  • prometheus实战:
    一:安装部分:https://prometheus.io/download/###下载源码解压即可https://grafana.com/grafana/dashboards###搜索数据源为prometheus的这里下载了:prometheus、node_exporter、alertmanager、pushgateway同时机器需要安装dockeryuminstalldocker-ysystemctlstartdock......
  • 使用prometheus+grafana监控Linux和Mysql
    整个监控系统分为三部分:prometheus,grafana,xxxx_exporter(各种类型的数据采集器,在本例中就是node_exporter,mysqld_exporter)1、在主监控服务器上安装prometheus作为主服务2、在主监控服务器上安装grafana用于界面展示3、在需要监控的服务器安装xxxx_exporter用于采集数据并提供......
  • Prometheus监控redis
    创建redisPodapiVersion:apps/v1kind:Deploymentmetadata:name:redisnamespace:kube-systemannotations:prometheus.io/scrape:'true'spec:replicas:1selector:matchLabels:app:redistemplate:metadata:la......
  • Prometheus + Grafana
    Prometheus+Grafana,开源监控神器!(qq.com)docker搭建普罗米修斯监控体系(prometheus)-羊孩-博客园(cnblogs.com)......
  • Prometheus常用查询
    Prometheus常用查询集群指标#CPU核心总数sum(machine_cpu_cores{cluster="$cluster",job="kubelet"})by(cluster)#CPU请求总数sum(kube_pod_container_resource_requests{cluster="$cluster",job="kube-state-metrics",unit="core"......
  • 开发自己的Prometheus Exporter、实现自定义指标
    PrometheusExporter基础知识PrometheusExporter的概念、工作原理 PrometheusExporter是一个用来收集和暴露指标数据的工具,通过与Prometheus监控系统一起使用。它的结构包括两个组件:Collector和Exporter:Collector:用于从目标应用程序或系统收集指标并将其转化为Prometheus......
  • zabbix监控/Prometheus简介
    1.监控知识体系  为什么使用监控:  对系统不间断实时监控,实时反馈系统当前状态,保证服务可靠性安全性,保证业务持续稳定运行  新公司如何引入监控:  硬件监控:路由器、交换机、防火墙;  系统监控:CPU、内存、磁盘、网络、进程、TCP  服务监控:Nginx、PHP、tomcat......
  • Prometheus-4:服务自动发现Service Discovery
    自动发现Prometheus的服务发现的几种类型:基于文件的服务发现;基于DNS的服务发现;基于API的服务发现:Kubernetes、Consul、Azure......Prometheus为什么需要自动发现?PrometheusServer的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter......
  • Prometheus 基础语法
    prometheus语法参考:https://blog.csdn.net/Happy_Sunshine_Boy/article/details/105651016CPU1.计算CPU的使用时间空闲CPU使用时间=node_cpu_seconds_total{mode=“idle”}CPU总共使用时间=node_cpu_seconds_total)2.取一分钟之内的使用增量空闲CPU一分钟内的增量:in......
  • Springboot远程调用Prometheus Api获取指标数据
    0、写在前面1>使用RestTemplate作为远程调用工具调用prometheus原生api获取数据2>prometheus原生api文档地址如下:https://prometheus.io/docs/prometheus/latest/querying/api/3>通过访问prometheus原生api,查看原生api返回的数据格式,定义对应的实体类格式4>下面所列功能代......