某些 Prometheus 警报最终为 "Not grouped"

Certain Prometheus alerts end up as "Not grouped"

我是 运行 Prometheus (bitnami/prometheus:2.25.2),在 AKS 1.19.9 上使用 Prometheus Alertmanager (bitnami/alertmanager:0.21.0)。
警报由 Alertmanager 处理,Alertmanager 又将警报路由到松弛通道。

我注意到最近某些警报最终出现在 Prometheus Alertmanager WebUI 的“未分组”部分,而没有进入 Slack 频道。

我无法解释这一点,因为它们按 [cluster, alertname] 分组并且确实包含这些标签(在模糊的屏幕截图中,但 cluster 包含相同的值)。

让事情变得更加混乱(无论如何对我来说)有一些警报也有这些标签并且被正确发送。

配置中的警报管理器路由树:

spec:
  route:
    groupWait: 30s
    groupInterval: 5m
    repeatInterval: 3h
    receiver: fallback
    routes:
    - matchers:
      - name: team
        value: platform-engineering
      groupBy: [cluster, alertname]
      receiver: fallback
      routes:
      - matchers:
        - name: severity
          value: critical
        groupBy: [cluster, alertname]
        receiver: alerts-critical
      - matchers:
        - name: severity
          value: warning
        groupBy: [cluster, alertname]
        receiver: alerts-warning

有人关心这里出了什么问题吗?我显然遗漏了一些东西:-)
非常感谢!

我想我找到了问题所在。 集群上的 Prometheus 运行 由 Prometheus operator 提供:bitnami/prometheus-operator:0.53.1 上面列出的路由树是您在查看 Prometheus Alert 管理器配置 before 部署时看到的。

但是……当您在部署后访问 Prometheus Alert 管理器 WebUI 并单击页面顶部的“状态”选项卡时,它会讲述一个不同的故事。 我发现操作员在部署期间向路由树中注入了一个额外的匹配器。

这显然会对警报的匹配和分组产生影响,特别是如果命中路由树的警报不是来自命名空间监视。

在我的例子中,只有监控工作负载驻留在此处,并且大部分工作负载来自 monitoring.

之外的命名空间

阅读 Prometheus Operator 存储库上的 GitHub 问题 3737,证实了这一怀疑。

作为解决方法,我尝试了 Till Adam 的建议:

kind: clustermanagement
namespace: prometheus
source_namespace: '{{ $labels.namespace }}'

有了这个,我们在 prometheus 命名空间中有一个 alertmanagerconfig 负责所有与集群相关的警报,无论指标最初具有什么命名空间标签。

请注意,使用此功能时还应调整您的警报规则!警报源自的实际命名空间现在将位于 source_namespace.

我遇到的唯一极端情况是您最终丢失了名称空间标签。这似乎是在警报表达式使用聚合运算符(例如计数)时发生的。

如果我没记错的话,PR3821 将介绍针对此挑战的修复程序(Global alertmanagerconfig)。