LogQL - label_format 有条件地格式化标签

LogQL - label_format conditionally format a label

我有一个日志流,我从中提取一组要设置为标签或指标值的字段。流不是标准格式,因此我使用 regexp 管道命令提取字段,如下所示。

(...)
 | regexp "(?P<api>\w+)\sAPI"
 | regexp "\[performed\.(?P<action>\w+)"
 | regexp "duration\s\[(?P<duration_ms>\d+)"
 | regexp "response \[(?P<response>.*?)\]"

问题是 api 捕获的字段在某些交互中未被填充,我想更新这些情况以便设置默认值 - 用于演示目的。

我已经尝试使用本机 LogLQ 的 contains and hasPrefix 模板命令,因为文档表明它们可以与 if else 块一起使用。该文档不清楚如何在 label_formatline_format 管道命令中构建这些块。但根据方法的不同,它要么 returns 格式错误,要么什么都不做。

一个工作示例将不胜感激。 谢谢。

注意:已尝试将其标记为 LogQL 主题,但没有足够的声誉来这样做。

我相信我已经得到了一些与 line_format 一起工作的东西:

{environment=~"$environment",level=~"$level"} | json | line_format "{{ if hasSuffix `Exception` .thrown_name  }} Exception occurred! {{end}} {{.message}}" |~ "(?i)$grep"

反引号的文档很难找到,方法参数的顺序也有点不同。希望这有帮助吗?

通过@AnthonyA 的回复,我能够在提取字段后使用 label_format 模板函数修改其值。

 (..)
 | regexp "response \[(?P<response>.*?)\]"
 (..)
 | label_format api=`{{ if hasPrefix "Error" .response }}ERROR{{else}}{{.response}}{{end}}`
 (..)

这样,如果字段的值以“错误”开头,则该字段的值将被替换为 ERROR,否则将保留其原始值。