Logstash 带有多个卡夫卡主题输入的日志存储

Logstash 带有多个卡夫卡主题输入的日志存储,logstash,Logstash,我想使用以下设置启动logstash实例: input { kafka { topic_id => "topic_a" ....... } kafka { topic_id => "topic_b" ....... } } filter { json { source => "message" } uuid { target => "@uuid" } mutate { repla

我想使用以下设置启动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}
这表明上面的配置无法提取主题id。 我不知道如何配置过滤器部件。有人能给点提示吗?谢谢

顺便说一句,我正在使用logstash-2.2.2

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

for add_字段显示的语法与您正在使用的语法不同。你可以试试

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

默认情况下,卡夫卡输入插件不包括元数据信息,如:topic_id..
您必须启用
装饰\u事件
选项:

kafka {
    topic_id => "topic_a"
    decorate_events => true
  }
完成此操作后,您可以使用
topic
键在:
kafka
数组中找到您的主题id

装饰活动

值类型为布尔值默认值为false添加卡夫卡选项 元数据,如主题、事件的消息大小。这将添加一个字段 将kafka命名为包含以下属性的logstash事件: msg_size:此消息的完整序列化大小(以字节为单位) (包括crc、头属性等)主题:此消息的主题 与消费者组关联:用于读入的消费者组 此事件分区:与此消息关联的分区 键:包含消息键的ByteBuffer


嗨,我已经更新了我的问题。我实际上是用“%”而不是“$”,但它不起作用。如果[topic]字段仍然没有设置,那是因为您的输入没有通过您显示的两个输入之一(设置了topic\u id),或者您的条件(如果topic\u id=xxx)不是真的,或者mutate->replace失败(在这种情况下,add\u字段将不会运行)。或者其他你没有展示的东西。