在 Kubernetes 中部署 Alertmanager

SRETalk發表於2024-08-06

Prometheus alert manager

AlertManager 是一個開源警報系統,與 Prometheus 監控系統配合使用。本部落格是 Prometheus Kubernetes 教程系列的一部分。在我們之前的文章中,我們研究了以下內容:

  • 在 Kubernetes 上部署 Prometheus
  • 部署 Kube State Metrics

在本指南中,我將介紹 Alertmanager 設定及其與 Prometheus 的整合。

注意:在本指南中,所有 Alert Manager Kubernetes 物件都將在名為 monitoring 的名稱空間中建立。如果使用不同的名稱空間,則可以在 YAML 檔案中替換它。

Kubernetes 上的 Alertmanager

Alert manager 有以下關鍵配置:

  • 用於 Alertmanager 配置的 ConfigMap
  • 用於 Alertmanager 警報模板的 ConfigMap
  • Alertmanager 本身的 Deployment
  • Alertmanager 的 Service,用於訪問 Web UI

重要注意事項

您應該已經啟動並執行了一個 Prometheus。Prometheus 的 config.yaml 中應具有正確的 Alertmanager 地址,如下所示,以便將警報傳送到警報管理器。

alerting:
   alertmanagers:
      - scheme: http
        static_configs:
        - targets:
          - "alertmanager.monitoring.svc:9093"

為了能夠接收郵件告警,您需要在 Alertmanager 的 config.yaml 中配置合法的 SMTP 資訊。您也可以根據自己的需求自定義郵件告警模板。我們在本指南中給出了通用模板。讓我們開始吧。

Alertmanager Kubernetes 清單

本教程中使用的所有 Kubernetes 清單都可以在此 Github 連結中找到。使用以下命令克隆 Github 倉庫。

git clone https://github.com/bibinwilson/kubernetes-alert-manager.git

用於 Alertmanager 配置的 ConfigMap

Alert Manager 從 config.yaml 檔案中讀取其配置。它包含警報模板路徑、電子郵件和其他警報接收配置的配置。

在此次部署演示中,我們使用電子郵件和 Slack webhook 接收器。您可以從此處檢視所有受支援的警報接收器。

建立名為 AlertManagerConfigmap.yaml 的檔案,並複製以下內容。

kind: ConfigMap
apiVersion: v1
metadata:
  name: alertmanager-config
  namespace: monitoring
data:
  config.yml: |-
    global:
    templates:
    - '/etc/alertmanager/*.tmpl'
    route:
      receiver: alert-emailer
      group_by: ['alertname', 'priority']
      group_wait: 10s
      repeat_interval: 30m
      routes:
        - receiver: slack_demo
        # Send severity=slack alerts to slack.
          match:
            severity: slack
          group_wait: 10s
          repeat_interval: 1m    
 
    receivers:
    - name: alert-emailer
      email_configs:
      - to: demo@devopscube.com
        send_resolved: false
        from: from-email@email.com
        smarthost: smtp.eample.com:25
        require_tls: false
    - name: slack_demo
      slack_configs:
      - api_url: https://hooks.slack.com/services/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sz4Qk
        channel: '#devopscube-demo'

讓我們使用 kubectl 建立 ConfigMap。

kubectl create -f AlertManagerConfigmap.yaml

用於 Alertmanager 警報模板的 ConfigMap

我們需要為我們使用的所有接收器(電子郵件、Slack 等)提供警報模板。Alertmanager 將動態替換這些值,並根據模板向接收者傳送警報。您可以根據需要自定義這些模板。

建立一個名為 AlertTemplateConfigMap.yaml 的檔案,並從此檔案連結 ==> 警報管理器模板 YAML 中複製內容

使用 kubectl 建立 configmap。

kubectl create -f AlertTemplateConfigMap.yaml

建立 Deployment

在此 Deployment 中,我們將掛載我們建立的兩個 ConfigMap。

使用以下內容建立名為 Deployment.yaml 的檔案。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: alertmanager
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alertmanager
  template:
    metadata:
      name: alertmanager
      labels:
        app: alertmanager
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager:latest
        args:
          - "--config.file=/etc/alertmanager/config.yml"
          - "--storage.path=/alertmanager"
        ports:
        - name: alertmanager
          containerPort: 9093
        resources:
            requests:
              cpu: 500m
              memory: 500M
            limits:
              cpu: 1
              memory: 1Gi
        volumeMounts:
        - name: config-volume
          mountPath: /etc/alertmanager
        - name: templates-volume
          mountPath: /etc/alertmanager-templates
        - name: alertmanager
          mountPath: /alertmanager
      volumes:
      - name: config-volume
        configMap:
          name: alertmanager-config
      - name: templates-volume
        configMap:
          name: alertmanager-templates
      - name: alertmanager
        emptyDir: {}

使用 kubectl 建立 Deployment。

kubectl create -f Deployment.yaml

建立 Alertmanager 的服務端點

我們需要使用 NodePort 或 Load Balancer 公開警報管理器,以便訪問 Web UI。Prometheus 將使用內部服務端點與警報管理器進行通訊。

建立包含以下內容的 Service.yaml 檔案。

apiVersion: v1
kind: Service
metadata:
  name: alertmanager
  namespace: monitoring
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/port:   '9093'
spec:
  selector: 
    app: alertmanager
  type: NodePort  
  ports:
    - port: 9093
      targetPort: 9093
      nodePort: 31000

使用 kubectl 建立服務。

kubectl create -f Service.yaml

現在,您將能夠在節點埠 31000 上訪問警報管理器。例如

http://35.114.150.153:31000

Alertmanager Web UI

  • 英文原文:https://devopscube.com/alert-manager-kubernetes-guide/
  • 中文譯文:https://flashcat.cloud/blog/alert-manager-kubernetes-guide/
  • 譯者:巴輝特

本部落格出自快貓星雲的小夥伴們,快貓星雲是一家專注在監控/可觀測性領域的初創公司,其團隊是開源專案 Open-Falcon、Nightingale 的創始團隊。如果您想要採購監控/可觀測性相關的產品方案,歡迎 聯絡我們做產品技術交流

相關文章