Запись json для входа в систему в kibana неверна

#java #logstash #kibana #logback #logstash-logback-encoder

Вопрос:

Я использую logstash-logback-encoder 6.3. Я хочу написать структурированные аргументы в Кибане. Мой код:

 Map<String, String> extractHeaders = ...
log.debug(Markers.append("http", Map.of("url", request.getUrl(), "headers", extractHeaders)),"Some message");
 

И в Кибане я вижу это:

введите описание изображения здесь

Но почему? Почему Кибана сплющила ключи json? Я ожидаю такого взгляда:

 "fields": {
    ....
    "http": {
        "headers": {
          "X-Auth-Token": "ew0KICAiY2xpZW50SWQiIDog",
          .....
        },
        "url": "some url"
    }
    ....
}
 

Как я могу поместить вложенный объект?

Мой logback.xml:

 <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${logstashHost}:${logstashPort}</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <provider class="net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider" />
        </encoder>
</appender>
 

Комментарии:

1. Какую версию вы используете? Начиная с версии 7.12 способ отображения полей kibana на вкладке JSON в discover был изменен, все отображается как выровненное, это не означает, что ваши поля выровнены, Kibana-это просто инструмент визуализации, ваши данные находятся в elasticsearch. Вы можете изменить способ отображения документа json в Kibana, включив параметр discover:searchFieldsFromSource в дополнительных настройках в Kibana.

2. @leandrojmp прав. Еще одна вещь, которую вы можете сделать, что я обычно и делаю, — это использовать DEV инструмент и отправлять прямые запросы в elasticsearch. Он отображает json так, как вы ожидаете.

3. Спасибо за ваши комментарии. Они помогли мне все прояснить