#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. Спасибо за ваши комментарии. Они помогли мне все прояснить