Alertmanager 处理由客户端应用程序(如 Prometheus 服务器)发送的告警。它负责对告警进行去重、分组,并将它们路由到正确的接收器集成,如电子邮件、PagerDuty 或 OpsGenie。它还负责告警的静默和抑制。
以下描述了 Alertmanager 实现的核心概念。请参阅配置文档以了解如何更详细地使用它们。
分组
分组将性质相似的告警归类为单个通知。这在大规模故障期间尤其有用,因为此时许多系统同时出现故障,可能同时触发数百到数千个告警。
示例: 集群中运行着数十或数百个服务实例,此时发生了网络分区。一半的服务实例无法再访问数据库。Prometheus 中的告警规则被配置为在每个服务实例无法与数据库通信时发送告警。因此,数百个告警被发送到 Alertmanager。
作为用户,你只想收到一条通知,同时仍然能够准确查看哪些服务实例受到了影响。因此,可以配置 Alertmanager 按集群和告警名称对告警进行分组,从而发送一条简洁的通知。
告警的分组、分组通知的时间以及这些通知的接收器均通过配置文件中的路由树进行配置。
抑制
抑制是指在某些告警已经触发的情况下,抑制某些其他告警通知的概念。
示例: 一个告警正在触发,通知整个集群不可达。可以配置 Alertmanager 在该特定告警触发时,静默所有与该集群相关的其他告警。这可以防止发送数百或数千个与实际问题无关的触发告警的通知。
抑制规则通过 Alertmanager 的配置文件进行配置。
静默
静默是一种在给定时间段内简单地屏蔽告警的方式。静默基于匹配器进行配置,类似于路由树。传入的告警会被检查是否匹配活动静默的所有相等或正则表达式匹配器。如果匹配,则不会为该告警发送任何通知。
静默在 Alertmanager 的 Web 界面中进行配置。
客户端行为
Alertmanager 对其客户端的行为有特殊要求。这些要求仅与不使用 Prometheus 发送告警的高级用例相关。
高可用性
Alertmanager 支持配置集群以实现高可用性。可以使用 --cluster-* 标志进行配置。
重要的是不要在 Prometheus 和其 Alertmanager 之间进行负载均衡,而应将 Prometheus 指向所有 Alertmanager 的列表。
告警限制(可选)
Alertmanager 支持配置每个告警名称的活跃告警数量上限。可以使用 [--alerts.per-alertname-limit] 标志进行配置。
当达到限制时,任何新告警将被丢弃,已知告警的心跳仍会被处理。已知告警(fingerprint)会自动过期以为新告警腾出空间。
此功能在向 Alertmanager 发送意外大量相同告警实例时非常有用。限制每个告警名称的告警数量可以防止可靠性问题,并避免告警接收器被淹没。
alertmanager_alerts_limited_total 指标显示因每个告警名称限制而被丢弃的告警总数。启用 alert-names-in-metrics 功能标志将在该指标中添加 alertname 标签。