OpenShift-Prometheus使用集群外部Prometheus级联的方法实现多集群统一监控告警

背景
大家知道OpenShfit官方通过Prometheus Operator可以快速构建高可用的监控告警平台,它不仅能够收集集群本身的监控指标,还可以通过ServiceMonitor扩展以监控应用自身的指标,实现单集群内部的统一监控。但是生产实践中,我们并不会只采用一个OpenShift部署应用,还会部署非容器应用,在非容器环境下也可能会部署Prometheus来监控相关服务(特别是现在Prometheus已经成为了监控的一个标配),甚至有可能会在不同的网络区部署多个集群,由于不同网络的隔离特性显然一组Prometheus是无法满足所有平台及应用的监控的。这就使得生产中会有很多套Prometheus集群需要管理与维护,查看监控指标也很分散,也就让我们想到必须采用一种办法能够将各处的指标统一收集,实现多集群多Prometheus服务的统一监控。
目前实现这种要求的方法主要有两个,一个是通过Prometheus联邦 Federate,另一个是通过Thanos。今天主要介绍集群外部如何使用Prometheus联邦机制收集OpenShift内部Prometheus服务的监控指标。
操作
实现其实很简单,主要就是配置外部Prometheus的prometheus.yml文件来实现Prometheus联邦。具体配置如下,后面有相关重要配置的详细说明
1 | global: |
'match[]'= '{__name__=~".+"}'表示所有的指标都收集,如果只需要收集部分的话,可以通过类似- '{job="node-exporter"}'格式筛选Label指定。- 除了使用bearer_token的方式认证,也可以使用basic_auth的方式认证,openshift默认安装的Prometheus支持这两种方式认证,basic_auth的用户名:
internal与密码在secret grafana-datasources中,具体获取方式如下:
1 | #用户名为 internal |
通过创建一个serviceaccount来获取它的Token
1 | apiVersion: v1 |
1 | kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep prom-fed | awk '{print $1}') |


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michael Blog!

