logstash:具有不同模式的多个日志文件

问题描述 投票:8回答:1

我们想为我们公司的几个不同项目设置logstash服务器。现在我尝试在Kibana中启用它们。我的问题是:如果我有不同的日志文件模式,我如何为它们构建过滤器?示例:logstash.conf:

input {
  file {
    type => "A"
    path => "/home/logstash/A/*"
    start_position => "beginning"
  }
 file {
    type => "B"
    path => "/home/logstash/B*"
    start_position => "beginning"
  }
}

filter {
  multiline {
      pattern => "^%{TIMESTAMP_ISO8601}"
      negate => true
      what => "previous"
  }
  grok {
     type => A
     match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{DATA:thread %{LOGLEVEL:level}\s*%{DATA:logger_name}\s*-\s*%{GREEDYDATA:log_text}"]

    add_tag => [ "level_%{level}" ]
  }
  date {
        match => ["logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
  }
  grok {
        type => B
        match => [ any other pattern ... 
 }
}
output {
  elasticsearch { embedded => true }
}

我是否必须为每个项目(A,B,C,...)创建一个自己的过滤器,当我为每个项目再次提供不同模式的日志文件时,我该怎么做?

filter logstash kibana logstash-grok logfiles
1个回答
9
投票

您只需要为所有项目创建过滤器。

对于Logstash 1.3.3,您可以使用if语句来区分每个项目grok。例如,

filter {

   multiline {
       pattern => "^%{TIMESTAMP_ISO8601}"
       negate => true
       what => "previous"
   }

   if [type] == "A"  {
      grok {
          match => [ any other pattern ... 
      }
   }
   else if [type] == "B" {
      grok {
          match => [ any other pattern ... 
      }
   }
}

希望这可以帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.