9

我们想为我们公司的几个不同项目设置一个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、...)创建一个自己的过滤器,当我为每个项目再次使用不同模式的日志文件时,我该怎么办?

4

1 回答 1

11

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

对于 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 ... 
      }
   }
}

希望这可以帮到你。

于 2014-02-12T10:28:36.610 回答