对 target 重新打标是在数据抓取之前动态重写 target 标签的强大工具. 在每个数据抓取配置中, 可以定义多个 relabel 步骤, 他们将按照定义的顺序依次执行.
对于发现的每个 target, Prometheus 默认会执行如下操作.
-
job 的标签设定为所属的 job_name 的值.
-
__address__
标签的值为该 target 的套接字地址 -
instance 标签的值为
__address
的值. -
__scheme__
标签的值为抓取该 target 上标签时使用的协议, -
__metrics_path__
标签的值为抓取该 target 上的指标时使用的 URL 默认路径, 默认为/metrics
-
__param_<name>
标签的值为传递的URL参数中第一个名称为 <name> 的参数的值.
重新标记期间, 还可以使用该 target 上以 __meta_
开头的元标签
-
各服务发现机制为其target 添加的元标签会有所不同.
重新标记完成后, 该 target 上以 __
开头的所有标签都会被移除.
-
所在 relabel 的过程中 需要临时存储标签值, 则要使用
__tmp
标签名为前缀进行保存, 以避免同 Prometheus 的内建标签冲突.
-
替换标签值
-
replace: 首先将 source_labels 中指定的各标签的值进行串连, 而后将 regex 字段中的正则表达式对源标签值进行匹配判定, 若匹配, 则将 source_labels 字段中指定的标签的值替换为 replacement 字段中保存的值.
-
replacement 额按需引用保存 regex 中的某个值, 分组模式 匹配到的值默认保存整个 regex 匹配到的内容.
-
进行替换时, replacement 字段中指定标签的值也支持分组格式进行引用.
-
-
-
删除值 该出的每个指标名称对应一个 target
-
keep: regex 不能匹配到 target 上的 source_labels上的各标签的串联值时, 则删除该target.
-
drop: regex 能够匹配到 target 上的 source_labels 上的各标签的串连值时, 则删除该 target.
-
-
创建或者删除标签
-
labelmap: 将regex 对所有的 标签名 进行匹配判定, 而后将匹配到的标签的值赋给 replacement 字段指定的标签名之上, 通常用于去除匹配的标签名的一部分生成新标签.
-
labeldrop: 将 regex 对所有的标签名进行匹配判定, 能够匹配到的标签将从该 target 的标签集中删除.
-
labelkeep: 将 regex 对所有的标签名进行匹配判定, 不能匹配到的标签将从该 target 的标签中删除.
-
-
要确保在 labeldrop 和 labelkeep 操作后, 余下的标签集依然能唯一标识该指标.
replace
将三个源标签的值接顺序串联, 由指定的正则表达式进行匹配, 而后 replacement 引用模式匹配的结果, 并加以改造后, 将其赋值给 endpoint 标签.
- job_name: 'nodes' file_sd_configs: - files: - targets/node-*.yml refresh_interval: 1m relabel_configs: - source_labels: # 源字段 - __scheme__ - __address__ - __metrics_path__ regex: '(http|https)(.*)' # 根据正则匹配 target_label: endpoint # 新生成的键 replacement: "${1}://${2}" # 匹配后组成的值 separator: "" # 不使用任何符号分隔 默认为;
labelmap
将 regex 指定的模式对 target 上的所有标签进行匹配判定, 对于匹配到的标签名, 它将以该标签名中匹配的部分为前缀, 指定的 __name
为后缀生成新的标签名, 而新标签的值则与其源标签的值相同.
- job_name: 'nodes' file_sd_configs: - files: - targets/node-*.yml refresh_interval: 1m relabel_configs: - source_labels: # 源字段 - __scheme__ - __address__ - __metrics_path__ regex: '(http|https)(.*)' # 根据正则匹配 target_label: endpoint # 新生成的键 replacement: "${1}://${2}" # 匹配后组成的值 separator: "" # 不使用任何符号分隔 默认为; action: replace - regex: "(app)" # 匹配的值 replacement: ${1}_name # 新的 key name action: labelmap
labeldrop
删除 app 标签, 能匹配到则删除
- regex: "(app)" action: labeldrop
drop
删除 以 127 开头的 target.
- source_labels: - __address__ regex: "127.*" action: drop
对 metric 重新打标是在数据抓取之后动态重写 metric 标签的工具, 在每个数据抓取配置中, 可以定义多个 metric relabel 的步骤, 他们将按照定义的顺序依次执行.
-
删除不必要的指标
-
从指标中删除敏感或者不需要的标签
-
添加, 编辑或修改指标的标签值或标签格式.
-
对 metric 重新打标的配置格式与 target 重新打标的格式相同, 但前者要定义在专用的 metric_relabel_configs 字段中.
-
但是要注意的是, 更改或添加标签会创建新的时间序列.
-
应该明确的使用各个标签, 并尽可能保持不变, 以避免创建一个动态的数据环境.
-
标签时时间序列的唯一性约束, 删除标签并导致时间序列重复时, 可能会导致系统出现问题.
-
drop
在 source_labels 字段上, 通过指标上的元数据 __name__
引用指标名称, 而后由 regex 进行匹配判定, 可使用 drop action 删除匹配的指标, 或使用 keep action 仅保留匹配的指标.
在相应的job上, 在发现的各 target 之上, 删除以 'go_info' 为名称前缀的指标.
metric_relabel_configs: - source_labels: [ __name__ ] regex: 'go_info' action: drop