某些 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)。
我是 运行 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)。