kubernetes 使用Regex在Prometheus中动态添加“team”标签

vlju58qv  于 2023-04-11  发布在  Kubernetes
关注(0)|答案(1)|浏览(136)

我正在使用Prometheus alerts,我想基于正则表达式模式动态地将“团队”标签添加到我的所有alerts中。我有一个示例alert:

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.*")

此警报示例为与“container”和“pod”标签中的正则表达式模式“.test.”匹配的指标添加值为“data”的“team”标签。
但是,我想将此逻辑应用于我的所有警报,而不仅仅是这个特定的警报。有没有一种方法可以在Prometheus或Alertmanager中动态地做到这一点?任何指导都将不胜感激。
我尝试在警报的表达式中使用label_replace函数,对于上面提到的特定警报,它可以正常工作。我希望找到一种方法,将此标签添加应用于所有警报,而无需单独修改每个警报表达式。
有没有办法做到这一点?任何帮助或指导将不胜感激。

1sbrub3j

1sbrub3j1#

此外,如果不重写所有规则,则无法根据条件向警报添加标签。
针对您的确切问题的最佳解决方案是为所有环境/团队/条件创建单独的警报,只需添加静态标签。
沿着于

- 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

相关问题