1

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

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

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

我已经尝试使用本机 LogLQ 的containshasPrefix模板命令,因为文档表明它们可以与if else块一起使用。文档不清楚如何label_format在管道命令或line_format管道命令中构建这些块。但根据方法,它要么返回格式错误,要么不做任何事情。

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

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

4

2 回答 2

2

我相信我已经得到了一些工作line_format

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

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

于 2021-10-15T08:30:55.950 回答
1

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

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

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

于 2021-11-15T15:31:33.947 回答