菜单
开源

(可选) Grafana Mimir Alertmanager

Mimir Alertmanager 为 Prometheus Alertmanager 增加了多租户支持和水平可伸缩性。Mimir Alertmanager 是一个可选组件,用于接收来自 Mimir Ruler 的告警通知。Alertmanager 对告警通知进行去重和分组,并将其路由到通知通道,例如电子邮件、PagerDuty 或 OpsGenie。

注意

要在单体部署中运行 Mimir Alertmanager,请使用选项 -target=all,alertmanager 运行 Mimir。

多租户

与其他 Mimir 组件一样,Mimir Alertmanager 中的多租户使用租户 ID 请求头。每个租户都有独立的告警路由配置和 Alertmanager UI。

租户配置

每个租户都有一个 Alertmanager 配置,定义了通知接收者和告警路由。Mimir Alertmanager 使用与 Prometheus Alertmanager 相同的配置文件

注意

Mimir Alertmanager 根据 -server.path-prefix 标志设置的路径公开配置 API。它不使用 -http.alertmanager-http-prefix 标志设置的路径。

如果您使用默认配置运行 Mimir(-server.path-prefix 的默认值为 /),则只需为 mimirtool 命令的 --address 标志设置主机名;不要设置特定路径的地址。例如,/ 是正确的,/alertmanager 是不正确的。

您可以使用 mimirtool 命令验证配置文件

bash
mimirtool alertmanager verify <ALERTMANAGER CONFIGURATION FILE>

以下示例命令演示了如何使用 mimirtool 上传租户的 Alertmanager 配置

bash
mimirtool alertmanager load <ALERTMANAGER CONFIGURATION FILE>  \
  --address=<ALERTMANAGER URL>
  --id=<TENANT ID>

以下示例命令演示了如何使用 mimirtool 检索租户的 Alertmanager 配置

bash
mimirtool alertmanager get \
  --address=<ALERTMANAGER URL>
  --id=<TENANT ID>

以下示例命令演示了如何使用 mimirtool 删除租户的 Alertmanager 配置

bash
mimirtool alertmanager delete \
  --address=<ALERTMANAGER URL>
  --id=<TENANT ID>

在租户上传 Alertmanager 配置后,租户可以通过 /alertmanager 端点访问 Alertmanager UI。

备用配置

当租户没有 Alertmanager 配置时,Grafana Mimir Alertmanager 将使用备用配置。默认情况下,始终设置备用配置。您可以通过 -alertmanager.configs.fallback 命令行标志覆盖默认的备用配置。

警告

如果没有备用配置或特定租户配置,则无法访问 Alertmanager UI,并且该租户的 Ruler 通知将失败。

租户限制

Grafana Mimir Alertmanager 有许多按租户设置的限制,详细信息请参阅限制。每个 Mimir Alertmanager 限制配置参数都有一个 alertmanager 前缀。

Alertmanager UI

Mimir Alertmanager 通过 /alertmanager 端点公开与 Prometheus Alertmanager 相同的 Web UI。

在启用多租户模式运行 Grafana Mimir 时,Alertmanager 要求所有 HTTP 请求都包含租户 ID 请求头。租户只能看到发送到其 Alertmanager 的告警。

有关租户 ID 请求头和 Alertmanager 端点的完整参考,请参阅 HTTP API

您可以配置 UI 和 HTTP API 的 HTTP 路径前缀

  • -http.alertmanager-http-prefix 配置 Alertmanager 端点的路径前缀。
  • -alertmanager.web.external-url 配置 Alertmanager 告警中生成的源 URL 以及从何处获取 Web 资源。

注意

除非您在 Alertmanager API 前使用反向代理重写路由,否则 -alertmanager.web.external-url 中设置的路径前缀必须与 -http.alertmanager-http-prefix 中设置的路径前缀匹配,后者默认为 /alertmanager

如果路径前缀不匹配,HTTP 请求路由可能无法按预期工作。

使用反向代理

使用反向代理时,配置 HTTP 路径时请使用以下设置

  • 设置 -http.alertmanager-http-prefix 以匹配您的反向代理配置中的代理路径。
  • -alertmanager.web.external-url 设置为您的反向代理服务的 URL。

模板化

Mimir Alertmanager 在 Prometheus Alertmanager 的默认模板函数之上添加了一些自定义模板函数。

函数参数描述
tenantID-返回告警所属的租户 ID。
queryFromGeneratorURLgenerator_url从 Prometheus 设置的告警的 GeneratorURL 返回 URL 解码的查询。示例:{{ queryFromGeneratorURL (index .Alerts 0).GeneratorURL }}
grafanaExploreURLgrafana_URL,datasource,from,to,expr根据输入参数返回 Grafana explore 的带范围查询链接。示例:{{ grafanaExploreURL "https://foo.bar" "xyz" "now-12h" "now" (queryFromGeneratorURL (index .Alerts 0).GeneratorURL) }}

分片和复制

Alertmanager 按租户对告警进行分片和复制。分片要求 Alertmanager 副本数量大于或等于由 -alertmanager.sharding-ring.replication-factor 标志配置的复制因子。

Grafana Mimir Alertmanager 副本使用存储在 KV 存储中的哈希环来发现它们的对等节点。这意味着任何 Mimir Alertmanager 副本都可以响应任何租户的任何 API 或 UI 请求。如果接收到 HTTP 请求的 Mimir Alertmanager 副本不拥有请求所属的租户,请求将内部路由到适当的副本。

要配置 Alertmanagers 的哈希环,请参阅配置哈希环

注意

在单租户模式下运行时,将副本数量扩展到大于复制因子没有任何好处,因为 Mimir Alertmanager 是按租户而不是按单个告警进行分片的。

状态

Mimir Alertmanager 将告警状态存储在本地磁盘,位置由 -alertmanager.storage.path 配置。

警告

在不使用复制运行 Mimir Alertmanager 时,请确保 -alertmanager.storage.path 目录的持久性,以避免丢失告警状态。

Mimir Alertmanager 还会定期将告警状态存储在由 -alertmanager-storage.backend 配置的存储后端中。当 Alertmanager 启动时,它会尝试从其他 Alertmanager 副本加载给定租户的告警状态。如果从其他 Alertmanager 副本加载失败,Alertmanager 会回退到定期存储在存储后端的状态。

在集群中断的情况下,此回退机制会恢复先前状态的备份。由于备份是定期进行的,此回退机制不能保证恢复最新状态。

Ruler 配置

您必须通过 -ruler.alertmanager-url 标志配置 Ruler 的 Alertmanagers 地址。

将地址指向 Alertmanager 的 API。您可以通过 -http.alertmanager-http-prefix 标志配置 Alertmanager 的 API 前缀,默认为 /alertmanager。例如,如果 Alertmanager 侦听在 http://mimir-alertmanager.namespace.svc.cluster.local 并且使用默认 API 前缀,则将 -ruler.alertmanager-url 设置为 http://mimir-alertmanager.namespace.svc.cluster.local/alertmanager

启用 UTF-8

为了支持来自 OpenTelemetry (OTel) 数据源的告警,Prometheus Alertmanager 已添加了对 UTF-8 的支持。在 Mimir 2.12 及更高版本中,Grafana Mimir Alertmanager 支持此可选功能。

警告

启用然后禁用 UTF-8 严格模式可能会破坏现有的租户配置,如果租户在启用该模式时在其 Alertmanager 配置中添加了 UTF-8 字符。一旦启用,禁用 UTF-8 严格模式时请务必小心。

对于新的 Mimir 安装,在创建任何租户配置之前启用对 UTF-8 的支持。您可以通过将 utf8-strict-mode-enabled 设置为 true 来实现。

对于现有的 Mimir 安装,有一些重大变更可能会影响现有的租户配置。请按照这些说明操作,确保在启用 UTF-8 之前所有现有的租户配置都与 UTF-8 兼容。

有哪些重大变更?

为了支持 UTF-8,Alertmanager 添加了一个新的标签匹配器(通常缩写为 matchers)解析器,其中包含一些重大变更。

注意

如果您不熟悉 matchers 或它们如何在租户配置中使用,您可以在 Prometheus Alertmanager 文档中找到更多相关信息。

Grafana Mimir 提供了许多工具来帮助您识别任何现有租户配置是否受到这些重大变更的影响,并以向后兼容的方式迁移任何受影响的租户配置,这不会改变现有 matchers 的行为,即使在未启用 UTF-8 的 Mimir 安装中也能正常工作。

识别受影响的租户配置

要识别受影响的租户配置,请执行以下步骤

  1. 确保 Mimir 运行版本 2.12 或更高。

  2. 启用 utf8-migration-logging-enabled 并将 log_level 设置为 debug。您必须重新启动 Mimir 才能使更改生效。

  3. 要识别与 UTF-8 不兼容的租户配置(这意味着租户配置加载失败并使用备用配置),请在 Mimir 服务器日志中搜索包含 Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible 的行。每行日志都包含租户配置中的无效 matcher 和受影响租户的 ID。例如

    msg="Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted. If you are still seeing this message please open an issue." input="foo=" err="end of input: expected label value" suggestion="foo=\"\"" user="1"

    在此示例中,User ID 为 1 的租户在其租户配置 foo= 中有一个不兼容的 matcher,应将其更改为建议的 foo=""

  4. 要识别与 UTF-8 兼容但包含在启用 UTF-8 后行为可能发生变化的 matchers 的租户配置,请在 Mimir 服务器日志中搜索包含 Matchers input has disagreement 的行。当 matcher 有效,但由于增加了对 UTF-8 的支持而导致其在启用 UTF-8 后行为可能不同时,就会发生 disagreement。

    msg="Matchers input has disagreement" input="foo=\"\\xf0\\x9f\\x99\\x82\"" user="1"

注意

租户配置可能既与 UTF-8 不兼容又存在 disagreement,因为单个租户配置可以在不同的路由和抑制规则中包含大量 matchers。

修复租户配置

要修复任何已识别的租户配置,请执行以下步骤

  1. 使用 mimirtool 中的 migrate-utf8 命令来修复任何与 UTF-8 不兼容的租户配置。此命令可以以向后兼容的方式迁移现有租户配置,这不会改变现有 matchers 的行为,即使在未启用 UTF-8 的 Mimir 安装中也能正常工作。如果您无法使用 mimirtool,您可以通过应用 Mimir 服务器日志中的每个建议手动编辑租户配置。

  2. 您必须逐个查看存在 disagreement 的租户配置。根据 disagreement 的性质,您可能不需要修复存在 disagreement 的 matcher。例如,\xf0\x9f\x99\x82 是 🙂 表情的字节序列。如果目的是匹配字面上的 🙂 表情,则无需更改。但是,如果目的是匹配字面上的 \xf0\x9f\x99\x82,则需要将 matcher 更改为使用 \\xf0\\x9f\\x99\\x82

注意

在租户配置中很少发现 disagreement 的情况,因为大多数租户不需要匹配标签中包含字面 UTF-8 字节序列的告警。

最后步骤

  1. 在识别并修复所有受影响的租户配置后,再次检查 Mimir 服务器日志,确保您没有遗漏任何租户配置。

  2. 要启用 UTF-8,请将 utf8-strict-mode-enabled 设置为 true。您必须重新启动 Mimir 才能使更改生效。

  3. 要确认是否启用了 UTF-8,请在 Mimir 服务器日志中搜索 Starting Alertmanager in UTF-8 strict mode。如果您找到 Starting Alertmanager in classic mode,则表示未启用 UTF-8。

  4. 任何不兼容的租户配置都将加载失败。要识别是否有任何租户配置加载失败,请在 Mimir 服务器日志中搜索包含 error applying config 的行,或查询 cortex_alertmanager_config_last_reload_successful 指标中为 0 的值。

  5. 您可以禁用 utf8-migration-logging-enabled 并将 log_level 设置回之前的值。