Hands-on Lab (11-1) - 使用Prometheus Operator监控应用

文章目录

  • 监控OpenShift集群
  • 监控应用
    • 部署被监控的应用
    • 通过Operator安装并配置Prometheus

监控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”进入其自己的访问页面。
Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第1张图片
还可执行以下命令获取到Prometheus、Grafna、AlertManager和Thanos的访问地址。

$ 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

监控应用

在《OpenShift 4.3 之 Quarkus(3)用独立的Prometheus监控Quarkus应用》一文中我们介绍了如何通过手动的方式在项目中创建Prometheus运行环境。在OpenShift 4.x中我们使用的是Operator来完成Prometheus环境的创建、管理和维护的相关操作(本文参考了https://medium.com/faun/using-the-operator-lifecycle-manager-to-deploy-prometheus-on-openshift-cd2f3abb3511)。

以下是本文Prometheus、ServiceMonitor和被监控Service的关系:
Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第2张图片

部署被监控的应用

  1. 新建运行应用的monitored-apps项目。
$ oc new-project monitored-apps
  1. 在本地创建包含以下内容的example-app.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
  labels:
    app: example-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: example-app
  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
  1. 执行命令创建应用对象(Deployment、Serivce、Route),在Pod运行正常后查看应用的metrics监控指标。
$ 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

通过Operator安装并配置Prometheus

  1. 创建运行Prometheus的项目(图中项目名为“monitoring”,在这里改为“myprometheus”)。
$ oc new-project myprometheus
  1. 用集群管理员访问OpenShift的Administrator视图,然后点击左侧Operators的Operatorhub菜单栏,此时确认当前项目是myprometheus。在Operatorhub页面中找到Prometheus Operator后进入,随后在右滑界面点击Install,接受缺省的配置安装即可。安装成功后可在Installed Operator中显示以下界面,进入上图的Prometheus Operator。
    Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第3张图片
  2. 在Overview中点击Prometheus区域的Create Instance链接创建Prometheus环境。
    Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第4张图片
  3. 在Create Prometheus页面填入以下YAML配置,然后Create。
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
  1. 进入名为prometheus-server的Prometheus配置的Resources页面查看部署资源和状态。
    Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第5张图片

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

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
  1. 由于Prometheus和被监控应用是运行在2个不用的项目,需要执行以下任意一行即可为myprometheus项目赋于view权限。其中第一行由于使用了集群角色,因此没有指定目标项目;第二行赋予的只是项目级权限,因此指定了monitored-apps项目名。
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
  1. 执行命令,为Prometheus生成Route。
$ 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
  1. 用浏览器打开Prometheus的Route的地址。先点击上方菜单中Status的Targets查看监控目标,由于example-app是运行在3个Pod中,所以监控目标目标为3行。
    Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第6张图片
  2. 点击上方菜单的Graph,然后在Expression中填写“codelab_api_http_requests_in_progress”,最后点击Execute。此时可以切换到Graph视图,界面将显示所有和指标相关的监控图形记录。Hands-on Lab (11-1) - 使用Prometheus Operator监控应用_第7张图片

你可能感兴趣的:(prometheus,Ops,OpenShift,4)