【问题标题】:Extracting fields from input file path logstash?从输入文件路径logstash中提取字段?
【发布时间】:2014-07-26 01:43:58
【问题描述】:

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

Server1 有子目录cron, auth...在这些子目录中分别是log 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"

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

【问题讨论】:

  • @Alcanzar:我看到了你的回答。您的filter 将在input 之外应用??目前我这样做:filter { if [path] =~ "auth"{ grok... 所以我从路径中选择身份验证。同样,我想同时选择服务器和日志类型并应用条件,例如:路径有servername=XYZ && logtype=YYY,然后是日志的 grok 模式。我错过了什么吗?你能用一些代码解释一下吗?
  • 你可以做多个 grok。因此,您在路径上使用 grok 从中提取您关心的部分。
  • @Alcanzar:像这样的东西:filter{ grok {on path to extract fields} if extract_field1 ==XYZ { grok{pattern matching log message}} ???

标签: cron elasticsearch logstash kibana


【解决方案1】:

它非常直截了当,几乎与我的其他答案一样......您使用路径上的 grok 提取您关心的部分,然后您可以从那里做任何您想做的事情

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2020-12-09
    • 1970-01-01
    • 2017-03-26
    • 2010-10-01
    相关资源
    最近更新 更多