解析日志文件与不同模式的日志Logstash

时间:2017-01-26 19:33:45

标签: logstash elastic-stack kibana-5

我是新事物,因为它在ELK堆栈中的logstash。日志文件具有将数据记录到其中的不同进程。每个进程都会以不同的模式写入日志我想解析这个日志文件。此日志文件中的每个日志都以下面的grok模式启动,

  

%{SYSLOGTIMESTAMP:timestamp}%{SYSLOGHOST:logsource}%{SYSLOGPROG}:+   %{SRCFILE:srcfile}:%{NUMBER:linenumber},其中SRCFILE定义为   [A-ZA-Z0-9 ._-] +

请让我知道如何解析此文件,以便可以解析登录此文件的每个进程的不同类型的日志。

1 个答案:

答案 0 :(得分:1)

由于您尝试传入日志文件,您可能必须使用file输入插件才能从给定路径检索文件或x个文件。所以基本input看起来像这样:

input {

        file {
            path => "/your/path/*"
            exclude => "*.gz"
            start_position => "beginning" 
            ignore_older => 0 
            sincedb_path => "/dev/null"
        }
}

以上只是您重现的示例。因此,一旦获得文件并逐行开始处理,您就可以使用grok过滤器来匹配日志文件中的关键字。示例过滤器可能如下所示:

grok {
    patterns_dir => ["/pathto/patterns"]
    match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:logsource} %{SYSLOGPROG}: + %{SRCFILE:srcfile}:%{NUMBER:linenumber} where SRCFILE is defined as [a-zA-Z0-9._-]+" }           
}

如果您在单个文件中打印了不同类型的日志,则可能必须使用不同的过滤器您可以将其与,个逗号分隔的值放在同一行中。类似的东西:

grok {
        match => { "message" => [ 
              "TYPE1,%{WORD:a1},%{WORD:a2},%{WORD:a3},%{POSINT:a4}",
              "TYPE2,%{WORD:b1},%{WORD:b2},%{WORD:b3},%{WORD:b4}",
              "TYPE3,%{POSINT:c1},%{WORD:c2},%{POSINT:c3},%{WORD:c4}"  ]
        }
    }

然后也许你可以玩message,因为你已经获得了所需的所有价值。希望它有所帮助!