Logstash 日志文件中不同类型日志的Grok模式

Logstash 日志文件中不同类型日志的Grok模式,logstash,logstash-grok,Logstash,Logstash Grok,我正在尝试为我的日志文件编写grok模式,它有三种不同类型的日志,我想在类型名称(TYPE1、TYPE2、TYPE3)上设置一个过滤器,然后为这个日志文件编写三种不同的grok模式。 此外,我的日志文件是一个csv分隔文件 日志文件: 类型1,单词,单词,单词,数字 类型2,字,字,字,字 类型3,num,word,num,word 以下是我迄今为止所尝试的: filter { if [message] =~ /TYPE1/ { grok { match => [ "message

我正在尝试为我的日志文件编写grok模式,它有三种不同类型的日志,我想在类型名称(TYPE1、TYPE2、TYPE3)上设置一个过滤器,然后为这个日志文件编写三种不同的grok模式。 此外,我的日志文件是一个csv分隔文件

日志文件:
类型1,单词,单词,单词,数字
类型2,字,字,字,字
类型3,num,word,num,word

以下是我迄今为止所尝试的:

filter {
if [message] =~ /TYPE1/ {
grok {
    match => [ "message", "%{WORD:type},%{WORD:a1"},%{WORD:a2"},%{WORD:a3"},%{POSINT:a4"}]
     }
   }
}
这不管用。 此外,在这个配置文件中,我还为其他文件(运行良好)编写了grok模式,如:

给我带来问题的日志文件有type=sometype3,我在任何地方都没有提到


谢谢

从成功购买一种类型开始,例如:

filter {
  if [type] == "sometype1" {
    grok {
      match => [ "message", "%{WORD:type",%{WORD:abc"}]
    }
  }
}
如果失败,您的日志数据中没有具有适当值的type字段,或者您的grok模式不正确

使用

如果您现在设法解析了一种类型,请尝试通过添加

if [type] == "sometype1" or [type] == "sometype2" or [type] == "sometype3"
另一种方法是

if [type] == "sometype1" {

}
else if [type] == "sometype2" {

}

在您的示例中,您正在使用正则表达式查看是否应该运行正则表达式。那是太多的开销了

这里有两个想法:

首先,使用grok将第一个单词提取到一个变量中,并将其余信息放回消息中:

"%{WORD:myType},%{GREEDYDATA:message}"
(您需要在该配置中使用
覆盖

然后,您可以使用精确的条件来确定要使用哪个后续grok模式:

if [myType] == "type1" {
}
...
其次,还可以在一个grok表达式中列出多个模式:

match => [ "message", "pattern1", "pattern2", "pattern3" ]

但是这也很贵!(对照文档检查语法以确保!)。

我认为这样做不需要条件。如果您有静态类型值(“TYPE1”、“TYPE2”或“TYPE3”),那么为什么不为每个类型指定一个grok模式:

我已经尝试过,它适用于您给定的格式:

TYPE1,word,word,word,num
TYPE2,word,word,word,word
TYPE3,num,word,num,word
日志文件如下所示:

TYPE1,a,b,c,4
TYPE2,a,b,c,d
TYPE3,1,b,3,d

我能够使用您提到的方法解析多个日志文件。我不能做的是解析一个特定的日志文件,为此我必须根据上面提到的一个关键字(TYPE1/TYPE2/TYPE3)编写不同的grok模式。不,您可以直接使用type field,不需要条件。仅使用
grok
模式。Logstash是否有足够的效率在第一次查看类型时选择正确的grok模式,还是必须按照指定的顺序逐个检查每个模式,并在正确的模式与日志条目匹配时停止?
TYPE1,word,word,word,num
TYPE2,word,word,word,word
TYPE3,num,word,num,word
TYPE1,a,b,c,4
TYPE2,a,b,c,d
TYPE3,1,b,3,d