遇到 Prometheus 界面报错且无告警,通常优先检查组件存活状态与资源限制,再排查告警链路配置。
先说结论:大部分此类问题源于 Prometheus 或 Alertmanager 组件崩溃、资源不足(如 OOM),或是告警规则与接收器配置断链,需按链路逐段排查。
- 先确认:Pod 运行状态、资源使用率及日志报错信息
- 先处理:扩容资源、修复配置错误或重置僵死进程
- 再验证:界面访问恢复且测试告警能正常送达
命令速用版
以下命令可快速定位组件状态与日志(假设监控命名空间为 monitoring):
kubectl get pods -n monitoring
kubectl top pods -n monitoring
kubectl logs -l app=prometheus -n monitoring `--tail`=100
kubectl logs -l app=alertmanager -n monitoring `--tail`=100
kubectl get prometheusrules -n monitoring
kubectl get alertmanagerconfigs -n monitoring为什么会这样
Prometheus 监控链路较长,数据从采集到发送告警需经过多个环节:Prometheus Server 抓取指标 → 规则引擎评估 → 发送给 Alertmanager → 路由匹配 → 调用接收器(如邮件、钉钉、Webhook)。界面报错通常意味着 Server 端自身不稳定(如内存溢出导致进程重启、存储磁盘写满),而收不到告警则可能是中间某个环节断开,例如规则未加载、Alertmanager 配置错误、网络策略拦截或接收器凭证失效。公开资料中没有看到可靠的量化数据说明哪种原因占比最高,但资源不足和配置错误是最常见的两类。
分步处理
1. 检查组件存活与资源
使用 kubectl get pods -n monitoring 查看 Prometheus 和 Alertmanager 的 Pod 状态。如果状态是 CrashLoopBackOff 或 OOMKilled,说明资源不足。检查 kubectl describe pod <pod-name> -n monitoring 中的 Events 字段。若确认内存不足,需调整 resources limits。
2. 检查 Prometheus 界面与目标
通过 Port-forward 访问界面:kubectl port-forward svc/prometheus -n monitoring 9090:9090。访问 http://localhost:9090/targets 查看抓取目标是否大部分为 DOWN。若大量目标丢失,检查 ServiceMonitor 配置或网络策略。
3. 检查告警规则状态
在 Prometheus 界面访问 /alerts 页面,查看规则是否处于 inactive 或 pending 状态。若规则未加载,检查 PrometheusRule 资源是否存在且语法正确。可使用 promtool check rules 本地验证规则文件。
4. 检查 Alertmanager 配置
查看 Alertmanager 界面(默认端口 9093),检查 Status 页面中的 Receivers 和 Routes 配置。确认接收器(Receiver)的 Webhook URL 或 SMTP 配置是否正确。若使用 kube-prometheus-stack,检查 AlertmanagerConfig 资源。
怎么验证是否生效
1. 界面访问检查
Prometheus 和 Alertmanager 的 Web UI 能正常打开,无 503 或 500 错误,且页面加载速度正常。
2. 告警触发测试
手动创建一个立即触发的测试规则(例如设置阈值极低的内存告警),观察 Prometheus /alerts 页面是否变为 FIRING 状态,同时检查 Alertmanager 的 Alerts 页面是否有记录,并确认接收端(如手机、邮箱)是否收到通知。
3. 日志确认
查看 Alertmanager 日志,确认有 msg="Notify success" 或类似发送成功的日志条目,且无 connection refused 或 auth failed 错误。
常见坑
1. 时间同步问题
集群节点时间不同步会导致告警时间戳异常,规则无法正确匹配。确保所有节点 NTP 服务正常。
2. 存储磁盘满
Prometheus 本地存储(TSDB)若占满磁盘,会导致无法写入新数据甚至进程崩溃。监控磁盘使用率,设置合理的保留策略(retention)。
3. 静默规则(Silences)
检查 Alertmanager 中是否存在误配的静默规则,导致告警被暂时屏蔽。
4. 网络策略限制
Kubernetes NetworkPolicy 可能阻止 Prometheus 访问 Alertmanager 或外部接收器,需确认相关端口(如 9093)连通性。
参考来源
- Prometheus Official Documentation, "Configuration", https://prometheus.io/docs/prometheus/latest/configuration/
- Prometheus Official Documentation, "Alerting with Alertmanager", https://prometheus.io/docs/alerting/latest/overview/
- Kubernetes Documentation, "Debugging Applications", https://kubernetes.io/docs/tasks/debug/
- prometheus-community, "kube-prometheus", https://github.com/prometheus-community/kube-prometheus
原文链接:https://www.zjcp.cc/ask/10471.html
