date: 2020-10-16title: Prometheus联邦集群 #标题
tags: 监控 #标签
categories: 监控 # 分类
Prometheus并没有提供什么较完美的高可用集群模式,本文所说的联邦集群,也仅仅是将多个Prometheus server节点采集到的数据,整合到一个Prometheus节点上。
关于如何选择Prometheus高可用方案,可以参考gitbook。
部署node-export
部署几个node-export采集服务器的基本资源指标,已备后续测试。
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
$ tar zxf node_exporter-1.0.1.linux-amd64.tar.gz -C /opt/
$ ln -sf /opt/node_exporter-1.0.1.linux-amd64 /opt/node_exporter
$ /opt/node_exporter/node_exporter &
$ ss -lnput | grep 9100 # 确定端口在监听
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实例中获取数据实际上并没有任何差异。
$ cat /opt/prometheus-2.20.1.linux-amd64/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "down.yml"
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'federate'
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
- '{__name__=~"node.*"}'
static_configs:
- targets:
- '192.168.20.3:9090'
- '192.168.20.4:9090'
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['192.168.20.2:9100']
为了有效的减少不必要的时间序列,通过params参数可以用于指定只获取某些时间序列的样本数据,例如:
"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的配置文件
$ cat /opt/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['192.168.20.3:9100']
node2和node3,或者说以后又加入了新的Prometheus,配置文件都和上面差不多,只需要将你要收集的指标收集起来即可,然后访问node2或node3,确认资源指标采集正常,如下:
查看node1的target列表状态
访问node1的Prometheus的targets列表,看到如下:
federate中包含了我们另外两个Prometheus,至此联邦完成。