6.prometheus重新打标
Posted 都市侠客行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.prometheus重新打标相关的知识,希望对你有一定的参考价值。
target重新达标
target重新达标是数据抓取之前的动态重写target标签的强大工具,在每个数据抓取配置中,都可以定义多个relabel。
对于发现的每个target,Prometheus默认会执行如下操作
job标签设定为其所属的job_nam的值;
_address_标签的值为该target的套接字地址“host:port”;
instance标签的值为_address的值;
_scheme_标签的值为抓取该target上指标时使用的协议;
_metrics_path_标签的值为抓取该target上的指标时使用的URI路径,默认为/metrics;
_param_<name>标签的值:为传递URL参数中的第一个名称为<name>参数的值;
以上几个原始标签参数,都会在重新达标过程中被删除,如果要继续使用就需要重新定义达标详情。
对于重新达标期间,还可以使用该target上以_meta_开头的元标签;
注意:各服务发现机制为其target添加的元标签会有所不同;
重新标记完成后,该target上以”_“开头的所有标签都会被移除;
若在relabel的过程中需要临时存储标签值;则要使用_temp标签名称为前缀进行保存,以避免同Prometheus内建的标签冲突;
重新达标
叫relabel_configs:
重新达标具备这几个功能
1.修改特定标签的值;
2.可以删除、添加、生成特定标签;
那么究竟怎么做的呢?就依靠以下几个参数;
可以根据自己的目的,自定义选择以下几个参数进行合理的搭配使用。。
具有以下几个参数
source_labels:打算引用已有的标签;可以引用多个,使用逗号分隔开。
separtor:对于source_labels引用源标签时的相互连接符号,默认是分号
terget_label:将source_labels取值的结果,赋值给哪个新标签,而target_label里面就是新标签。
regex:使用什么样的表达式,对source_label进行匹配;匹配完成后,将值赋予到target_label上。是怎样赋值呢?引用所有的正则表达式的值匹配给target_label
modulus:
replacement:
action: 打标的动作,默认为replace,替换目标标签的值;
把源标签的值,取出来一部分替换目标部分的值,所以叫replace
relabel_action字段用于定义重新标记的行为,可用值为
1.替换标签值:repalace,会串联source_label指定个标签的值,而后将regex字段的正则表达式对源标签值进行匹配判断,若匹配,则将target_label中指定的值替换为replacement字段中保存的值。替换目标标签值。
2.替换标签值:hashmod,将target_label上的值设置成hash值,该hash值由modules字段指定的hash模块对source_labels上个标签串联值进行hash计算生成;
删除指标
keep不能匹配的,则删除;
drop能匹配的,则删除。
创建和删除标签
labelmap对标签名进行匹配判断;
labeldrop能匹配的,则删除;
labelkeep,不能匹配的,则删除。
replace
举例说明
- job_name: "nodes"
file_sd_configs:
.....
relabel_configs:
- source_labels:[_scheme_,_address,_merics_path_]
regex:"(http|https)(.*)"
separator:"" 分隔符 默认是; 现在是空的,代表没有分隔符,直接串起来。
target_label:"endpoint"
replacement:"${1}://{2}"
action:replace
在每个target中,去找_scheme_,_address,_merics_path_三个源标签的值;并将其串联起来,并且默认的连接分隔符是分号,使用regex正则表达式进行匹配。
而后就是,replacement将targets_label的值替换成<regex:"(http|https)(.*)">的第一个括号的值,://{2}匹配到第二个括号里面的值;然后连起来
labelmap,用于对target上的标签进行匹配判断,对于符合匹配的,会在标签中匹配的部分为前缀,并在后面加上"_name"为后缀生成新的标签名,而新标签的值和原标签的值相同。
一句话:标签重命名-值不变。
举例说明
- job_name: "nodes"
file_sd_configs:
.....
relabel_configs:
- regex:"(job|app)"
replacement:$(1)_name
action:labelmap
labelmap,搜索该target上的所有标签的名称做正则表达式<regex:"(job|app)>匹配,对匹配到可以基于(job|app)名称,会生成一个新名称。
上个案例说,找target上有没有叫job的标签,如果由就创建一个新标签,名称叫job并且加上后缀_name,而值还是原来的值。然后可以把原来的值删掉。
加入原来的值叫 app="node_exporter" ,那么通过labelmap之后,就会转成app_name="node_exporter"。
以上所属
ralabel_config是 改标签的。
metric_rebel_configs是改metric开头标签的。
实例1
- job_name: \'prometheus\'
# metrics_path defaults to \'/metrics\'
# scheme defaults to \'http\'.
consul_sd_configs:
- server: "172.29.1.11:8500"
tags:
- "prometheus"
refresh_interval: 2m
# All nodes
- job_name: \'nodes\'
consul_sd_configs:
- server: "172.29.1.11:8500"
tags:
- "nodes"
refresh_interval: 2m
relabel_configs:
- source_labels:
- __scheme__
- __address__
- __metrics_path__
regex: "(http|https)(.*)"
separator: ""
target_label: "endpoint"
replacement: "${1}://${2}"
action: replace
#下面这块是删除go_info ,这里能显示节点的版本信息。
metric_relabel_configs:
- source_labels:
- __name__
regex: "go_info.*"
action: drop
实例2
scrape_configs:
static_configs:
- targets: ["localhost:9090","localhost:9100"]
- job_name: "hosts_exporters"
file_sd_configs:
- files: ["./hosts.json"]
relabel_configs:
- source_labels: [ __scheme__, __address__,__metrics_path__]
regex: "(http|https)(.*)"
separator: ""
target_label: "endpoint"
replacement: "${1}://${2}"
action: replace
#下面这块是删除go_info ,这里能显示节点的版本信息。
# metric_relabel_configs:
# - source_labels:
# - __name__
# regex: "go_info.*"
# action: drop
这个时候刷新9090,就能发现相比之前的标签,现在多了一个endpoint标签,这个标签里串联了[__scheme__, __address__, __metrics_path__]三个原始标签。
,而其他target没有。
总结:
labelmap 改标签;
replace 修改标签;
以上是关于6.prometheus重新打标的主要内容,如果未能解决你的问题,请参考以下文章