在logstash过滤器中使用多行打印出数据吗?

时间:2014-06-18 19:39:02

标签: regex logging logstash

我正在尝试使用multiline将日志文件中的多行与相同的起始符号组合在一起。在我的例子中,起始符号是#S#。它看起来像这样:

#S# dsifj sdfojosf sfjosdfoisdjf 
#S# dsfj sdojifoig dfpkgokdfgk 89s7fsjlk sdf
#S# lsdffm dg;;dfgl djfg 930`e`fsd
...
...
...

注意:随机字符仅用于模仿实际日志的内容。

以下是为多行启动写的内容:

multiline {
   type => "table_init"
   pattern => "#S#"
   negate => true
   what => "next"
}

我假设我所写的内容确实将它们组合成一行,但我想知道这是否打印出该行还是我需要使用gork在打印之前解析整行。任何想法和输入都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您尝试匹配所有与#34; #S#"匹配的行,那么您应该将否定设置为false。如果想要获得与某个模式不匹配的所有行,则使用否定。

至于你的实际问题,多行采用所有相关的行并将它们放入"消息"字段,包括换行符(\ n,我假设\ r \ n,如果您正在运行Windows,尽管我从未检查过)。然后,您可以浏览整个消息以获取所需的数据。

因此,如果您设置输出如下:

output { stdout { codec => rubydebug } }

您应该会发现输出的消息将显示为:

"message" = "#S# dsifj sdfojosf sfjosdfoisdjf \n#S# dsfj sdojifoig dfpkgokdfgk 89s7fsjlk sdf\n#S# lsdffm dg;;dfgl djfg 930`e`fsd

如果您正确设置了多线过滤器。

希望这有帮助!