我是新事物,因为它在ELK堆栈中的logstash。日志文件具有将数据记录到其中的不同进程。每个进程都会以不同的模式写入日志我想解析这个日志文件。此日志文件中的每个日志都以下面的grok模式启动,
%{SYSLOGTIMESTAMP:timestamp}%{SYSLOGHOST:logsource}%{SYSLOGPROG}:+ %{SRCFILE:srcfile}:%{NUMBER:linenumber},其中SRCFILE定义为 [A-ZA-Z0-9 ._-] +
请让我知道如何解析此文件,以便可以解析登录此文件的每个进程的不同类型的日志。
答案 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
,因为你已经获得了所需的所有价值。希望它有所帮助!