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