You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为EKS集群中运行的Alertmanager应用alertmanager.yml配置

如何在EKS集群中更新Alertmanager配置并实现节点数告警

环境说明

我有一个运行在EKS上的Kubernetes集群,通过kube-prometheus仓库安装了Prometheus和Alertmanager,当前可通过localhost:9090访问Prometheus面板,集群中运行3个Alertmanager Pod,Pod列表如下:

$ kubectl get pod -A
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE
kube-system   aws-node-669m7                         1/1     Running   0          29m
kube-system   aws-node-7rwhg                         1/1     Running   0          29m
kube-system   aws-node-f7tnf                         1/1     Running   0          39m
kube-system   cluster-autoscaler-78c99d7c59-6gbn7    1/1     Running   0          31m
kube-system   coredns-7dbf6bcd5b-5hgjx               1/1     Running   0          49m
kube-system   coredns-7dbf6bcd5b-ff5b4               1/1     Running   0          49m
kube-system   kube-proxy-jrwxh                       1/1     Running   0          29m
kube-system   kube-proxy-lwm9q                       1/1     Running   0          39m
kube-system   kube-proxy-xp9l9                       1/1     Running   0          29m
monitoring    alertmanager-main-0                    2/2     Running   0          35m
monitoring    alertmanager-main-1                    2/2     Running   0          35m
monitoring    alertmanager-main-2                    2/2     Running   0          35m
monitoring    blackbox-exporter-69f4d86566-d99bk     3/3     Running   0          36m
monitoring    grafana-79cd8d4b69-2k9np               1/1     Running   0          36m
monitoring    kube-state-metrics-56f8746666-q298b    3/3     Running   0          31m
monitoring    node-exporter-ndln7                    2/2     Running   0          29m
monitoring    node-exporter-psqng                    2/2     Running   0          29m
monitoring    node-exporter-z92vx                    2/2     Running   0          35m
monitoring    prometheus-adapter-77f56b865b-4sgv7    1/1     Running   0          31m
monitoring    prometheus-adapter-77f56b865b-f9tx6    1/1     Running   0          35m
monitoring    prometheus-k8s-0                       2/2     Running   0          35m
monitoring    prometheus-k8s-1                       2/2     Running   0          35m
monitoring    prometheus-operator-54f6687b97-5mdbb   2/2     Running   0          35m

我需要配置告警规则:当集群节点数超过4时,向我的Gmail账户发送邮件。已编写示例alertmanager.yml配置文件,但本地没有alertmanager命令,不知道如何将配置应用到集群中的Alertmanager Pod。

我的示例配置:

global:
  resolve_timeout: 5m
  smtp_from: 'prometheus.test@example.com'
  smtp_smarthost: 'localhost:25'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
  routes:
  - receiver: 'mailtest'
    match:
      test_type: SampleAlert
receivers:
- name: 'mailtest'
  email_configs:
    - to: 'root@localhost.localdomain'
      require_tls: false
- name: 'web.hook'
  webhook_configs:
  - url: 'https://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

解决方案

kube-prometheus通过Prometheus Operator管理Alertmanager,配置存储在Kubernetes Secret中,无需本地安装alertmanager命令,按以下步骤操作:

1. 调整Alertmanager配置(适配Gmail)

先修改你的alertmanager.yml,配置正确的Gmail SMTP参数(Gmail需开启两步验证并生成应用专用密码):

global:
  resolve_timeout: 5m
  smtp_from: '你的Gmail邮箱@gmail.com'
  smtp_smarthost: 'smtp.gmail.com:587'
  smtp_auth_username: '你的Gmail邮箱@gmail.com'
  smtp_auth_password: '你的Gmail应用专用密码'
  smtp_require_tls: true
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
  routes:
  - receiver: 'mailtest'
    match:
      test_type: SampleAlert
receivers:
- name: 'mailtest'
  email_configs:
    - to: '你的目标邮箱@gmail.com'
      require_tls: true
- name: 'web.hook'
  webhook_configs:
  - url: 'https://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

2. 更新Alertmanager配置到集群Secret

kube-prometheus默认使用alertmanager-main Secret存储配置,执行以下命令更新:

# 用本地配置文件覆盖集群中的Secret
kubectl create secret generic alertmanager-main --from-file=alertmanager.yml -n monitoring --dry-run=client -o yaml | kubectl apply -f -

3. 重启Alertmanager Pod加载新配置

Secret更新后Pod不会自动重启,需触发StatefulSet滚动更新:

kubectl rollout restart statefulset alertmanager-main -n monitoring

4. 配置Prometheus节点数告警规则

告警规则需配置在Prometheus中,创建node-count-alert.yaml文件:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: node-count-alert
  namespace: monitoring
  labels:
    prometheus: k8s
    role: alert-rules
spec:
  groups:
  - name: node-count
    rules:
    - alert: NodeCountExceeds4
      expr: count(kube_node_info{job="kube-state-metrics"}) > 4
      for: 1m
      labels:
        severity: warning
        test_type: SampleAlert # 和Alertmanager配置中的match规则对应
      annotations:
        summary: "集群节点数超过4个"
        description: "当前节点数: {{ $value }}"

应用规则到集群:

kubectl apply -f node-count-alert.yaml -n monitoring

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:05:12