OpenShift Prometheus使用集群外部Promet
2020-11-25 本文已影响0人
潘晓华Michael
OpenShift 和 Prometheus
背景
大家知道OpenShfit官方通过Prometheus Operator可以快速构建高可用的监控告警平台,它不仅能够收集集群本身的监控指标,还可以通过ServiceMonitor扩展以监控应用自身的指标,实现单集群内部的统一监控。但是生产实践中,我们并不会只采用一个OpenShift部署应用,还会部署非容器应用,在非容器环境下也可能会部署Prometheus来监控相关服务(特别是现在Prometheus已经成为了监控的一个标配),甚至有可能会在不同的网络区部署多个集群,由于不同网络的隔离特性显然一组Prometheus是无法满足所有平台及应用的监控的。这就使得生产中会有很多套Prometheus集群需要管理与维护,查看监控指标也很分散,也就让我们想到必须采用一种办法能够将各处的指标统一收集,实现多集群多Prometheus服务的统一监控。
目前实现这种要求的方法主要有两个,一个是通过Prometheus联邦 Federate,另一个是通过Thanos。今天主要介绍集群外部如何使用Prometheus联邦机制收集OpenShift内部Prometheus服务的监控指标。
操作
实现其实很简单,主要就是配置外部Prometheus的prometheus.yml文件来实现Prometheus联邦。具体配置如下,后面有相关重要配置的详细说明
global:
evaluation_interval: 15s
scrape_interval: 15s
scrape_timeout: 10s
- job_name: prometheus_test
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{__name__=~".+"}'
scheme: https
tls_config:
insecure_skip_verify: true
#basic_auth:
# username: 'internal'
# password: <PASSWORD>
bearer_token: <TOKEN>
static_configs:
- targets: ['prometheus-k8s-openshift-monitoring.app.group.domain:443']
labels:
env: test
-
'match[]'= '{__name__=~".+"}'
表示所有的指标都收集,如果只需要收集部分的话,可以通过类似- '{job="node-exporter"}'
格式筛选Label
指定。 - 除了使用bearer_token的方式认证,也可以使用basic_auth的方式认证,openshift默认安装的Prometheus支持这两种方式认证,basic_auth的用户名:
internal
与密码在secret grafana-datasources中,具体获取方式如下:
$ #用户名为 internal
$ #获取密码脚本
$ oc get secret grafana-datasources -o yaml -n openshift-monitoring | grep prometheus | awk '{print $2}' | base64 -d | grep basicAuthPassword | awk F\" '{print $4}'
- <TOKEN>通过创建一个serviceaccount来获取它的Token
apiVersion: v1
kind: ServiceAccount
metadata:
name: prom-fed
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prom-fed
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: prom-fed
namespace: kube-system
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep prom-fed | awk '{print $1}')
监控Targets
联邦Prometheus上展示监控指标