使用正则表达式将“团队”标签动态添加到 Prometheus 中的警报

问题描述 投票:0回答:1

我正在使用 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 函数,对于上述特定警报,它按预期工作。我期待找到一种方法将此标签添加应用于我的所有警报,而无需单独修改每个警报表达式。

有办法实现吗?任何帮助或指导将不胜感激。

regex kubernetes label prometheus prometheus-alertmanager
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.