如何处理Prometheus告警模板中first()调用空向量的错误?
Prometheus告警模板空向量处理方案
你遇到的问题是因为空向量无法调用first()函数,解决核心是先判断查询结果是否为空,再分支处理:
修改后的YAML模板如下:
annotations: test: >- {{- $results := printf "metric{instance='%s'}" $labels.instance | query -}} {{- if $results -}} Foo: "{{ (index $results 0).Labels.label_a }}" {{- else -}} nothingfound {{- end -}}
关键说明:
- 先将查询结果存入
$results变量,避免重复执行查询 - 通过
if $results直接判断结果是否非空(Prometheus模板中空向量会被识别为false) - 非空时用
index $results 0替代first()获取第一个元素,逻辑等价但不会在空向量时报错 - 空向量时直接输出
nothingfound - 模板中的
-用于控制空白字符,避免输出多余的换行或空格
内容的提问来源于stack exchange,提问作者simPod
相关产品推荐
相关产品推荐

