date: 2020-10-16title: Prometheus联邦集群 #标题
tags: 监控 #标签
categories: 监控 # 分类

Prometheus并没有提供什么较完美的高可用集群模式,本文所说的联邦集群,也仅仅是将多个Prometheus server节点采集到的数据,整合到一个Prometheus节点上。

关于如何选择Prometheus高可用方案,可以参考gitbook

部署node-export

部署几个node-export采集服务器的基本资源指标,已备后续测试。

  1. $ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
  2. $ tar zxf node_exporter-1.0.1.linux-amd64.tar.gz -C /opt/
  3. $ ln -sf /opt/node_exporter-1.0.1.linux-amd64 /opt/node_exporter
  4. $ /opt/node_exporter/node_exporter &
  5. $ ss -lnput | grep 9100 # 确定端口在监听
  6. tcp LISTEN 0 128 [::]:9100 [::]:* users:(("node_exporter",pid=7352,fd=3))

部署多节点Prometheus

在你需要组成联邦集群的机器上,参考博文Prometheus部署多台Prometheus服务器(无需关注其配置文件怎么写,我们下面会修改各个Prometheus的配置文件)。

假设我这里部署了三个Prometheus节点,分别是node1、node2、node3,现在将node1作为Prometheus的中心节点,node2和node3作为收集数据的Prometheus server。

修改node1配置文件

联邦集群的核心在于每一个Prometheus Server都包含一个用于获取当前实例中监控样本的接口/federate。对于中心Prometheus Server而言,无论是从其他的Prometheus实例还是Exporter实例中获取数据实际上并没有任何差异。

  1. $ cat /opt/prometheus-2.20.1.linux-amd64/prometheus.yml
  2. global:
  3. scrape_interval: 15s
  4. evaluation_interval: 15s
  5. rule_files:
  6. - "down.yml"
  7. # - "first_rules.yml"
  8. # - "second_rules.yml"
  9. scrape_configs:
  10. - job_name: 'federate'
  11. honor_labels: true
  12. metrics_path: '/federate'
  13. params:
  14. 'match[]':
  15. - '{job="prometheus"}'
  16. - '{__name__=~"job:.*"}'
  17. - '{__name__=~"node.*"}'
  18. static_configs:
  19. - targets:
  20. - '192.168.20.3:9090'
  21. - '192.168.20.4:9090'
  22. - job_name: 'node'
  23. scrape_interval: 8s
  24. static_configs:
  25. - targets: ['192.168.20.2:9100']

为了有效的减少不必要的时间序列,通过params参数可以用于指定只获取某些时间序列的样本数据,例如:

  1. "http://192.168.77.11:9090/federate?match[]={job%3D"prometheus"}&match[]={__name__%3D~"job%3A.*"}&match[]={__name__%3D~"node.*"}"

通过URL中的match[]参数指定我们可以指定需要获取的时间序列。match[]参数必须是一个瞬时向量选择器,例如up或者{job=”api-server”}。配置多个match[]参数,用于获取多组时间序列的监控数据。

horborlabels配置true可以确保当采集到的监控指标冲突时,能够自动忽略冲突的监控数据。如果为false时,prometheus会自动将冲突的标签替换为”exported“的形式。

修改node2和node3的配置文件

  1. $ cat /opt/prometheus/prometheus.yml
  2. global:
  3. scrape_interval: 15s
  4. evaluation_interval: 15s
  5. alerting:
  6. alertmanagers:
  7. - static_configs:
  8. - targets:
  9. # - alertmanager:9093
  10. rule_files:
  11. # - "first_rules.yml"
  12. # - "second_rules.yml"
  13. scrape_configs:
  14. - job_name: 'prometheus'
  15. static_configs:
  16. - targets: ['192.168.20.3:9100']

node2和node3,或者说以后又加入了新的Prometheus,配置文件都和上面差不多,只需要将你要收集的指标收集起来即可,然后访问node2或node3,确认资源指标采集正常,如下:

Prometheus联邦集群 - 图1

查看node1的target列表状态

访问node1的Prometheus的targets列表,看到如下:

Prometheus联邦集群 - 图2

federate中包含了我们另外两个Prometheus,至此联邦完成。