我想从各种目录中读取我的日志文件,例如:Server1, Server2
...
Server1
的子目录为cron, auth
...这些子目录中的内容分别为log file
。
所以我正在考虑阅读这样的文件:
input{
file{
#path/to/folders/server1/cronLog/cron_log
path => "path/to/folders/**/*_log"
}
}
但是,我很难过滤它们,即知道哪个服务器(Server1
)和logtype(cron
),我必须应用grok
模式:
例如:我想过做这样的事情
if [path] =~ "auth"{
grok{
match => ["message", ***patteren****]
}
}else if [path] =~ "cron"{
grok{
match => ["message", ***pattern***]
}
以上cron
用于日志文件(不是cronLog目录)。
但是像这样我还希望对server name
进行过滤,因为每个服务器都会有cron
,auth
等日志。
如何对两者进行过滤?
有没有办法从输入中的path
中获取目录名?就像从这里
path => "path/to/folders/**/*_log"
我该怎么办?任何帮助表示赞赏?
答案 0 :(得分:5)
它非常直接,几乎与我的另一个答案完全一样......你使用路径上的grok提取你关心的碎片然后你可以从那里做任何你想做的事
filter {
grok { "path", "path/to/here/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logname>.*) }
if [server] == "blah" && [logtype] =~ "cron" {
grok { "message", "** pattern **" }
}
}