elasticsearch,logstash,kibana,Cron,elasticsearch,Logstash,Kibana" /> elasticsearch,logstash,kibana,Cron,elasticsearch,Logstash,Kibana" />

Cron 从输入文件路径日志中提取字段?

Cron 从输入文件路径日志中提取字段?,cron,elasticsearch,logstash,kibana,Cron,elasticsearch,Logstash,Kibana,我想从各种目录中读取日志文件,如:Server1、Server2 Server1的子目录为cron,auth…在这些子目录中分别是日志文件 因此,我考虑阅读如下文件: input{ file{ #path/to/folders/server1/cronLog/cron_log path => "path/to/fol

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

Server1
的子目录为
cron,auth
…在这些子目录中分别是
日志文件

因此,我考虑阅读如下文件:

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目录)。 但是像这样,我还想过滤
服务器名称
,因为每个服务器都有
cron
auth
等日志

如何对两者进行过滤

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

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

我应该如何进行?非常感谢您的帮助?

这很直截了当,与我的另一个答案几乎一模一样。。。你可以使用道路上的垃圾来提取你所关心的部分,然后你可以从那里做任何你想做的事情

filter {
   grok { "path", "path/to/here/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logname>.*) }
   if [server] == "blah" && [logtype] =~ "cron" {
       grok { "message", "** pattern **" }
   }
}
过滤器{
grok{“path”,“path/to/here/(?[^/]+)/(?[^/]+)/(?.*)}
如果[server]=“blah”&&[logtype]=“cron”{
grok{“消息”,“模式**”}
}
}

See@Alcanzar:我看到了你的答案。你的
过滤器将被应用到
输入之外
?目前我这样做:
过滤器{if[path]=“auth”{grok…
所以我从path中选择auth。类似地,我想同时选择server和logtype并应用条件,比如:path有
servername=XYZ&&logtype=YYY
然后是日志的grok模式。我缺少什么了吗?你能用一些代码解释一下吗?你可以做多个grok。所以你可以在路径上使用grok来从中提取片段您关心什么。@Alcanzar:类似这样的内容:
如果extract_field1==XYZ{grok{模式匹配日志消息}
???