Rancher2.6全新Monitoring快速入門

語言: CN / TW / HK

作者簡介
萬紹遠,CNCF 基金會官方認證 Kubernetes CKA&CKS 工程師,雲原生解決方案架構師。對 ceph、Openstack、Kubernetes、prometheus 技術和其他雲原生相關技術有較深入的研究。參與設計並實施過多個金融、保險、製造業等多個行業 IaaS 和 PaaS 平臺設計和應用雲原生改造指導。

軟體 版本
Rancher 2.6.4
Kubernetes 1.22.7+rke2r2

概 述

Rancher 2.6 監控啟用方式與之前版本存在較大差異,屬於原生的 Prometheus-Operator,通過抽象化一些 Kubernetes CRD 資源,可以更好地把監控告警功能整合起來,提高易用性。Prometheus-operator 包括以下 CRD 資源物件:

  • PrometheusRules:定義告警規則
  • Alert Managers:Altermanager 啟動 CRD,用於 Altermanager 啟動副本
  • Receivers:配置告警接收媒介 CRD
  • Routers:將告警規則和告警媒介進行匹配
  • ServiceMonitor:定義 Prometheus 採集的監控指標地址
  • Pod Monitor:更細粒化的對 POD 進行監控

配置使用

啟用監控

切換到對應叢集,選擇左下角 clusterTools 啟用 Prometheus:

在這裡插入圖片描述

部署到 System 專案中,勾選自定義 helm 引數:

根據實際需求修改部署要求:

如果需要對接遠端儲存(如 infuxdb),就需要修改 yaml 配置,並配置指向 influxdb:

remoteRead:
  - url: http://192.168.0.7:8086/api/v1/prom/read?db=prometheusremoteWrite:
  - url: http://192.168.0.7:8086/api/v1/prom/write?db=prometheus

預設 node-exporter 資源 limit 配置較低,長時間執行後容易被 OOM KILL 掉,需要修改預設的記憶體限制為 150Mi:

 podLabels:
    jobLabel: node-exporter
  resources:
    limits:
      cpu: 200m
      memory: 150Mi
    requests:
      cpu: 100m
      memory: 30Mi

可以點選如下頁面進入對應的元件配置頁面,如:

  • Altermanager:進入的是告警資訊檢視頁
  • Grafana:檢視監控資料圖示
  • Prometheus Graph:Prometheus 表示式執行頁
  • Prometheus Rules:檢視 Prometheus 配置的告警表示式頁
  • Prometheus Targets:監控採集資料採集

在叢集概覽頁可以看見對應的指標監控項:

叢集層面:

  • cpu 使用情況
  • 叢集節點負載情況
  • 記憶體使用情況
  • 磁碟使用率
  • 磁碟 IO
  • Network Traffic
  • Network IO

Kubernetes 元件:

  • ApiServer 請求速率
  • Controller-Manager 佇列深度
  • POD scheduler 排程狀態
  • Ingress-Controller 連線數

ETCD 監控:

  • Leader 選舉狀態
  • Leader 選舉次數
  • GRPC Client Traffic
  • ETCD 資料使用容量
  • Active Streams
  • RPC 速率
  • 磁碟資料同步時間

同時在每個部署的 POD 也都包含對應的監控項:

配置自定義監控指標

預設啟用監控會會自動新增一些 ServiceMonitor 監控規則和 Prometheus Rules 告警規則,主要是針對平臺元件監控和叢集內節點狀態監控和告警。

如果這些監控指標不滿足你的需求,你可以手動新增。比如針對 java 應用的 jmx 監控,Jmx 有官方的 prometheus-export,我們只需要將其 jar 包下載讓 java 應用程式載入 jar 包和載入其配置即可。

以一個應用為例,整體流程如下:

  • 利用 JMX exporter,在 Java 程序內啟動一個小型的 Http server
  • 配置 Prometheus 抓取那個 Http server 提供的 metrics
  • 配置 Grafana 連線 Prometheus,配置 Dashboard

首先,需要建立資料夾:

mkdir  -p /Dockerfile/jmx-exporter/

然後,下載 jmx-export.jar 包放到這個目錄:

https://github.com/prometheus/jmx_exporter
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar

隨後,編寫 jvm-export 配置檔案放置/root/jmx-exporter/目錄,建立 simple-config.yml 內容如下:

---
rules:
- pattern: ".*"

這裡意思表示將全部監控資訊抓取出來。將 jvm-export 整合到 tomcat 中,重新編寫 Dockerfile:

FROM tomcat
COPY ./jmx_prometheus_javaagent-0.12.0.jar /jmx_prometheus_javaagent-0.12.0.jar
ENV CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.12.0.jar=6060:/jmx-exporter/simple-config.yml"

重新 docker build,build 後執行以下 docker run 命令可以檢視收集的監控指標,這裡 6060 埠就是我們的 jmx-export 埠:

docker build -t tomcat:v1.0 .
docker run -itd -p 8080:8080 -p 6060:6060 tomcat:v1.0

訪問檢視:http://host_ip:6060

部署到 Rancher 平臺:

給 Service 打上 label,用於 ServiceMonitor 關聯:

kubectl label  svc tomcat app=tomcat

建立 ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: tomcat-app  namespace: defaultspec:
  endpoints:
  - port: exporter
  selector:
    matchLabels:
      app: tomcat

建立成功後通過 Prometheus 可以檢視到對應的 Target:

對應的監控指標也已經抓取:

進入 grafana 頁面新增 dashboard,預設賬號密碼為 admin/prom-operator:

新增 dashboard,輸入 dashboard-id,8878,離線環境需要提前將 Dashboard 下載好,通過 json 方式匯入:

配置告警

PrometheusRule 用於定義告警規則,預設已經包含針對平臺元件和節點的一些告警策略。可以通過配置 Root 和 Receivers 配置告警媒介將對應告警通知到相應的人員。採用 Routing Tree 的告警結構能夠快速的將告警進行分類,然後傳送到指定的人員進行處理。

Receivers 配置告警媒介,例如填寫 SMTP 地址和配置的賬號/密碼,預設接收的郵箱:

Routes 配置用於告警媒介和告警規則進行匹配,預設建立的 root 規則,用於匹配全部的告警規則,配置上對應建立的告警媒介:

在這裡插入圖片描述

此時全部的告警規則都會發送給配置的告警媒介,若要細分告警規則建立新的 Routes 通過 Label 與 Prometheus Rules 內對應的 Alter name 對接。

如匹配 alert:etcdNoLeader 這條告警規則:

在這裡插入圖片描述

也可以使用正則表示式匹配多個規則如:

Grouping 配置主要用於告警規則分類、抑制避免大量無用告警的干擾:

  • group_by:用於配置告警分組,達到告警抑制效果,同一個 group 的告警只會聚合到一起傳送一次。例如 host01 上運行了資料庫,那麼對應的告警包含了 host down、mysql down。他們配置在一個 group 內,那麼如果 host down 了對應的 mysql 肯定也是 down 了,那麼因為他們配置在一個 group 中,所以 host down 和 mysql down 的告警會聚合到一起傳送出去。
  • group_wait:新建的 AlterGroup 等待多久後觸發第一次告警。
  • group_interval:AlterGroup 內產生的不同告警觸發間隔時間。
  • repeat_interval:AlterGroup 內如果一直是同樣的告警,Altermanager 為了避免長時間的干擾,進行告警去重的等待時間。

匹配後,告警觸發,可以收到對應的告警郵件:

在這裡插入圖片描述

自定義告警

當預設的告警規則不能滿足需求時,可以根據實際情況新增自定義告警,實際就是新增對應的 PrometheusRule。如以下例子,新增 pod 非 running 狀態的告警。

UI 配置:

對應 yaml 配置:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: podmonitor
  namespace: cattle-monitoring-system
spec:
  groups:
  - name: pod_node_ready
    rules:
    - alert: pod_not_ready
      annotations:
        message: '{
  { $labels.namespace }}/{
  { $labels.pod }} is not ready.'
      expr: 'sum by (namespace, pod) (kube_pod_status_phase{phase!~"Running|Succeeded"})
        > 0 '
      for: 180s
      labels:
        severity: 嚴重
  • for:表示持續時間
  • message:表示告警通知內的資訊
  • label.severity:表示告警級別
  • expr:指標獲取表示式

配置告警接收者:

根據標籤匹配到這個 PrometheusRule:

參考連結:
https://mp.weixin.qq.com/s/fT-AXnPP8rrWxTposbi-9A
https://github.com/prometheus-operator/prometheus-operator
https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/guides/enable-monitoring/