如何在Prometheus告警中结合单引号使用换行符?
Prometheus告警单引号场景下实现换行的解决方案
核心问题
你需要在Prometheus告警的description注解中实现换行,但因字段内包含{{ $value | printf "%.2f" }}这类带双引号的模板语法,无法直接用双引号包裹整个字段,且直接换行未生效。
最优解决方案
使用YAML的**字面量块标量(|)**定义description内容,它会原样保留文本中的换行符,同时无需转义内部的双引号,完美适配你的场景。
配置示例
- alert: MemoryHigh expr: (x_process_resident_memory_bytes / y_resident_memory_limit_bytes) * 100 > 90 for: 2m labels: x: y annotations: summary: Memory high (instance {{ $labels.instance }}) description: | {{ $labels.pod }} in {{ $labels.environment}} is using more than 90% of allocated RAM Memory = {{ $value | printf "%.2f" }} Environment = {{ $labels.environment}}
原理说明
- 字面量块标符
|会完整保留文本中的换行、缩进(注意块内内容的缩进层级要与description:保持一致) - 块内的模板语法(包括带双引号的
printf参数)无需转义,Prometheus模板引擎可正常解析 - 最终告警展示时,换行会被正确渲染
替代方案(单引号包裹写法)
如果坚持使用单引号包裹,可在单引号内显式写入\n实现换行,Prometheus配置解析器支持这种写法:
description: '{{ $labels.pod }} in {{ $labels.environment}} is using more than 90% of allocated RAM\nMemory = {{ $value | printf "%.2f" }}\nEnvironment = {{ $labels.environment}}'
此写法可读性较差,优先推荐块标量方式。
内容的提问来源于stack exchange,提问作者cosmos-1905-14
相关产品推荐
相关产品推荐

