一、Relabeling机制
- 默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:
- address:当前Target实例的访问地址
: - scheme:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
- metrics_path:采集目标服务访问地址的访问路径
- _param
:采集任务目标服务的中包含的请求参数
- 除此之外可以为Target添加自定义的标签,例如通过JSON配置文件,为Target实例添加了自定义标签env,
- Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。
- instance的标签对应到Target实例的address。 在采集样本数据之前,对Target实例的标签进行重写,这种机制在Prometheus被称为Relabeling。
Prometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。
二、使用replace/labelmap重写标签
使用relabel重写标签
- 在使用consul时,在每一个采集任务的配置中可以添加多个relabel_config配置,一个最简单的relabel配置如下:
scrape_configs:
- job_name: node_exporter
consul_sd_configs:
- server: localhost:8500
services:
- node_exporter
relabel_configs:
- source_labels: [“__meta_consul_dc”]
target_label: “dc”
- labelmap会根据regex的定义去匹配Target实例所有标签的名称,并且以匹配到的内容为新的标签名称,其值作为新标签的值。
- 例如,在监控Kubernetes下所有的主机节点时,为将这些节点上定义的标签写入到样本中时,可以使用如下relabel_config配置:
- jobname: ‘kubernetes-nodes’
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label(.+)三、使用keep/drop过滤Target实例
- 当action设置为keep时,Prometheus会丢弃source_labels的值中没有匹配到regex正则表达式内容的Target实例,
- 当action设置为drop时,则会丢弃那些source_labels的值匹配到regex正则表达式内容的Target实例。可以简单理解为keep用于选择,而drop用于排除。
- 例如,如果我们只希望采集数据中心dc1中的Node Exporter实例的样本数据,那么可以使用如下配置:
scrape_configs:
- job_name: node_exporter
consul_sd_configs:
- server: localhost:8500
services:
- node_exporter
relabel_configs:
- source_labels: [“__meta_consul_dc”]
regex: “dc1”
action: keep