使用Prometheus Operator监控应用

监控OpenShift集群

在OpenShift 4 的控制台中已经在集成了一个Prometheus运行环境,这个内置的Prometheus环境主要是用来监控OpenShift集群资源的,它主要监控以下组件。

- CoreDNS

- Elasticsearch

- etcd

- Fluentd

- HAProxy

- Image registry

- Kubelets

- Kubernetes apiserver

- Kubernetes controller manager

- Kubernetes scheduler

- Metering

- OpenShift apiserver

- OpenShift controller manager

- Operator Lifecycle Manager (OLM)

- Telemeter client

我们还可以在OpenShift控制台的Monitoring-> Metrics中搜索监控指标并显示监控数据(可点击“Insert Example Query”按钮,然后查看“sum(sort_desc(sum_over_time(ALERTS{alertstate="firing"}[24h]))) by (alertname)”监控指标),还可通过下图中的“Prometheus UI”进入其自己的访问页面。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

还可执行以下命令获取到Prometheus、Grafna、AlertManager和Thanos的访问地址。

<code>$ oc -n openshift-monitoring get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
alertmanager-main alertmanager-main-openshift-monitoring.apps.cluster-beijing-0f11.beijing-0f11.example.opentlc.com alertmanager-main web reencrypt/Redirect None
grafana grafana-openshift-monitoring.apps.cluster-beijing-0f11.beijing-0f11.example.opentlc.com grafana https reencrypt/Redirect None
prometheus-k8s prometheus-k8s-openshift-monitoring.apps.cluster-beijing-0f11.beijing-0f11.example.opentlc.com prometheus-k8s web reencrypt/Redirect None
thanos-querier thanos-querier-openshift-monitoring.apps.cluster-beijing-0f11.beijing-0f11.example.opentlc.com thanos-querier web reencrypt/Redirect None/<code>

监控应用

在OpenShift 4.x中我们使用的是Operator来完成Prometheus环境的创建、管理和维护的相关操作(本文参考了https://medium.com/faun/using-the-operator-lifecycle-manager-to-deploy-prometheus-on-openshift-cd2f3abb3511)。

以下是本文Prometheus、ServiceMonitor和被监控Service的关系:

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

部署被监控的应用

1. 新建运行应用的monitored-apps项目。

<code>$ oc new-project monitored-apps/<code>

2. 在本地创建包含以下内容的example-app.yaml文件

<code>apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: example-app
spec:
replicas: 3
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-app
image: fabxc/instrumented_app
ports:
- name: web
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: example-app
labels:
app: example-app
team: backend
spec:
selector:
app: example-app
ports:
- name: web
port: 8080/<code>

3. 执行命令创建应用对象(Deployment、Serivce、Route),在Pod运行正常后查看应用的metrics监控指标。

<code>$ oc create -f example-app.yaml
$ oc expose svc/example-app
$ oc get pod
$ curl http://$(oc get route example-app |awk 'NR==2 {print $2}')/metrics/<code>

通过Operator安装并配置Prometheus

1. 创建运行Prometheus的项目(图中项目名为“monitoring”,在这里改为“myprometheus”)。

<code>$ oc new-project myprometheus/<code>

2. 用集群管理员访问OpenShift的Administrator视图,然后点击左侧Operators的Operatorhub菜单栏,此时确认当前项目是myprometheus。在Operatorhub页面中找到Prometheus Operator后进入,随后在右滑界面点击Install,接受缺省的配置安装即可。安装成功后可在Installed Operator中显示以下界面,进入上图的Prometheus Operator。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

3. 在Overview中点击Prometheus区域的Create Instance链接创建Prometheus环境。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

4. 在Create Prometheus页面填入以下YAML配置,然后Create。

<code>apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus-server
labels:
prometheus: k8s
namespace: myprometheus
spec:
replicas: 2
serviceAccountName: prometheus-k8s
securityContext: {}
serviceMonitorSelector:

matchExpressions:
- key: k8s-app
operator: Exists
ruleSelector:
matchLabels:
role: prometheus-rulefiles
prometheus: k8s
alerting:
alertmanagers:
- namespace: myprometheus
name: alertmanager-main
port: web/<code>

5. 进入名为prometheus-server的Prometheus配置的Resources页面查看部署资源和状态。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

6. 在Overview中点击Service Monitor区域的Create Instance链接,然后在Create Service Monitor界面填入以下YAML创建Service Monitor对象。

<code>apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: backend-monitor
labels:
k8s-app: backend-monitor
namespace: myprometheus
spec:
namespaceSelector:
any: true
selector:
matchLabels:
team: backend
endpoints:
- interval: 30s
port: web/<code>

7. 由于Prometheus和被监控应用是运行在2个不用的项目,需要执行以下任意一行即可为myprometheus项目赋于view权限。其中第一行由于使用了集群角色,因此没有指定目标项目;第二行赋予的只是项目级权限,因此指定了monitored-apps项目名。

<code>oc adm policy add-cluster-role-to-user view system:serviceaccount:myprometheus:prometheus-k8s
oc adm policy add-role-to-user view system:serviceaccount:myprometheus:prometheus-k8s -n monitored-apps/<code>

8. 执行命令,为Prometheus生成Route。

<code>$ oc expose svc/prometheus-operated -n myprometheus
$ oc get route -n myprometheus
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
prometheus-operated prometheus-operated-myprometheus.apps.cluster-beijing-511e.beijing-511e.example.opentlc.com prometheus-operated web None/<code>

9. 用浏览器打开Prometheus的Route的地址。先点击上方菜单中Status的Targets查看监控目标,由于example-app是运行在3个Pod中,所以监控目标目标为3行。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用

10. 点击上方菜单的Graph,然后在Expression中填写“codelab_api_http_requests_in_progress”,最后点击Execute。此时可以切换到Graph视图,界面将显示所有和指标相关的监控图形记录。

OpenShift 4 HOL (12) - 使用Prometheus Operator监控应用


分享到:


相關文章: