Prometheus+Grafana監控系統

  • 監控內容
    在這裏插入圖片描述

Prometheus官網
Github地址

  • Prometheus特點:
  1. 多維度數據模型:由度量名稱和鍵值對標識的時間序列數據
  2. PromSQL:一種靈活的查詢語言,可以利用多維數據完成複雜的查詢
  3. 不依賴分佈式存儲,單個服務器節點可直接工作
  4. 基於HTTP的pull方式採集時間序列數據
  5. 推送時間序列數據通過PushGateway組件支持
  6. 通過服務發現或靜態配置發現目標
  7. 多種圖形模式及儀表盤支持(grafana)
  • Prometheus組成與架構
    在這裏插入圖片描述
    Prometheus Server:收集指標和存儲時間序列數據,並提供查詢接口
    ClientLibrary:客戶端庫
    Push Gateway:短期存儲指標數據,主要用於臨時性的任務
    Exporters:採集已有的第三方服務監控指標並暴露metrics
    Alertmanager:告警
    Web UI:簡單的Web控制檯
  • 數據模型
    • Prometheus將所有數據存儲爲時間序列;具有相同度量名稱以及標籤屬於同一個指標。
    • 每個時間序列都由度量標準名稱和一組鍵值對(標籤)作爲唯一標識。
    • 時間序列格式:
      <metric name>{<label name>=<label value>,...)}
      飯粒:api_http_requests_total{method=“POST”, handle="/messages"}
  • 指標類型
    • counter:遞增的計數器
    • Gauge:可以任意變化的數值
    • Histogram:對一段時間範圍內數據進行採樣,並對所有數值求和與同級數量
    • Summary:與Histogram類似
      在這裏插入圖片描述
  • 實例:可以抓取的目標稱爲實例(instances)
  • 作業:具有相同目標的實例集合稱爲作業(Job)
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
      - job_name: 'node'
        static_configs:
        - targets: ['192.168.1.10:9090']
    

部署Prometheus

  • 安裝
    • 二進制
      下載 解壓後執行同名可執行文件即可(注意:2.18.1不可用)
      進入解壓目錄執行./prometheus --config.file=prometheus.yml
    • docker
      docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
      在瀏覽器訪問 http://192.168.33.7:9090
      在這裏插入圖片描述
  • 使用systemd管理Prometheus服務(二進制部署適用)
    # vim /usr/lib/systemd/system/prometheus.service
    [Unit]
    Description=prometheus.io
    
    [Service]
    Restart=on-failure
    ExecStart=/usr/local/src/prometheus-2.18.0.linux-amd64/prometheus --config.file=/usr/local/src/prometheus-2.18.0.linux-amd64/prometheus.yml
    
    [Install]
    WantedBy=multi-user.target
    # systemctl daemon-reload
    # systemctl start prometheus
    # ps -ef
    

  • 配置文件 官文
  • 檢查配置文件是否有問題
    ./promtool check config [配置文件]

  • 基於文件的服務發現
    • 添加本機監控
    1. 將默認配置文件中static_configs兩行配置註釋
    2. 同級加上以下配置
      file_sd_configs:
        - files: ['/usr/local/src/prometheus-2.18.0.linux-amd64/sd_config/local.yml']
          refresh_interval: 5s
      
    3. 創建服務發現目錄mkdir /usr/local/src/prometheus-2.18.0.linux-amd64/sd_config
    4. 重啓prometheus服務 systemctl restart prometheus
    5. 添加服務發現配置文件
      # vim sd_config/local.yml 
      - targets: ['localhost:9090']
        labels:
          idc: sz
      
      在web端查看:
      在這裏插入圖片描述
    • 添加其他服務器節點監控(在上面的基礎下操作)
    1. 在需要被監控的node節點下載node_exporter並解壓 官文
    2. 配置systemd管理,啓動
      # /usr/lib/systemd/system/node_exporter.service
      [Unit]
      Description=node_exporter
      
      [Service]
      Restart=on-failure
      ExecStart=/usr/local/src/node_exporter-1.0.0.linux-amd64/node_exporter
      
      [Install]
      WantedBy=multi-user.target
      # systemctl daemon-reload
      # systemctl start node_exporter
      # curl 192.168.33.6:9100/metrics
      
    3. 服務端:配置文件中加入
        - job_name: 'node'
          file_sd_configs:
            - files: ['/usr/local/src/prometheus-2.18.0.linux-amd64/sd_config/server_*.yml']
              refresh_interval: 5s
      
    4. 重啓prometheus服務 systemctl restart prometheus
    5. 添加服務發現配置文件
      # vim sd_config/server_node.yml 
      - targets: ['192.168.33.6:9100', '192.168.33.9:9100']
      
      在web端查看:
      在這裏插入圖片描述
  • 監控資源消耗情況
    • cpu使用率:100 - irate(node_cpu_seconds_total{instance="192.168.33.6:9100", mode="idle", job="node"}[5m]) * 100
      在這裏插入圖片描述
    • 內存使用率:100 - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100
      在這裏插入圖片描述
    • 根分區剩餘空間:node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs" } / node_filesystem_size_bytes{mountpoint="/",fstype=~"ext4|xfs" } * 100
      在這裏插入圖片描述
  • 監控服務運行狀態
  1. 修改node_exporter.service啓動腳本,寫入需要監控的服務(可以使用正則匹配),重啓
    # vim /usr/lib/systemd/system/node_exporter.service
    ...
    ExecStart=/usr/local/src/node_exporter-1.0.0.linux-amd64/node_exporter --collector.systemd --collector.systemd.unit-whitelist=(docker|etcd).service
    ...
    # systemctl daemon-reload
    # systemctl restart node_exporter
    
  2. 稍等片刻到web端查找:node_systemd_unit_state{state="active"}
    在這裏插入圖片描述

監控數據圖形化展示 Grafana

  • 安裝grafana:docker run -d -p 3000:3000 --name grafana grafana/grafana
    在瀏覽器訪問 192.168.33.9:3000,初識賬號密碼都是admin
    添加Prometheus數據源
    在這裏插入圖片描述

    • 手動添加dashboard:
      左邊點擊添加Dashboard -> 右上點擊Add panel
      在這裏插入圖片描述
      下面填入Prometheus公式(如計算CPU使用率),左邊填入監控標題,Apply應用即可
      在這裏插入圖片描述
  • 導入模板:
    官網查找對應數據源的模板,輸入模板ID -> load
    在這裏插入圖片描述
    9276模板:基礎監控
    在這裏插入圖片描述

  • 常見監控項

    • 監控容器運行
    1. 在被監控的機器運行cadvisordocker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg google/cadvisor
      測試瀏覽器訪問:192.168.33.6:8080/metrics
    2. 在Prometheus服務端配置文件加入數據監控
      # vim prometheus.yml
        - job_name: 'docker'
          static_configs:
          - targets: ['192.168.33.6:8080', '192.168.33.9:8080']
      # systemctl restart prometheus
      
    3. 在web端查看監控情況(搜索以container開頭的數據)
      在這裏插入圖片描述
    4. grafana中配置模板監控docker容器:模板193
      在這裏插入圖片描述
    • 監控MySQL服務器
    1. 在被監控服務器安裝運行mysqld_exporter
      # 1. 授權用戶
      # mysql -uroot -p
      > CREATE USER 'exporter'@'localhost' IDENTIFIED BY '111111' WITH MAX_USER_CONNECTIONS 3;
      > GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
      # 2. 創建免交互登陸文件
      # vim /usr/local/src/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
      [client]
      user=exporter
      password=111111
      # 3. 創建systemd管理配置文件
      # vim /usr/lib/systemd/system/mysqld_exporter.service
      [Unit]
      Description=mysqld-exporter
      
      [Service]
      Restart=on-failure
      ExecStart=/usr/local/src/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf=/usr/local/src/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
      
      [Install]
      WantedBy=multi-user.target
      # systemctl daemon-reload
      # systemctl start mysqld_exporter
      # curl 192.168.33.6:9104/metrics
      
      注意:docker運行不好使。
    2. grafana中配置監控模板7362
      在這裏插入圖片描述

監控告警Alertmanager

  • 下載 安裝
  • 配置Prometheus與Alertmanager通信
    在這裏插入圖片描述
  1. 修改alertmanager配置並啓動
    # 1. 編輯配置文件
    # vim alertmanager.yml
    global:
      resolve_timeout: 5m
      # 郵件告警配置
      smtp_smarthost: 'mail.xxx.com:25'
      smtp_from: 'xxx'
      smtp_auth_username: 'xxx'
      smtp_auth_password: 'xxx'
      smtp_require_tls: false
    
    route:
      group_by: ['alertname']      # 根據標籤進行分組
      group_wait: 10s              # 發送告警等待時間(在這個時間內如果有同類告警就合併以後一起發送)
      group_interval: 10s          # 發送告警間隔時間(兩個告警的間隔)
      repeat_interval: 5m          # 重複告警的間隔時間
      receiver: 'mail'
    receivers:
    - name: 'mail'
      email_configs:
      - to: '[email protected]'
    # 告警收斂,暫時不用,先註釋
    #inhibit_rules:
    #  - source_match:
    #      severity: 'critical'
    #    target_match:
    #      severity: 'warning'
    #    equal: ['alertname', 'dev', 'instance']
    
    # 2. 保存退出,檢查配置文件是否正確
    # ./amtool check-config alertmanager.yml
    
    # 3. 配置systemd管理文件
    # vim /usr/lib/systemd/system/alertmanager.service
    [Unit]
    Description=alertmanager
    
    [Service]
    Restart=on-failure
    ExecStart=/usr/local/src/alertmanager-0.20.0.linux-amd64/alertmanager --config.file=/usr/local/src/alertmanager-0.20.0.linux-amd64/alertmanager.yml
    
    [Install]
    WantedBy=multi-user.target
    
    # 4. 啓動alertmanager
    # systemctl daemon-reload
    # systemctl start alertmanager
    
  2. 修改Prometheus配置開啓alertmanager告警
    # vim prometheus.yml
    	# 修改12行
    	      - 127.0.0.1:9093
    	# 修改16行
    	  - "rules/*.yml"
    # mkdir rules
    # vim rules/alert_test.yml
    groups:
    - name: general.rules   # 注意不同規則文件的這個值要用不同值
      rules:
      - alert: InstanceDown
        expr: up == 0     # 檢測條件,可以在Prometheus中執行的公式
        for: 1m           # 持續1分鐘up值爲0就報警
        labels:
          severity: error      # 告警級別
        annotations:
          description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
          summary: 'Instance {{ $labels.instance }} down'
    # ./promtool check config prometheus.yml
    # systemctl restart prometheus
    
    在web端查看告警配置信息
    在這裏插入圖片描述
    1. 測試告警
      關閉docker cadvisor服務,觀察web端界面
      在這裏插入圖片描述
      告警郵件:
      郵件告警
      編寫服務器基礎告警內容:
      /usr/local/src/prometheus-2.18.0.linux-amd64/rules/base_node.yml
      groups:
      - name: node.rules
        rules:
        - alert: DiskWillFull
          expr: node_filesystem_free_bytes{fstype=~"ext4|xfs" } / node_filesystem_size_bytes{fstype=~"ext4|xfs" } * 100 > 85
          for: 1m
          labels:
            severity: warning
          annotations:
            description: '{{ $labels.instance }} 磁盤使用率過高'
            summary: 'Instance {{ $labels.instance }} :分區 {{ $labels.mountpoint }} 使用率超過85%。(當前值:{{ $value }})'
        - alert: CPUTooHigh
          expr: 100 - irate(node_cpu_seconds_total{mode="idle", job="node"}[5m]) * 100 > 80
          for: 2m
          labels:
            severity: error
          annotations:
            description: '{{ $labels.instance }} CPU使用率過高'
            summary: 'Instance {{ $labels.instance }} CPU使用率超過80%。(當前值:{{ $value }})'
        - alert: MemoryTooHigh
          expr: 100 - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 80
          for: 2m
          labels:
            severity: error
          annotations:
            description: '{{ $labels.instance }} 內存使用率過高'
            summary: 'Instance {{ $labels.instance }} 內存使用率超過80%。(當前值:{{ $value }})'
      
  • 告警狀態
    Inactive:無事發生。
    Pending:已觸發閾值,但未滿足告警持續時間。
    Firing:已觸發閾值且滿足告警持續時間,警報發送給接收者。
  • 告警通知分組發送
    route:
      # 當所有的規則都不匹配時使用默認的 default-receiver
      receiver: 'default-receiver'
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 4h
      group_by: [cluster, alertname]
      routes:
      - receiver: 'database-pager'
        group_wait: 10s
        # 正則匹配
        match_re:
          service: mysql|cassandra
      - receiver: 'frontend-pager'
        group_by: [product, environment]
        match:
          team: frontend
    
  • 告警收斂
    告警分發流程:
    在這裏插入圖片描述
    • 分組(group):將類似性質的警報分類爲單個通知。
      作用:
    1. 減少告警消息的數量
    2. 同類告警的聚合,幫助運維排查問題
    • 抑制(inhibition):當告警發出後,停止重複發送由此警報引發的其他警報。
      作用:消除冗餘告警。
    • 靜默(silences):一種簡單的特定時間靜音提醒的機制。
      作用:在維護階段阻止相應告警。
      在alertmanager後臺web界面 192.168.33.8:9093 右上角創建靜默規則
      在這裏插入圖片描述
  • 告警觸發流程:
    在這裏插入圖片描述
    1. Prometheus告警規則rules/alert_test.yml
      expr: up == 0
      for: 5m
      
    2. alertmanager配置文件
      ...
      route:
      	group_by: ['alertname']
      	group_wait: 10s
      	group_interval: 10s
      	repeat_interval: 5m
      ...
      inhibit_rules:
      	...
      

K8s監控

  • 監控方案

    • cAdvisor + Heapster + InfluxDB + Grafana(淘汰)
      劣勢:僅對k8s資源級對象進行監控,無法對業務進行監控;在報警方面也有諸多不足。
      在這裏插入圖片描述
    • cAdvisor/exporter + Prometheus + Grafana(目前主流)
      在這裏插入圖片描述
  • Kubernetes監控指標:

    • Kubernetes本身監控:
      Node資源利用率
      node數量
      pods數量
      資源對象監控
    • Pod監控
      Pod數量(項目)
      容器資源利用率
      應用程序
      在這裏插入圖片描述
      官文 - 服務發現
  • 在K8s中部署Prometheus
    Yaml文件 (官方github中已下線)
    應用/啓動順序:

    kubectl apply -f prometheus-rbac.yaml
    kubectl apply -f prometheus-configmap.yaml
    kubectl apply -f prometheus-statefulset.yaml
    kubectl apply -f prometheus-service.yaml
    

    通過kubectl get pod, svc -n kube-system查看啓動情況,並在瀏覽器訪問service/prometheus暴露端口進入Prometheus web界面。
    kubelet的節點使用cadvisor提供的metrics接口獲取該節點所有容器相關的性能指標數據。
    暴露接口地址:
    http://[NodeIp]:10255/metrics/cadvisor
    http://[NodeIp]:10255/metrics
    進入Prometheus容器:kubectl exec -it prometheus-0 sh -c prometheus-server -n kube-system

  • 在k8s中部署grafana

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: grafana
      namespace: kube-system
    spec:
      serviceName: "grafana"
      replicas: 1
      selector:
        matchLabels:
          app: grafana
      template:
        metadata:
          labels:
            app: grafana
        spec:
          containers:
          - name: grafana
            image: grafana/grafana
            ports:
              - containerPort: 3000
                protocol: TCP
            resources:
              limits:
                cpu: 100m
                memory: 256Mi
              requests:
                cpu: 100m
            volumeMounts:
              - name: grafana-data
                mountPath: /var/lib/grafana
                subPath: grafana
          securityContext:
            fsGroup: 472
            runAsUser: 472
      volumeClaimTemplates:
      - metadata:
          name: grafana-data
        spec:
          storageClassName: managed-nfs-storage
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: "1Gi"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grafana
      namespace: kube-system
    spec:
      type: NodePort
      ports: 
      - port: 80
        nodePort: 30007
        targetPort: 3000
      selector:
        app: grafana
    

    通過kubectl get pod,svc -n kube-system查看狀態
    在瀏覽器訪問192.168.33.8:30007進入(默認用戶名密碼都是admin)

    • 推薦模板:
      集羣資源監控:3119
      集羣資源狀態監控:6417
      Node監控:9276
  • 監控K8s集羣Node

    • node_exporter:用於UNIX/Linux系統監控,使用Go語言編寫的收集器。
      源碼
      安裝參考 官文 (上文有詳細講解)
  • 監控k8s集羣資源對象 (查看所有對象信息 kubectl get all
    在這裏插入圖片描述
    使用上文提到的 Yaml文件 部署kube-state-metrics,應用/啓動順序:

    # kubectl apply -f kube-state-metrics-rbac.yaml
    # vim kube-state-metrics-deployment.yaml                        # 下面內容全部覆蓋
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: kube-state-metrics
      namespace: kube-system
      labels:
        k8s-app: kube-state-metrics
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: Reconcile
        version: v1.3.0
    spec:
      selector:
        matchLabels:
          k8s-app: kube-state-metrics
          version: v1.3.0
      replicas: 1
      template:
        metadata:
          labels:
            k8s-app: kube-state-metrics
            version: v1.3.0
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ''
        spec:
          priorityClassName: system-cluster-critical
          serviceAccountName: kube-state-metrics
          containers:
          - name: kube-state-metrics
            image: lizhenliang/kube-state-metrics:v1.3.0
            ports:
            - name: http-metrics
              containerPort: 8080
            - name: telemetry
              containerPort: 8081
            readinessProbe:
              httpGet:
                path: /healthz
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 5
          - name: addon-resizer
            image: lizhenliang/addon-resizer:1.8.3
            resources:
              limits:
                cpu: 100m
                memory: 30Mi
              requests:
                cpu: 100m
                memory: 30Mi
            env:
              - name: MY_POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: MY_POD_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
            volumeMounts:
              - name: config-volume
                mountPath: /etc/config
            command:
              - /pod_nanny
              - --config-dir=/etc/config
              - --container=kube-state-metrics
              - --cpu=100m
              - --extra-cpu=1m
              - --memory=100Mi
              - --extra-memory=2Mi
              - --threshold=5
              - --deployment=kube-state-metrics
          volumes:
            - name: config-volume
              configMap:
                name: kube-state-metrics-config
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: kube-state-metrics-config
      namespace: kube-system
      labels:
        k8s-app: kube-state-metrics
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: Reconcile
    data:
      NannyConfiguration: |-
        apiVersion: nannyconfig/v1alpha1
        kind: NannyConfiguration
    
    # kubectl apply -f kube-state-metrics-deployment.yaml
    # kubectl apply -f kube-state-metrics-service.yaml
    # kubectl get pod.svc -n kube-system -o wide      # 檢查
    

    在Prometheus web界面查找以kube_開頭的數據,如果可以匹配則表示kube-state-metrics部署成功。
    在grafana中導入模板6417

  • 在K8s中部署alertmanager實現告警

  1. 部署alertmanager
    使用上文提到的 Yaml文件 部署alertmanager,應用/啓動順序:
    # vim alertmanager-pvc.yaml                 # 將存儲改爲部署的nfs(通過kubectl get sc查看)
    storageClassName: managed-nfs-storage
    # kubectl apply -f alertmanager-configmap.yaml
    # kubectl apply -f alertmanager-pvc.yaml
    # kubectl apply -f alertmanager-deployment.yaml
    # kubectl apply -f alertmanager-service.yaml
    
  2. 配置Prometheus與alertmanager通信
    在Prometheus構建配置的yaml文件中修改最底的alerting配置,重新構建讓他生效
    # vim prometheus-configmap.yaml
    alerting:
      alertmanagers:
      - static_configs:
          - targets: ["alertmanager:80"]
    # kubectl apply -f prometheus-configmap.yaml
    
    在瀏覽器Prometheus web界面 Status - Configuration 查看配置是否生效
    在這裏插入圖片描述
  3. 配置告警
    • Prometheus指定rules目錄
      在Prometheus構建配置的yaml文件中添加規則匹配,重新構建讓他生效(檢查方法同上)
      # vim prometheus-configmap.yaml
      data:
        prometheus.yml: |
          # 加入以下兩行
          rule_files:
          - /etc/config/rules/*.rules
      # kubectl apply -f prometheus-configmap.yaml
      
    • configmap存儲告警規則
      # vim prometheus-rules.yaml
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: prometheus-rules
        namespace: kube-system
      data:
        general.rules: |
          groups:
          - name: general.rules
            rules:
            - alert: InstanceDown
              expr: up == 0
              for: 5m
              labels:
                severity: error
              annotations:
                description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
                summary: 'Instance {{ $labels.instance }} down'
          - name: node.rules
            rules:
            - alert: DiskWillFull
              expr: node_filesystem_free_bytes{fstype=~"ext4|xfs" } / node_filesystem_size_bytes{fstype=~"ext4|xfs" } * 100 > 85
              for: 2m
              labels:
                severity: warning
              annotations:
                description: '{{ $labels.instance }} 磁盤使用率過高'
                summary: 'Instance {{ $labels.instance }} :分區 {{ $labels.mountpoint }} 使用率超過85%。(當前值:{{ $value }})'
            - alert: CPUTooHigh
              expr: 100 - irate(node_cpu_seconds_total{mode="idle", job="node"}[5m]) * 100 > 80
              for: 2m
              labels:
                severity: error
              annotations:
                description: '{{ $labels.instance }} CPU使用率過高'
                summary: 'Instance {{ $labels.instance }} CPU使用率超過80%。(當前值:{{ $value }})'
            - alert: MemoryTooHigh
              expr: 100 - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 80
              for: 2m
              labels:
                severity: error
              annotations:
                description: '{{ $labels.instance }} 內存使用率過高'
                summary: 'Instance {{ $labels.instance }} 內存使用率超過80%。(當前值:{{ $value }})'
      # kubectl apply -f prometheus-rules.yaml
      
    • configmap掛載到容器rules目錄
      在數據卷位置加上rules的配置並重新構建
      # vim prometheus-statefulset.yaml
      ...
        volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          - name: prometheus-data
            mountPath: /data
            subPath: ""
            # 加上以下兩行
          - name: prometheus-rules
            mountPath: /etc/config/rules
      terminationGracePeriodSeconds: 300
      volumes:
        - name: config-volume
          configMap:
            name: prometheus-config
            # 加上以下三行
        - name: prometheus-rules
          configMap:
            name: prometheus-rules
      # kubectl apply -f prometheus-statefulset.yaml
      # kubectl get pod -n kube-system
      
      注意:這裏加入的name要與規則文件base_node.yml內容中的name對應,否則會出錯。
      在瀏覽器Prometheus web界面 Status - Rules 查看規則配置是否生效
      在這裏插入圖片描述
    • alertmanager加入發送郵件配置並生效
      # vim alertmanager-configmap.yaml
        alertmanager.yml: |
          global:
            # 加入以下6行
            resolve_timeout: 5m
            smtp_smarthost: 'mail.xxx.com:25'
            smtp_from: '[email protected]'
            smtp_auth_username: '[email protected]'
            smtp_auth_password: 'xxx'
            smtp_require_tls: false
          receivers:
          - name: default-receiver
            # 加入以下兩行:接收人
            email_configs:
            - to: '[email protected]'
      # kubectl apply -f alertmanager-configmap.yaml
      
    • 分別進入Prometheus和alertmanager容器查看規則是否寫入
      # kubectl exec -it prometheus-0 sh -c prometheus-server -n kube-system
      /prometheus $ ls /etc/config/rules/
      general.rules
      /prometheus $ vi /etc/config/rules/general.rules
      /prometheus $ exit
      # kubectl exec -it alertmanager-5bb796cb48-fbp77 sh -n kube-system
      /alertmanager # ls /etc/config/
      alertmanager.yml
      /alertmanager # vi /etc/config/alertmanager.yml 
      /alertmanager # exit
      
      手動關閉某個服務測試告警功能。

  • 總結
  1. 標籤很重要:可以按照環境、部門、項目、管理者劃分資源標籤
  2. Grafana靈活配置模板
  3. PromSQL
  4. 利用服務發現動態加入目標
  5. 拓展:對業務監控
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章