我正在使用 Prometheus 警报,我想根据正则表达式模式为我的所有警报动态添加“团队”标签。我有一个示例警报:
expr: label_replace(label_replace(increase(kube_pod_container_status_restarts_total{job="kube-state-metrics",namespace=~".*",pod!~"app-test-.*"}[30m]) > 2, "team", "data", "container", ".*test.*"), "team", "data", "pod", ".*test.*")
此示例警报为与正则表达式模式“.test”匹配的指标添加了值为“数据”的“团队”标签。在“容器”和“吊舱”标签中。
但是,我想将此逻辑应用于我的所有警报,而不仅仅是这个特定的警报。有没有办法在 Prometheus 或 Alertmanager 中动态执行此操作?任何指导将不胜感激。
我尝试在警报的表达式中使用 label_replace 函数,对于上述特定警报,它按预期工作。我期待找到一种方法将此标签添加应用于我的所有警报,而无需单独修改每个警报表达式。
有办法实现吗?任何帮助或指导将不胜感激。
AFAIK,如果不重写所有规则,就不可能根据条件向您的警报添加标签。
针对您具体问题的最佳解决方案是为所有环境/团队/条件创建单独的警报,并仅添加静态标签。
类似的东西
- alert: many_restarts_data
expr: increase(kube_pod_container_status_restarts_total{job="kube-state-metrics",namespace=~".*",pod!~"app-test-.*", container=~".*test.*"}[30m]) > 2
labels:
team: data
- alert: many_restarts_data
expr: increase(kube_pod_container_status_restarts_total{job="kube-state-metrics",namespace=~".*",pod!~"app-test-.*", container=~".*prod.*"}[30m]) > 2
labels:
team: sre
但这需要将警报数量乘以团队数量。
我认为更简单的解决方案是使用 alertmanager 的路由功能(或 PagerDuty,如果它提供类似的功能)。通过这种方式,您可以在 alertmanager 配置中编写标准,哪些警报带有哪些标签应该路由到哪些团队,并且它独立于警报创建部分工作。
routes:
- matchers:
- container =~ ".*test.*"
- severity =~ ".*test.*"
- alertname =~ "my_alert_1|my_alert_2"
receiver: team-data
- matchers:
- container =~ ".*prod.*"
- severity =~ ".*prod.*"
- alertname =~ "my_alert_1|my_alert_2"
receiver: team-sre