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



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

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

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

由于您尝试传入日志文件,因此您可能必须使用文件输入插件才能从给定路径中检索文件或 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,因为你已经拥有了你需要的所有值。希望对您有所帮助!

最新更新