1 简介
1.1 联邦集群
类似与zabbix-proxy,起到一个分级收集的作用,要比pushgateway要方便很多,而且可以使用加密访问,有一定的安全性。
联邦允许一个prometheus server 从另外一个prometheus server 获取metrics。
此外联邦模式可以实现prometheus监控prometheus。遵循以下两点:
- 在同一个数据中心,每个prometheus监控其他的prometheus。
- 上下级模式。上一级的prometheus监控数据中心级别的prometheus。
1.2 联邦集群使用场景
1.2.1 跨数据中心
一个联邦设置可能由多个数据中心中的 Prometheus 服务器和一套全局 Prometheus 服务器组成。每个数据中心中部署的 Prometheus 服务器负责收集本区域内细粒度的数据(实例级别),全局 Prometheus 服务器从这些下层 Prometheus 服务器中收集和汇聚数据(任务级别),并存储聚合后的数据。这样就提供了一个聚合的全局视角和详细的本地视角。
1.2.2 跨服务
同一服务器里不同的服务监控指标用不同的prometheus联邦节点收集监控数据。
例如,一个运行多种服务的集群调度器可以暴露在集群上运行的服务实例的资源使用信息(例如内存和 CPU 使用率)。另一方面,运行在集群上的服务只需要暴露指定应用程序级别的服务指标。通常,这两种指标集分别被不同的 Prometheus 服务器抓取。利用联邦,监控服务级别指标的 Prometheus 服务器也可以从集群中 Prometheus 服务器拉取其特定服务的集群资源使用率指标,以便可以在该 Prometheus 服务器中使用这两组指标集。
2 服务搭建
2.1 子节点131机器
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["192.168.137.131:9090"]
- job_name: "node_exporter"
metrics_path: "/metrics"
static_configs:
- targets: ["192.168.137.131:9100"]
- job_name: "zookeeper_monitor"
metrics_path: "/metrics"
static_configs:
- targets: ["192.168.137.131:7000"]
#多增加了一个zookeeper的监控,主要为后面主节点match筛选
查询数据
2.2 子节点132机器
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["192.168.137.132:9090"]
- job_name: "node_exporter"
metrics_path: "/metrics"
static_configs:
- targets: ["192.168.137.132:9100"]
2.3 主节点128配置
scrape_configs:
- job_name: "federate"
scrape_interval: 10s
honor_labels: true #这是坑,必要
#用于解决标签冲突问题,有效值为true和false(false)
#设置为true,保留抓取的标签以忽略服务器自身的标签,就是覆盖原来的标签;
#设置为false,不覆盖原来的标签,而是在标签前加了一个“exporter_”前缀;
metrics_path: '/federate' #这是坑,必要
params:
'match[]':
- '{job="prometheus"}'#筛选数据job为prometheus的
- '{__name__=~"node.*"}'
static_configs:
- targets:
- '192.168.137.131:9090'
- '192.168.137.132:9090'
3 结果展示
Targets展示(job并不怎么友好)
查询数据,发现并没有找到jvm_buffer_pool_capacity_bytes数据
4 优化配置
4.1 正则匹配指标名jvm开头
'match[]':
- '{job="prometheus"}'
- '{__name__=~"node.*"}'
- '{__name__=~"jvm.*"}'
4.2 正则匹配job名称但是不包含jvm开头指标
params:
'match[]':
- '{job="prometheus"}'
- '{job=~"zookeeper.*",__name__!~"jvm.*"}'
- '{__name__=~"node.*"}'
#注意清空数据,不然容易被历史数据困扰
systemctl stop prometheus.service
rm -rf data/
systemctl restart prometheus.service
页面展示:
数据查询: