一尘不染

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

elasticsearch

我想从各种目录中读取日志文件,例如:Server1, Server2

Server1具有子目录cron, authlog file分别在这些子目录中。

所以我正在考虑读取这样的文件:

input{
         file{            
                                     #path/to/folders/server1/cronLog/cron_log

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

但是,我很难过滤它们,即要知道对于哪个服务器(Server1)和日志类型(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"

我应该如何进行?任何帮助表示赞赏吗?


阅读 684

收藏
2020-06-22

共1个答案

一尘不染

它非常直截了当,几乎就像我在其他答案中一样…在路径上使用grok提取出您关心的片段,然后您可以从那里做任何想要的事情

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