将Kafka主题标题显示为kibana中的字段,logstash add\u字段?

rseugnpd  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(379)

我有elasticsearch和kibana 7.6.2的日志
我把logstash和Kafka联系起来如下:

input {
  kafka {
    bootstrap_servers => "******"
    topics_pattern => [".*"]
    decorate_events => true
    add_field => { "[topic_name]" => "%{[@metadata][kafka][topic]}"}
  }
}
filter {
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash"
    document_type => "logs"
  }
}

没事的,工作吧。但我喜欢这个领域 topic_name 显示为 %{[@metadata][kafka][topic]}
我该怎么修?

c90pui9n

c90pui9n1#

怎么样

add_field => { "topic_name" => "%{[@metadata][kafka][topic]}"}

即。 [topic_name] -> topic_name

zphenhs4

zphenhs42#

正在使用的sprintf格式的语法( %{[@metadata][kafka][topic]} )获取该字段的值是正确的。
据说没有这样的领域 @metadata.kafka.topic 在你的文件里。因此sprintf无法获取字段值,因此,新创建的字段将sprintf调用作为字符串包含。
不过,既然你 decorate_events => true ,元数据字段应如文档中所述可用(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html):
只有将“事件”选项设置为true(默认为false)时,才会将元数据添加到事件中。
我可以想象 add_field 输入插件中设置的操作导致问题。自从 decorate_events 选项首先允许添加元数据字段 add_field 操作应该排在输入插件之后的第二位。
您的配置将如下所示:

input {
  kafka {
    bootstrap_servers => "******"
    topics_pattern => [".*"]
    decorate_events => true
  }
}

filter {
  mutate{
    add_field => { "[topic_name]" => "%{[@metadata][kafka][topic]}"}
  }

  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash"
    document_type => "logs"
  }
}

相关问题