一、Relabeling机制

  1. 默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:

image.png

  • address:当前Target实例的访问地址:
  • scheme:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
  • metrics_path:采集目标服务访问地址的访问路径
  • _param:采集任务目标服务的中包含的请求参数
  1. 除此之外可以为Target添加自定义的标签,例如通过JSON配置文件,为Target实例添加了自定义标签env,
  2. Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。
  3. instance的标签对应到Target实例的address。 在采集样本数据之前,对Target实例的标签进行重写,这种机制在Prometheus被称为Relabeling。
  4. Prometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。

    二、使用replace/labelmap重写标签

  5. 使用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”

  1. labelmap会根据regex的定义去匹配Target实例所有标签的名称,并且以匹配到的内容为新的标签名称,其值作为新标签的值。
  2. 例如,在监控Kubernetes下所有的主机节点时,为将这些节点上定义的标签写入到样本中时,可以使用如下relabel_config配置:
  • jobname: ‘kubernetes-nodes’
    kubernetes_sd_configs:
    - role: node
    relabel_configs:
    - action: labelmap
    regex: __meta_kubernetes_node_label
    (.+)

    三、使用keep/drop过滤Target实例

  1. 当action设置为keep时,Prometheus会丢弃source_labels的值中没有匹配到regex正则表达式内容的Target实例,
  2. 当action设置为drop时,则会丢弃那些source_labels的值匹配到regex正则表达式内容的Target实例。可以简单理解为keep用于选择,而drop用于排除。
  3. 例如,如果我们只希望采集数据中心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