【问题标题】:Parsing log file with logs of different patterns Logstash使用不同模式的日志解析日志文件 Logstash
【发布时间】:2017-01-26 19:33:44
【问题描述】:

在 ELK 堆栈中,我是 logstash 的新手。一个日志文件有不​​同的进程向它记录数据。每个进程以不同的模式写入日志。我想解析这个日志文件。此日志文件中的每个日志都以以下 grok 模式开始,

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

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

【问题讨论】:

    标签: logstash elastic-stack kibana-5


    【解决方案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,因为您已经在其中获得了您需要的所有值。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多