如何修复 Prometheus 中的错误 undefined variable "$labels"?

How to fix the error undefined variable "$labels"in Prometheus?

我用过这个警报

        - alert: my alert
          expr: status{status="ERROR"}
          for: 30m
          labels:
            severity: WARNING   
          annotations:
            myData: "{{ $labels.myData }}"
            myData2: "{{ $labels.myData2 }}"

我收到一个错误 错误 - 模板/:“prometheus/templates/alertmanager-prometheusRule.yaml”中的解析错误:模板:prometheus/templates/alertmanager-prometheusRule.yaml:419:未定义的变量“$labels”

我在

中看到了同样的问题

但是没看懂怎么解决

在配置中我使用了这个数据

text: "{{ range .Alerts -}}{{ .Annotations.myData }}{{ .Annotations.myData2}}{{ end-}}"

错误来自 helm lint

您似乎正在通过 helm chart 部署 Prometheus 设置。 这会导致问题,因为 helm 模板和 Prometheus 中的警报模板都使用相同的分隔符({{}})。

{{ $labels.myData }} 必须完整地到达 prometheus 配置,所以 helm 不能处理它。

最简单的方法是使用:

{{ "{{" }} $labels.myData }}

{{ "{{" }} 块将由 helm 处理并生成 {{ 作为结果,该行的其余部分不会被更改,并将为您提供所需的结果。

这是一个 python 脚本,用于对文件进行@bjakubski 的批量更改:


import sys
import re

f = sys.argv[1]

regex = re.compile(r"(\{\{.*?\}\})")

with open (f, "r") as myfile:
     s=myfile.read()

ret = regex.sub(lambda x:x.group(1)[0:2]+' "{{" }}'+ x.group(1)[2:],s)

print ret

你可以使用这个

您可以简单地使用 single-qoutes ''

而不是使用双引号 ""

例如这里会是这样的:

annotations:
  myData: '{{ $labels.myData }}'
  myData2: '{{ $labels.myData2 }}'

来源:Prometheus Docs