从输入文件路径logstash中提取字段?

时间:2014-06-05 07:11:32

标签: cron elasticsearch logstash kibana

我想从各种目录中读取我的日志文件,例如: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进行过滤,因为每个服务器都会有cronauth等日志。

如何对两者进行过滤?

有没有办法从输入中的path中获取目录名?就像从这里

path => "path/to/folders/**/*_log"

我该怎么办?任何帮助表示赞赏?

1 个答案:

答案 0 :(得分:5)

它非常直接,几乎与我的另一个答案完全一样......你使用路径上的grok提取你关心的碎片然后你可以从那里做任何你想做的事

filter {
   grok { "path", "path/to/here/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logname>.*) }
   if [server] == "blah" && [logtype] =~ "cron" {
       grok { "message", "** pattern **" }
   }
}