📖 本文约 1400+ 字 | 阅读约需 7 分钟
你将了解到:
在 Kubernetes 集群中,最可怕的不是故障,而是:
👉 出了问题,你却最后一个知道
一个成熟的监控体系,必须具备这样的闭环:
发现问题 → 判断问题 → 通知正确的人 → 快速处理
而其中最关键、也最容易被卡住的一环,就是:
👉 Alertmanager —— 告警中枢
Exporter → Prometheus → Alert Rules → Alertmanager → Email

本文基于以下环境,如果你已搭建完成,可直接上手:
kubectl port-forward svc/alertmanager-operated 9093:9093 -n monitoring
浏览器访问:
http://localhost:9093

🔔 提示:如果没有 UI 界面,无法使用浏览器访问。可在本地设备使用 ssh (
ssh -L 9093:localhost:9093 xxx@192.168.xx.xx)访问目标机,然后在本地使用浏览器访问。
很多人在这一步被卡住,因为默认规则太难触发。
👉 我们直接造一个 100% 触发的告警,先让链路跑通。
apiVersion: monitoring.coreos.com/v1
kind:PrometheusRule
metadata:
name:test-alert
namespace:monitoring
labels:
release:monitoring # ⚠️ 核心避坑点,务必加上
spec:
groups:
-name:test.rules
rules:
-alert:AlwaysFiring
expr:vector(1)
for:30s
labels:
severity:warning
annotations:
description:"This is a test alert"

kubectl apply -f test-alert.yaml
如果你发现:
❌ Prometheus 里看不到这条规则
👉 99% 是因为缺少了以下 label:
labels:
release: monitoring
因为 Prometheus 通过 selector限制了只加载带有该 label 的规则。
访问 Prometheus:
http://localhost:9090
进入 Alerts页面,你会看到:
AlwaysFiring (Firing)

访问:
http://localhost:9093
你会看到:
AlwaysFiring
State: Firing

你需要准备:
global:
resolve_timeout:5m
smtp_smarthost:'smtp.qq.com:465'
smtp_from:'xxxx@qq.com'
smtp_auth_username:'xxxx@qq.com'
smtp_auth_password:'你的授权码'
smtp_require_tls:true
route:
receiver:"email"
group_by:["alertname"]
group_wait:10s
group_interval:30s
repeat_interval:1m
receivers:
-name:"email"
email_configs:
-to:"xxxx@qq.com"
send_resolved:true

kubectl create secret generic alertmanager-monitoring-kube-prometheus-alertmanager \
--from-file=alertmanager.yaml -n monitoring \
--dry-run=client -o yaml | kubectl apply -f -
kubectl delete pod -l app.kubernetes.io/name=alertmanager -n monitoring
等待 30 秒 ~ 1 分钟,你将收到类似下面的邮件:
[FIRING] AlwaysFiring


现象 | 排查方向 |
|---|---|
Prometheus 看不到规则 | 检查 release: monitoringlabel |
收不到邮件 | kubectl logs -n monitoring alertmanager-xxx |
SMTP 认证失败 | 确认使用的是 授权码,不是邮箱密码 |
邮件进了垃圾箱 | 很常见,记得检查垃圾箱并设置为白名单 |
到这里,你已经完成了一套完整的告警链路:
Prometheus → Alertmanager → Email
经过此实验,你现在具备的能力:
如果想让告警体系更贴近生产,我们可以继续深入:
warning / critical
避免“告警风暴”,让通知更聚合
更适合生产环境的通知渠道
如果你已经按照本文完成了实验,欢迎在评论区留言:
👉 “告警打通成功”
后续我会继续更新:
⚠️ 注意:测试完毕记得关闭告警测试,不然邮箱可能会被打爆。
kubectl delete prometheusrule test-alert -n monitoring