Я пытаюсь реализовать централизованный лог-сервер, используя стек ELK: Elasticsearch, Logstash, Kibana. Он будет получать журналы из многих приложений. В принципе у меня есть приложение, которое использует Tomcat Logback со следующей конфигурацией:Отправить журналы Tomcat в Logstash
<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 все журналы Logback ... На my_remote_host я разворачивал elasticsearch , логсташ и кибана. И все они работают. Это конфигурация для 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, он успешно регистрирует полученные данные.
Проблема заключается в том, что журнал не посылает какие-либо данные с помощью LogstashTcpSocketAppender. Даже используя простой SocketAppender, он не работает ... Я делаю что-то неправильно? Кажется, он почему-то отказывается писать в эту розетку, но ни о чем не жалуется.