Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱
2022/11/24 4:24:00
本文主要是介绍Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述
通过之前的文章 - Prometheus Alertmanager 生产配置趟过的坑总结, 我们已经知道 AlertManager 作为告警平台,是非常强大的,可以去重 (deduplicating),分组 (grouping),并将它们路由 (routing) 到正确的接收器 (receiver) 集成,如电子邮件,微信,或钉钉。它还负责处理警报的静默/屏蔽 (silencing)、定时发送/不发送 (Mute) 和抑制 (inhibition) 问题。
正常的 AlertManager 处理告警流程,是要经过 Alerts -> Route -> Receivers 这么一个步骤的
- Alerts 里带了一些标签,如 env, team, job 等
- 根据提前编辑好的 Route, 对 alerts 进行路由,比如 env=prod 的发给哪些 receiver, team=db 的发给哪些人。…
- 在 Receivers 里已经提前录入了这些需要处理 prod,处理 db 告警的 receivers 邮箱。告警这样发给对应的收件人。
但是,假如我在 Alerts 里自带收件人信息(如邮箱),能不能直接使用?而不需要再录入所有的 receivers。
答案当然是可以!通过模板(template)实现这个需求。Let’s GO!💪💪💪
模板(Template)简介
AlertManager 模板最初的目的是为了对告警的消息做定制化的。
比如同样的 Alerts,我:
- 通过 SMS 发送,期望是纯文本格式;
- 通过 email 发送,期望是 HTML 格式;
- 通过钉钉、企微发送,期望是 Markdown 格式;
- 而且在这些渠道中,
- 标题是不同的排列组合
- 告警内容也是不同的段落格式和用词(比如通过钉钉、企微会加入更多的 emoji)
AlertManager 模板是和 Prometheus 模板一样,使用的同样是 Go template。当然,具体的数据和函数会有细微的区别,因为在这里主要处理的是告警组而非单个告警。
示例如下:
receivers: - name: emergency slack_configs: - api_url: https://hooks.slack.com/services/XXXXXXXX channel: '#emergency' title: 'Alerts in {{ .GroupLabels.cluster }} {{ .GroupLabels.env }}!'
AlertManager 进阶
除了模板化 txt 字段,通知的定义(比如:发给谁)也可以被模板化。通常每个 team 都有自己的路由树,以及相对应的收件人(receivers)。如果另一个团队(不是监控团队,也不是运维团队,而是测试等团队)想要发送给自己团队告警,他们需要从头到尾设置 label、设置匹配其团队 labels 的路由树、把团队内的收件人信息配置到 AlertManager 的 receiver 里。
那如果你是监控团队,你用 AlertManager 做了个告警平台提供给外部团队甚至客户使用,每次都得这么搞会有“亿点点”麻烦。
该怎么办呢?🤔🤔🤔
解决方案
解决方案就是:
- Label
- AlertManager 通知模板
首先,直接在 Label 里提供相关的接收人信息,然后通过 AlertManager 的模板,将 receiver
-> to
写上对应的模板即可。
具体演示如下:
方案演示
首先,是包含收件人信息 label 的 alerts,如下:
[ { "labels": { "alertname": "<requiredAlertName>", "<labelname>": "<labelvalue>", "email_to": "foo@example.com,bar@example.com", ... }, "annotations": { "<labelname>": "<labelvalue>", }, "startsAt": "<rfc3339>", "endsAt": "<rfc3339>", "generatorURL": "<generator_url>" }, ... ]
每个 alert 都提供 email_to
这样的 label。
然后,在 AlertManager 中,可以设置如下 route
和 receiver
, 如下:
global: smtp_smarthost: 'localhost:25' smtp_from: 'smtp@example.com' route: group_by: [email_to, alertname] receiver: customer_email receivers: - name: customer_email email_configs: - to: '{{ .GroupLabels.email_to }}' headers: subject: 'Alert: {{ .GroupLabels.alertname }}'
注意,group_by
必须包括 email_to
label,这样它才算 .GroupLabels.
下的一员。
当有 alerts 来时,如 "email_to": "foo@example.com,bar@example.com"
, 会 route 到 customer_email
, 其收件人是 {{ .GroupLabels.email_to }}
, 会被模板化为: foo@example.com,bar@example.com
, 告警邮件自然就会发过去。
完成!🎉🎉🎉
本文由东风微鸣技术博客 EWhisper.cn 编写!
这篇关于Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22程序员出海做 AI 工具:如何用 similarweb 找到最佳流量渠道?
- 2024-12-20自建AI入门:生成模型介绍——GAN和VAE浅析
- 2024-12-20游戏引擎的进化史——从手工编码到超真实画面和人工智能
- 2024-12-20利用大型语言模型构建文本中的知识图谱:从文本到结构化数据的转换指南
- 2024-12-20揭秘百年人工智能:从深度学习到可解释AI
- 2024-12-20复杂RAG(检索增强生成)的入门介绍
- 2024-12-20基于大型语言模型的积木堆叠任务研究
- 2024-12-20从原型到生产:提升大型语言模型准确性的实战经验
- 2024-12-20啥是大模型1
- 2024-12-20英特尔的 Lunar Lake 计划:一场未竟的承诺