目录

1. 概述

2. Metadata标签

3. Relabeling 规则

3.1 语法

3.2 action解释

4. 修改标签场景

5. 场景实战

5.1 过滤指定target

5.2 将__meta_等内部标签转为promsql可使用的标签

5.3 删除标签

5.4 标签重命名


1. 概述

relabel_config,用于标签的管理,包括标签过滤、重定义或替换标签等。简单的说,就是可以删除不要标签,保留隐藏的标签与元数据,替换指定标签值等,只适用于数据采集之前的标签修改,如需在采集数据后再修改,参阅metric_relabel_configs。

常见的场景使用中,如prometheus采集node_exporter的数据,在Targets中,可以看到 “job="xxxx"”等标签,以及以__meta开头的元组标签,有些标签可能需要重写标签,有些需要保留,如__meta是prometheus系统内部使用,无法被promql查询时使用的,这个时候就需要对__meta的标签进行重写保留。另外也可用于过滤不要target,只保留满足匹配的label的target。

2. Metadata标签

以双下划线__开头的标签属于特殊的标签,如__meta_开头的标签,它们在重新标记后会被删除。

Prometheus如何清理过期数据 prometheus 删除某个指标数据_重命名

说明:

__address__:包含应该被抓取目标的地址,它最初默认为服务发现机制提供的 <host>:<port>,如果在此之前没有明确地将实例标签 instance 设置为其他值,那么在 relabeling 之后,Prometheus 会将 instance 标签设置为 __address__ 的值。

__scheme__:抓取目标的请求模式,包括 http 与 https,默认为 http。

__metrics_path__:表示用于采集指标的 HTTP 路径,默认为 /metrics。

__param_<name>: 包含 HTTP 查询参数名称和它们的值。

3. Relabeling 规则

3.1 语法

# vim prometheus.yml
- job_name: 'prometheus'
    *** ***
    relabel_configs:
      - regex: __meta_xx_(.+)  #正则匹配指定的标签
        action: replace | keep | drop | labelmap | labeldrop | labelkeep
        source_labels: [源标签]  # 根据action选择
        target_label: [目标标签] # 根据action选择
        replacement: [替换的标签] # 根据action选择

3.2 action解释

动作

说明

replace

默认值,通过regex匹配source_label的值,使用replacement替换新的标签值

keep

只保留regex匹配source_label的target,其它不匹配的target删除

drop

丢弃regex匹配source_label的target

labelmap

复制保留regex匹配source_label的值,并生成一个新标签

labeldrop

删除匹配的标签

labelkeep

只保留匹配的标签

4. 修改标签场景

  • 删除不要的标签
  • 增加新标签(如使__meta等内部标签重命名后可被promsql查询使用)
  • 标签重命名
  • 过滤指定target

5. 场景实战

5.1 过滤指定target

只抓取标签:job= *mysql_exporter*的target
- job_name: 'prometheus'
    *** ***
    relabel_configs:
    - source_labels: [job]   
      regex: .*mysql_exporter.*
      action: keep

5.2 将__meta_等内部标签转为promsql可使用的标签

- job_name: 'prometheus'
    *** ***
    relabel_configs:
    - regex: __meta_ecs_tag_(.+)
      action: labelmap

如内部标签(自动生成的)__meta_ecs_tag_prometheus="test",通过上面的正则匹配后,新生成的标签为prometheus="test",这个就能将内部标签转化为promsql能使用的标签

Prometheus如何清理过期数据 prometheus 删除某个指标数据_重命名_02

5.3 删除标签

- job_name: 'prometheus'
    *** ***
    relabel_configs:
    - action: labeldrop
      regex: "job"   #正则匹配标签名称

5.4 标签重命名

可以通过匹配源标签,匹配regex正则表达式,对目标标签进行重写,比如通过sd_config自动发现ecs的时候,部分实例node_exporter启动的端口(9100)被占用,使用9101等其它端口,则自动发现配置的端口为9100时,状态则为down,通过标签重命名后,可以实现endpoint地址和端口重写为想要的IP:PORT

- job_name: 'prometheus'
    *** ***
    relabel_configs:
      - source_labels: [__meta_ecs_tag_port9091]
        regex: "192.168.169.26"
        target_label: __address__
        replacement: 192.168.1.26:9101
  • source_labels 源标签,这个可以按需自定义,port9091是我在ecs上打的标签
  • target_label: __address__ ,要修改的目标标签,endpoint的地址用的是__address__
  • replacement 操作类型为替换,可以用字符替换,也可以用$1变量替换,这个值是regex匹配后提取出的内容

效果如下:

Prometheus如何清理过期数据 prometheus 删除某个指标数据_java_03