relabel_configs配置介绍及使用
1.relabel_configs重新标签
1.1.重新标签的意义
重新标签就是重新定义一个标签
relabel_configs:这个配置项允许在采集之前对任何目标及标签进行修改
重新标签的意义:重命名原来的标签、删除标签、过滤目标,可以针对标签的某个值进行过滤
在查询一个监控指标时,prometheus会把只要包含这个监控指标的所有监控数据都列出来,这样看起来也是很麻烦,不过我们可以在查询时指定一个标签,这样就可以定位到指定的主机上
relabel_configs标签重新标记的意义特别大,我们可以把job_name定义成某一区域,在采集前进行标签重写,把标签的值传给一个新的标签,这样方便了我们的统计
1.2.重新标签配置介绍
relabel_cofnigs:
[ source_labels: '[' <labelname> [, ...] ']' ] //定义源标签,指定源标签是谁,多个原标签用逗号隔开
[ separator: <string> | default = ; ] //源标签的值,多个值用分号隔开
[ target_label: <labelname> ] //重新标记后的标签名,也就是要把标签重命名成什么
[ regex: <regex> | default = (.*) ] //匹配源标签的值,可以采用正则表达式
[ modulus: <int> ]
[ replacement: <string> | default = $1 ] //将正则匹配到的标签值传给新的标签
[ action: <relabel_action> | default = replace ] //执行正则匹配时的动作
1.3.配置prometheus自身监控主机增加一个idc的标签
我们先使用简单的label标签
1.修改配置文件,增加idc标签
[root@prometheus-server prometheus]# vim prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus-server:9090']
labels:
idc: "bj"
2.加载配置文件
[root@prometheus-server prometheus]# curl -XPOST prometheus-server:9090/-/reload
查看页面是否显示标签增加
搜索标签idc为bj的CPU使用情况
语法格式:监控metrics名{标签名=“标签值”}
process_cpu_seconds_total{idc="bj"}
统计标签idc为bj的CPU使用总和
promql支持很多函数,总和我们可以用sum函数
命令格式:sum(metrics名{标签名=”标签值“})
sum(process_cpu_seconds_total{idc="bj"})
1.4.使用relabel_configs将job标签重写标记
1.4.1.将job_name改为bj
这一步操作是为了一会将job标签进行重写标记
1.修改主配置文件
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
scrape_configs:
- job_name: 'bj'
static_configs:
- targets: ['prometheus-server:9090']
2.加载配置
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload
已经修改
出现两条记录的原因:由于prometheus监控一个主机默认会生成两个标签,一个instance和一个job,instance对应配置文件中的targets,job则对应job_name,在这里原来的job_name是prometheus,在这里已经是一个标签了,我们没有明确要删掉这个标签,而只是改了标签的值,因此他就会保留下来
1.4.2.将job标签重新标记
刚刚已经看现在的job标签值为bj,我们可以在采集前,把job的标签名修改为idc,这样也方便我们进行统计
配置解释
scrape_configs: - job_name: 'job' #实例名称 static_configs: - targets: ['prometheus-server:9090'] #监控主机ip relabel_configs: #重新标记标签 - action: replace #动作,replace动作就是将原来标签的值传给新标签 source_labels: ['job'] #源标签的名字 regex: (.*) #使用正则取出原标签的值,.*表示和原来的值保持一致 replacement: $1 #将正则表达式匹配到的结果值引用给新标签 target_label: idc #新标签的名称
1.修改主配置文件
scrape_configs:
- job_name: 'job'
static_configs:
- targets: ['prometheus-server:9090']
relabel_configs:
- action: replace
source_labels: ['job']
regex: (.*)
replacement: $1
target_label: idc
2.检查语法
[root@prometheus-server ~]# promtool check config /data/prometheus/prometheus.yml
Checking /data/prometheus/prometheus.yml
SUCCESS: 0 rule files found
3.重载配置
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload
可以看到已经将job标签重新标记了一个idc,且原来的job也会保留,但是过段时间就会消失了
2.relabel_configs重新标签动作
2.1.标签动作介绍
action重新标签动作:
- replace:默认动作,通过正则匹配匹配源标签(source_label)的值,使用replacement来引用表达式匹配的分组,就是将原标签的值传给新标签
- keep:删除正则与连接不匹配的目标源标签,比如我们指定一个源标签job,这时我们指定的动作是keep,则通过源标签查出来的监控指标不会被删除,因为metrics中有job这个标签,如果没有这个标签则会被删除
- drop:删除正则与连接匹配的目标源标签,比如我们指定的源标签为job,这个metrics值中包含job,则这个metrics会被删除,因为已经匹配的源标签
- labeldrop:删除正则匹配的标签,也就是如果这个metrics中包含这个标签,则标签会被删除
- labelkeep:删除正则不匹配的标签
- hashmod;设置新标签名为modulus链接的哈希值source_labels
- labelmap:匹配regex所有标签名称。然后复制匹配标签的值进行分组,replacement分组引用$1,$2替代
2.2.drop动作示例
匹配job标签的metrics进行删除
在添加一个action即可
1.修改主配置
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
scrape_configs:
- job_name: 'bj'
static_configs:
- targets: ['prometheus-server:9090']
relabel_configs:
- action: replace
source_labels: ['job']
regex: (.*)
replacement: $1
target_label: idc
- action: drop
source_labels: ['job']
2.加载配置
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload
前一会还存在
再次采集时则会被删除
2.3.keep动作示例
当前还是没有数据的
keep会将不匹配的进行删除,而我们的job原本是匹配的,因此加载完配置,重新采集时则会显示
1.修改主配置文件
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
scrape_configs:
- job_name: 'bj'
static_configs:
- targets: ['prometheus-server:9090']
relabel_configs:
- action: replace
source_labels: ['job']
regex: (.*)
replacement: $1
target_label: idc
- action: keep
source_labels: ['job']
2.加载配置
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload
2.4.labeldrop动作示例
使用labeldrop删除一个名为job的标签
labeldrop就是删除一个匹配的标签,labeldrop动作不能使用source_labels来匹配了,而是去匹配正则regex,要匹配多个值则用逗号隔开
当前还是这个标签
1.修改主配置
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
scrape_configs:
- job_name: 'bj'
static_configs:
- targets: ['prometheus-server:9090']
relabel_configs:
- action: labeldrop
regex: job
2.重载
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload
配置完labeldrop再次采集时就会把这个标签给删除
2.5.labelkeep动作示例
有点瑕疵,最后都删了,查不到监控数据
labelkeep是删除不匹配的标签,我们将除了job之外的标签全部删除
2.5.1.还原被删除的job标签
当前还是job被删除的样子,我们需要还原,否则用了labelkeep会全部删除,数据也就查不到了
还原回来的方式就是把配置文件刚刚写的labeldrop给删除就行了
已经还原回来了
2.5.2.删除除job之外的所有标签
1.修改主配置
[root@prometheus-server ~]# vim /data/prometheus/prometheus.yml
scrape_configs:
- job_name: 'bj'
static_configs:
- targets: ['prometheus-server:9090']
relabel_configs:
- action: labelkeep
regex: job
2.重载
[root@prometheus-server ~]# curl -XPOST prometheus-server:9090/-/reload