目录
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_开头的标签,它们在重新标记后会被删除。
说明:
__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能使用的标签
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匹配后提取出的内容
效果如下: