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

Pan*_*ion 5 grafana-loki

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

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

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

我尝试使用本机 LogLQ 的containshasPrefix模板命令,因为文档表明它们可以与块一起使用if else。该文档不清楚如何在管道命令label_formatline_format管道命令中构建这些块。但根据方法的不同,它要么返回格式错误,要么不执行任何操作。

一个有效的例子将不胜感激。谢谢。

注意:尝试将其标记为 LogQL 主题,但没有足够的声誉来执行此操作。

Pan*_*ion 5

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

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

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