https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
relabel_configs :允许在采集之前对任何目标及其标签进行修改 重新标签的意义? • 重命名标签名 • 删除标签 • 过滤目标 action:重新标签动作 • replace:默认,通过regex匹配source_label的值,使用replacement来引用表达式匹配的分组 • keep:删除regex与连接不匹配的目标 source_labels • drop:删除regex与连接匹配的目标 source_labels • labeldrop:删除regex匹配的标签 • labelkeep:删除regex不匹配的标签 • hashmod:设置target_label为modulus连接的哈希值source_labels • labelmap:匹配regex所有标签名称。然后复制匹配标签的值进行分组,replacement分组引用(${1},${2},…)替代
Prometheus的Relabeling机制
在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:
默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:
__address__:当前Target实例的访问地址<host>:<port>
__scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
__metrics_path__:采集目标服务访问地址的访问路径
__param_<name>:采集任务目标服务的中包含的请求参数
一般来说,Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。不过这里有一些例外,例如,我们会发现所有通过Prometheus采集的样本数据中都会包含一个名为instance的标签,该标签的内容对应到Target实例的__address__。 这里实际上是发生了一次标签的重写处理。
这种发生在采集样本数据之前,对Target实例的标签进行重写的机制在Prometheus被称为Relabeling。
- job_name: 'jenkins' scheme: http basic_auth: username: admin password: Kxqv!fada2f static_configs: - targets: ['47.51.12.12:61921'] labels: afasd: bj zcxvzx: afd
scrape_configs: - job_name: 'bj' static_configs: - targets: ['localhost:9090'] relabel_configs: - action: replace source_labels: ['job'] regex: (.*) replacement: $1 target_label: idc