如何编写Logstash过滤器来过滤kafka主题

时间:2016-12-28 12:04:05

标签: apache-kafka logstash

我想使用kafka作为输入并使用logstash作为输出。我将把几个主题提供给logstash,并希望根据主题进行过滤。我试着编写这样的代码:

input {
    kafka {
        bootstrap_servers => "localhost:9092"
        topics => ["test", "payment"]
      }
}

filter {
    if [topic] = "test" {
       //do something
    } else {
       //do something
    }
}

但似乎它不起作用。

3 个答案:

答案 0 :(得分:0)

您应添加decorate_events以添加kafka字段。

  

选择向主题添加Kafka元数据,例如主题,邮件大小。这将向logstash事件添加一个名为kafka的字段,其中包含以下属性:topic:此消息与consumer_group关联的主题:用于读取此事件分区的使用者组:此消息与offset关联的分区:此消息与密钥关联的分区:包含消息密钥的ByteBuffer

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html#plugins-inputs-kafka-decorate_events

然后像这样更新conf

input {
  kafka {
    bootstrap_servers => "localhost:9092"
    topics => ["test", "payment"]
  }
}

filter {
  if [kafka][topic] = "test" {
   //do something
  } else {
   //do something
  }
}

答案 1 :(得分:0)

通过添加decorate_events来添加kafka字段来更改输入部分。

input {
    kafka {
        bootstrap_servers => "localhost:9092"
        topics => ["test", "payment"]
        decorate_events => true
    }
}

更改过滤器部分如下:

filter {
    if [@metadata][kafka][topic] == "test" {
        //do something
    } else {
        //do something
  }
}

答案 2 :(得分:0)

因此,先前的两个答案都具有真实性,但并不正确。

1。添加decorate_events

    input {
        kafka {
            bootstrap_servers => "localhost:9092"
            topics => ["test", "payment"]
            decorate_events => true
        }
    }
  1. 寻找[kafka][topic]而不寻找[@metadata][kafka][topic]
    filter {
      if [kafka][topic] = "test" {
       //do something
      } else {
       //do something
      }
    }