1. 初探--prometheus调研 (7)

  在consul_sd_configs定义当中通过server定义了Consul服务的访问地址,services则定义了当前需要发现哪些类型服务实例的信息,这里限定了只获取node_exportercadvisor的服务实例信息。 

4.4服务发现与Relabel

  如何过滤选择Target实例?relabel

  目前为止,只要是注册到Consul上的Node Exporter或者cAdvisor实例是可以自动添加到PrometheusTarget当中。现在请考虑下面的场景:

 

 

 

  对于线上环境我们可能会划分为:dev, stage, prod不同的集群。每一个集群运行多个主机节点,每个服务器节点上运行一个Node Exporter实例。Node Exporter实例会自动测试到服务注册中心Consul服务当中,Prometheus会根据Consul返回的Node Exporter实例信息产生Target列表,并且向这些Target轮训数据。

  然而,如果我们可能还需要

  1.需要按照不同的环境dev, stage, prod聚合监控数据?

  2.对于研发团队而言,我可能只关心dev环境的监控数据?

  3.为每一个团队单独搭建一个Prometheus Server? 如何让不同团队的Prometheus Server采集不同的环境监控数据?

  Relabel可以在Prometheus采集数据之前,通过Target实例的Metadata信息,动态重新写入Label的值。除此之外,我们还能根据Target实例的Metadata信息选择是否采集或者忽略该Target实例。

  在默认情况下,我们从所有环境的Node Exporter中采集到的主机指标如下:

1

 

node_cpu{cpu="cpu0",instance="172.21.0.3:9100",job="consul_sd",mode="guest"}

 

 

  基于Consul动态发现的Target实例,具有以下Metadata信息:

__meta_consul_address: consul地址

__meta_consul_dc: consul中服务所在的数据中心

__meta_consul_metadata_: 服务的metadata

__meta_consul_node: 服务所在consul节点的信息

__meta_consul_service_address: 服务访问地址

__meta_consul_service_id: 服务ID

__meta_consul_service_port: 服务端口

__meta_consul_service: 服务名称

__meta_consul_tags: 服务包含的标签信息

  在Prometheus UI中,也可以直接查看targetmetadata信息

  这里我们使用__meta_consul_dc信息来标记当前target所在的data center。并且通过regex来匹配source_label的值,使用replacement来选择regex表达式匹配到的mach group。通过action来告诉prometheus在采集数据之前,需要将replacement的内容写入到target_label dc当中

1
2
3
4
5
6
7
8

 

scrape_configs:
  - job_name: consul_sd
    relabel_configs:
    - source_labels:  ["__meta_consul_dc"]
      regex: "(.*)"
      replacement: $1
      action: replace
      target_label: "dc"

 

  对于直接保留标签的值时,也可以简化为:

1
2

 

- source_labels:  ["__meta_consul_dc"]
  target_label: "dc"

 

 

  查询Prometheus查询监控数据,所有metrics都被写入了所在的数据中心标签dc

1

 

node_cpu{cpu="cpu0",dc="dc1",instance="172.21.0.6:9100",job="consul_sd",mode="guest"} 0

 

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydwfz.html