Отправить журналы Tomcat в Logstash
Я пытаюсь реализовать централизованный сервер журналов с использованием стека ELK: Elasticsearch, Logstash, Kibana. Он будет получать журналы от многих приложений. В основном у меня есть приложение Tomcat, которое использует logback со следующей конфигурацией:
<appender name="ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
[...]
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<remoteHost>my_remote_host</remoteHost>
<port>5000</port>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
<appender-ref ref="STDOUT" />
<appender-ref ref="stash" />
</root>
Таким образом, теоретически это должно отправлять через TCP все журналы регистрации... На my_remote_host я развернул эластичный поиск, logstash и kibana. И все они, кажется, работают. Это конфиг для logstash:
input {
stdin {
type => "human"
}
tcp {
port => 5000
codec => "json"
mode => "server"
}
}
output {
stdout {}
elasticsearch {
host => "my_remote_host"
}
}
Если я вписываю что-то для stdin в мой экземпляр logstash, он успешно индексирует мой ввод. Кроме того, если я отправляю по http запрос my_remote_host:5000, он успешно регистрирует полученные данные.
Проблема в том, что logback, похоже, не отправляет никаких данных с помощью LogstashTcpSocketAppender. Даже используя простой SocketAppender, он не работает... Я что-то не так делаю? Кажется, по какой-то причине он отказывается писать в этот сокет, но он ни на что не жалуется.
2 ответа
Ищите в catalina.out logbacks при запуске логов. также убедитесь, что у вас нет брандмауэров (или групп безопасности, если вы находитесь в AWS)
я также использую другой кодек при отправке журналов из tomcat / logback в logstach
tcp {
port => 4560
codec => json_lines
tags => ["app"]
}
Я использую этот тег в разделах фильтра и вывода, поскольку обратный вызов потребляет журналы из нескольких мест.
Я немного опоздал с решением, потому что сегодня столкнулся с той же проблемой. Если кто-то еще столкнется с подобной проблемой в будущем.
Я установил логбэк <configuration debug="true">
Вы заметите, что он не может записать в OutputStream. Поэтому я посмотрел версии библиотек Logback, используемых LogstashEncoder, они были более старой версией 1.1.6, а я использовал 1.2.1. Я перешел на старую версию и все работало нормально.