繁体   English   中英

将Kafka主题标题显示为Kibana中的字段,logstash add_field?

[英]Show Kafka topic title as a field in Kibana, logstash add_field?

我有 ElasticSearch 和 Kibana 7.6.2 的logstash
我将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]}

kibana-capture-1

我该如何解决?

您用于获取该字段值的 sprintf 格式的语法( %{[@metadata][kafka][topic]} )是正确的。

据称您的文档中没有@metadata.kafka.topic这样的字段。 因此 sprintf 无法获取字段值,因此,新创建的字段包含 sprintf 调用作为字符串。

但是,由于您设置了decorate_events => true ,元数据字段应该可用,如文档中所述( https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html ):

仅当 decorate_events 选项设置为 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"
  }
}

怎么样

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

[topic_name] -> topic_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM