使用多个kafka主题输入的logstash

时间:2016-03-24 07:54:33

标签: logstash

我想使用以下设置启动logstash实例:

input {
  kafka {
    topic_id => "topic_a"
    .......
  }
  kafka {
    topic_id => "topic_b"
    .......
  }

}
filter {
  json {
    source => "message"
  }
  uuid {
    target => "@uuid"
  }
  mutate {
    replace => { "message" => "%{message}" } # want to get the full json literal but does not work
    add_field => {
      "topic" => "%{topic_id}" # it does not work either
    }
  }

  # logic to apply different filter base on topic_id
  if [topic_id] =~ 'topic_a' { # this block seems never entered        
    mutate {
       replace => { "topic" => "topic_a" }
    }
  } else {
    .....
  }
}
output {
  .....
}

我的Kibana上的输出应该如下所示:

topic : %{topic_id}

它表明上面的配置无法提取topic_id。 我不知道如何配置过滤器部件。任何人都可以暗示这一点吗?感谢。

BTW我正在使用logstash-2.2.2

编辑:根据logstash文件更新配置,结果仍然相同

2 个答案:

答案 0 :(得分:4)

默认情况下,Kafka Input Plugin不包含元数据信息,例如:topic_id ..
您必须启用decorate_events选项:

kafka {
    topic_id => "topic_a"
    decorate_events => true
  }

完成此操作后,您可以使用kafka键在topic数组中找到您的topic_id。

  

decorate_events

     

值类型为布尔值默认值为false添加Kafka的选项   元素,如主题,事件的消息大小。这将添加一个字段   将kafka命名为包含以下属性的logstash事件:   msg_size:此消息的完整序列化大小(以字节为单位)   (包括crc,header属性等)主题:此消息的主题   与consumer_group相关联:用于读入的使用者组   此事件分区:此消息与之关联的分区   key:包含消息密钥的ByteBuffer   https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html#plugins-inputs-kafka-decorate_events

答案 1 :(得分:1)

add_field的documentation显示的语法与您使用的语法不同。你可以尝试一下。

filter {
  mutate {
    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
  }  
}