我正在处理普罗米修斯警报,我想根据正则表达式模式动态地为所有警报添加一个'team'标签。我有一个警告示例:
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."匹配的指标添加了带有值'data'的'team'标签。在'container'和'pod'标签中。
但是,我想把这个逻辑应用到我所有的警报,而不仅仅是这个特定的警报。在Prometheus或Alertmanager中是否有一种方法可以动态地做到这一点?如有任何指导,将不胜感激。
我尝试使用label_replace函数在警报的表达式中,对于上面提到的特定警报,它按预期工作。我希望找到一种方法,将这个标签添加到我的所有警报,而不必单独修改每个警报表达式。
有办法做到这一点吗?如有任何帮助或指导,将不胜感激。
如果不重写所有规则,就不可能根据条件向警报添加标签。
对于您的确切问题的最佳解决方案是为所有环境/团队/条件创建单独的警报,并仅添加静态标签。
类似
的内容- 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