Prometheus监控学习之路(三)
重新打标
对target重新打标
对target重新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,他们将按照定义的书序依次执行。
对于发现的每个target,Prometheus默认会执行如下操作:
- job的标签设定为其所属的job_name的值
- __address__标签的值为该target的套接字地址“<host>:<port>”
- instance标签的值为__address__的值
- __scheme__标签的值为抓取该target上指标时使用的协议(http或https)
- __metrics_path__标签的值为抓取该target上的指标时使用的URL路径,默认为“/metrics”
- __param_<name>标签的值为传递URL参数中第一个名称为<name>的参数的值
重新标记期间还可以使用该target上以“__meta__”开头的元标签,各服务发现机制为其target添加的元标签会有所不同。
重新标记完成后,该target上以“__”开头的所有标签都会被移除,若在relabel的过程中需要临时存储标签的值,则要使用“__tmp”标签名称为前缀进行保存,以避免同Prometheus的内建标签冲突。
重新打标基本配置
参数 | 详解 |
---|---|
source_labels | 引用那些已有标签,可以引用多个 |
target_label | 将引用的标签赋值给新标签 |
separator | 引用多个标签时使用什么样的连接符,默认为“;” |
regex | 对引用标签的值进行正则匹配,对匹配到的值可以赋值给target_label |
action | 对匹配到的结果进行什么操作,默认“replace” |
replacement | 等于regex匹配到的值 |
action字段可执行动作
替换标签值:
- replace首先将source_labels中指定的各标签的值进行串连,然后将regex字段中的正则表达式对source_labels进行匹配,若匹配则将target_label字段中定义的标签值替换为replacement字段中保存的值
- hashmod将target_labels的值设置为一个hash值,该hash则由modules字段指定的hash模块对source_labels上各标签的串连值进行hash计算生成
删除指标:该处的每个指标名称对应一个target
- keep,regex不能匹配到target上的source_labels上的各标签串连值时,则删除该target
- drop,regex能够匹配到target上的source_labels上的各标签串连值时,则删除该target
创建或删除标签:
- labelmap,将regex对所有的标签名进行匹配,然后将匹配到的标签的值赋给replacenment字段指定的标签名之上;通常用于取出匹配的标签的一部分生成新的标签
- labeldrop,将regex对所有的标签名进行匹配,能够匹配到的标签将从该target的标签集中删除
- labelkeep,将regex对所有的标签名进行匹配,不能匹配到的标签将从该target的标签集中删除
注意:要确保在labeldrop或labelkeep操作后,余下的标签集依然能唯一标记该指标
重新打标示例
rplace
修改Prometheus的配置文件
- job_name: 'consul-node'
consul_sd_configs:
- server: "192.168.0.181: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
解释:匹配“__scheme__,__address__,__metrics_path__”这三个标签中含有http或https和标签中所有的值,利用replacement对匹配到的值进行重组然后赋值给target_label中的endpoint
重启Prometheus查看已经存在新打的标签
labelmap
- job_name: 'consul-node'
consul_sd_configs:
- server: "192.168.0.181:8500"
tags:
- "nodes"
refresh_interval: 2m
relabel_configs:
- regex: "(job|app)"
replacement: ${1}_name
action: labelmap
重新打标前:
重新打标后:
解释:对target上的所有标签进行匹配,对匹配到的标签,将以标签的名称为前缀,以“_name”为结尾生成新的标签名称,新标签的值则与原标签的值相同
指标名称relabel操作
drop
- job_name: 'consul-node'
consul_sd_configs:
- server: "192.168.0.181:8500"
tags:
- "nodes"
refresh_interval: 2m
metric_relabel_configs:
- source_labels:
- __name__
regex: "go_memstats.*"
action: drop
生成前查看metric:
生成后查看metric: