由于您尝试传入日志文件,您可能必须使用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,因为您已经在其中获得了您需要的所有值。希望对您有所帮助!