Hands-on Lab (11-2) - 4.3 新特性:用内置的Prometheus监控应用

文章目录

    • 配置Prometheus环境
    • 部署被监控应用
    • 创建收集指标的角色,并为用户赋予该角色
    • 设置应用监控指标
    • 设置告警规则
    • 赋予任意指定用户查看监控指标
    • 查看Prometheus监控到的应用定制指标

OpenShift 4.3 之前,其内置Prometheus只能监控OpenShift集群内部对象。OpenShift 4.3 提供了一个新功能,就是可以扩展内置的Prometheus,使之前监控应用的监控指标。实现方式如下:

配置Prometheus环境

  1. 创建内容如下的config.yaml文件,它将在openshift-monitoring项目中创建一个ConfigMap对象,其中允许使用techPreviewUserWorkload功能。
apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-monitoring-config
  namespace: openshift-monitoring
data:
  config.yaml: |
    techPreviewUserWorkload:
      enabled: true
  1. 执行命令创建ConfigMap对象。
$ oc apply -f config.yaml
  1. 查看openshift-user-workload-monitoring项目中增加的Pod,这3个Pod就是OpenShift用来对项目级的应用进行监控的Prometheus环境。
$ oc -n openshift-user-workload-monitoring get pod
NAME                                   READY   STATUS    RESTARTS   AGE
prometheus-operator-6585b9cfd9-7c2d9   1/1     Running   0          27s
prometheus-user-workload-0             5/5     Running   1          17s
prometheus-user-workload-1             5/5     Running   1          16s

部署被监控应用

  1. 创建内容如下的prometheus-example-app.yaml文件,它会在名为ns1的项目中创建被监控应用的资源。其中应用级定制的是名为version的监控指标。
apiVersion: v1
kind: Namespace
metadata:
  name: ns1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: prometheus-example-app
  name: prometheus-example-app
  namespace: ns1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-example-app
  template:
    metadata:
      labels:
        app: prometheus-example-app
    spec:
      containers:
      - image: quay.io/brancz/prometheus-example-app:v0.2.0
        imagePullPolicy: IfNotPresent
        name: prometheus-example-app
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: prometheus-example-app
  name: prometheus-example-app
  namespace: ns1
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    name: web
  selector:
    app: prometheus-example-app
  type: ClusterIP
  1. 执行命令创建应用资源,然后确认应用Pod运行情况。
$ oc apply -f prometheus-example-app.yaml
$ oc -n ns1 get pod
NAME                                      READY     STATUS    RESTARTS   AGE
prometheus-example-app-7857545cb7-sbgwq   1/1       Running   0          81m

创建收集指标的角色,并为用户赋予该角色

  1. 创建内容如下的custom-metrics-role.yaml文件。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: monitor-crd-edit
rules:
- apiGroups: ["monitoring.coreos.com"]
  resources: ["prometheusrules", "servicemonitors", "podmonitors"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
  1. 创建这个ClusterRole。
$ oc apply -f custom-metrics-role.yaml
  1. 进入OpenShift 4.3控制台的Administrator视图,进入User Management → Role Bindings,然后点击“Create Binding”按钮。
  2. 在Create Role Binding页面中先将 Binding Type 设为 Namespace Role Binding;然后提供一个Name(例如my-role-binding-monitor);再为Namespace选择ns1的项目(刚刚应用部署到的项目);随后为Role Name选择monitor-crd-edit;最后为Subject选择User,并且为Subject Name提供一个已有的OpenShift用户名。
  3. 点击Create按钮创建项目级RoleBinding对象。然后可以进入OpenShift的Developer视图,确认在测试应用所在的ns1项目中可以看到上一步创建的名为my-role-binding-monitor的RoleBinding对象。
    Hands-on Lab (11-2) - 4.3 新特性:用内置的Prometheus监控应用_第1张图片

设置应用监控指标

  1. 创建内容如下的example-app-service-monitor.yaml文件。它定义了一个ServiceMonitor对象,其中包括监控应用、监控时间间隔等配置。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: prometheus-example-monitor
  name: prometheus-example-monitor
  namespace: ns1
spec:
  endpoints:
  - interval: 30s
    port: web
    scheme: http
  selector:
    matchLabels:
      app: prometheus-example-app
  1. 执行命令创建ServiceMonitor对象,然后查看它的状态。
$ oc apply -f example-app-service-monitor.yaml
$ oc -n ns1 get servicemonitor
NAME                         AGE
prometheus-example-monitor   81m

设置告警规则

  1. 创建内容如下的example-app-alerting-rule.yaml的文件。它创建了一个PrometheusRule对象,该PrometheusRule会在prometheus-example-app应用的version为0的时候发出告警。
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: example-alert
  namespace: ns1
spec:
  groups:
  - name: example
    rules:
    - alert: VersionAlert
      expr: version{job="prometheus-example-app"} == 0
  1. 执行命令,创建PrometheusRule对象。
$ oc apply -f example-app-alerting-rule.yaml

赋予任意指定用户查看监控指标

  1. 缺省情况下,监控的应用指标数据只能是OpenShift集群管理员身份的用户查看到。执行以下命令,让ANY_USERNAME用户能查看到ns1项目的资源。
$ oc policy add-role-to-user view <ANY_USERNAME> -n ns1
  1. 以上命令也可通过在OpenShift的Developer视图中的Advanced → Project Access页面里完成,点击Add Addess链接,然后指定Name和Rold即可。
    Hands-on Lab (11-2) - 4.3 新特性:用内置的Prometheus监控应用_第2张图片

查看Prometheus监控到的应用定制指标

  1. 在OpenShift的Developer视图中进入Monitoring → Metrics页面,在指标查询框中输入version,然后点击Run Queries按钮。此时就可以在界面中看到应用定制指标version的数值。
    Hands-on Lab (11-2) - 4.3 新特性:用内置的Prometheus监控应用_第3张图片

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