Regex 是否在logstash筛选器中使用多行打印数据?

Regex 是否在logstash筛选器中使用多行打印数据?,regex,logging,logstash,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 => "

我试图使用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解析整行。任何想法和意见都会有帮助。谢谢。

如果要匹配所有与“#S#”匹配的行,则应将否定设置为false。如果要获取与特定模式不匹配的所有行,请使用否定

至于您的实际问题,multiline会将所有相关行放入“message”字段,包括换行符(\n,我假设\r您也在运行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
如果正确设置多行过滤器

希望这有帮助