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重新打标的主要内容,如果未能解决你的问题,请参考以下文章

prometheus学习笔记

OnDetach/onAttach 片段重新创建片段活动

重新创建片段布局

重新创建活动后片段不可见

片段中的Firebase数据不是持久的,会重新下载

重新加载时刷新片段