如何在Prometheus告警邮件通知中获取activeAt/startAt时间
解决Alertmanager邮件显示告警activeAt时间的问题
要在告警邮件中显示告警的激活时间(即Prometheus API里的activeAt字段),不需要在Prometheus告警规则里通过query "time()"获取当前时间,直接在Alertmanager的邮件模板中引用告警对象的内置字段即可,具体操作如下:
1. 明确字段对应关系
Prometheus会将告警激活时间(activeAt)以StartsAt字段的形式传递给Alertmanager,因此在Alertmanager的模板中可以直接访问{{ .StartsAt }}来获取这个时间。
2. 修改Alertmanager邮件模板
找到你的Alertmanager邮件通知模板(默认模板或自定义模板),在需要展示时间的位置替换为以下内容:
- 若要显示人性化格式的时间:
告警激活时间: {{ humanizeTimestamp .StartsAt }} - 若要自定义时间格式(比如
YYYY-MM-DD HH:MM:SS UTC):告警激活时间: {{ .StartsAt.Format "2006-01-02 15:04:05 UTC" }}
3. 清理Prometheus告警规则(可选)
你当前告警规则中通过query "time()"生成的timestamp注解已无必要,可以删除该注解避免混淆,修正后的规则如下:
alerting_rules.yml: | groups: - name: example_alert rules: - alert: PodCpuUsage expr: (sum(container_cpu_usage_seconds_total) by (pod, namespace, container) * 100) < 10000 for: 5m labels: severity: critical annotations: summary: "Pod {{ $labels.pod }} CPU usage below threshold" description: | Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} has CPU usage below 10000 in the last 5 minutes.
(注:修正了原规则中escription的拼写错误,应为description)
4. 生效配置
重启Alertmanager加载新模板,重启Prometheus加载修改后的告警规则,之后触发的告警邮件就会显示告警真正激活的时间,而非通知发送时间。
内容的提问来源于stack exchange,提问作者user22036353
相关产品推荐
相关产品推荐

