Показать название Kafka topi c в виде поля в Kibana, logsta sh add_field? - PullRequest
2 голосов
/ 07 апреля 2020

У меня есть logsta sh с ElasticSearch & Kibana 7.6.2
Я подключаю logsta sh к 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

Как это исправить?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Синтаксис формата 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"
  }
}
0 голосов
/ 07 апреля 2020

Как насчет

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

т.е. [topic_name] -> topic_name

...