Отправить журналы 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. Я перешел на старую версию и все работало нормально.

Другие вопросы по тегам