prometheus-community/prometheus Helm Chart配置Alertmanager后Slack告警未触发排查
1. 检查Prometheus是否配置Alertmanager地址
你当前的prometheus.yml未配置alerting块,Prometheus不知道要将告警发送到哪个Alertmanager实例,这是核心问题之一。
需要在serverFiles.prometheus.yml下添加Alertmanager地址配置:
serverFiles: prometheus.yml: # 保留原有scrape_configs scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'opencost' static_configs: - targets: ['opencost.opencost-exporter:9003'] # 新增alerting配置 alerting: alertmanagers: - static_configs: - targets: ['my-prometheus-alertmanager:9093']
注:my-prometheus-alertmanager是Helm默认生成的Alertmanager Service名称(与你的release名称对应),可通过kubectl get svc确认实际名称。
2. 修正Alertmanager配置的存放路径
你将Alertmanager配置放在了serverFiles.alertmanager.yml下,但对于27.11.0版本的prometheus-community Helm Chart,这个字段是给Prometheus Server用的,Alertmanager不会加载这里的配置。
正确的配置位置是alertmanager.config,调整后的values.yaml结构如下:
# 保留原有Prometheus和告警规则配置 serverFiles: prometheus.yml: # 包含scrape_configs和新增的alerting块 alerting_rules.yml: groups: - name: opencost-alerts rules: - alert: HighCost expr: node_total_hourly_cost > 1 for: 1m labels: severity: critical annotations: description: "The cost is higher than expected for the last 1 minutes" summary: "Cost is over $1 for the last 1 minutes" # Alertmanager配置单独放在此处 alertmanager: config: global: resolve_timeout: 5m route: receiver: 'slack-notifications' group_by: ['alertname'] group_wait: 10s group_interval: 5m repeat_interval: 1h receivers: - name: 'slack-notifications' slack_configs: - api_url: 'https://hooks.slack.com/services/XXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZ' channel: '#alert-channel' send_resolved: true username: 'Prometheus' text: "{{ .CommonLabels.alertname }}: {{ .CommonAnnotations.description }}"
3. 验证Alertmanager配置是否生效
执行以下命令检查Alertmanager Pod内的实际配置文件:
kubectl exec -it <alertmanager-pod-name> -- cat /etc/alertmanager/config/alertmanager.yml
如果输出与你定义的配置一致,说明加载成功;否则重新部署Helm release:
helm upgrade my-prometheus prometheus-community/prometheus --values values.yaml --version 27.11.0
4. 开启Alertmanager调试日志排查细节
默认日志级别无法展示发送请求的详细信息,可在values.yaml中调整日志级别:
alertmanager: extraArgs: - --log.level=debug
重新部署后查看日志:
kubectl logs -f <alertmanager-pod-name>
日志中会显示Slack请求的具体状态,帮助定位是否存在网络、权限等问题。
5. 确认告警触发状态
在Prometheus UI的「Alerts」页面,确认告警状态为firing,且Active Since时间已超过for: 1m的配置。若告警仅短暂触发后恢复,不会发送给Alertmanager。
内容的提问来源于stack exchange,提问作者realworldchat

