我是 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
,因为你已经拥有了你需要的所有值。希望对您有所帮助!