Вход Logstash TCP извлекает все прошлые журналы, как только он появляется

Конфигурация входа в систему приложения -

<appender name="stash"
    class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
    <destination>localhost:5001</destination>

    <!-- encoder is required -->
    <encoder>
        <pattern>%d{dd/MM/YY HH:mm:ss.SSS} - %-5level[%-5thread] -  %logger{32} - %msg%n</pattern>
    </encoder>
</appender>

Вход Logstash - это плагин TCP, а вывод - ElasticSearch. Первоначально сервер Logstash не работает, и приложение непрерывно генерирует журналы. При просмотре в Kibana новые журналы не добавляются. Через некоторое время запускается logstash. Теперь, когда журналы просматриваются в Kibana, кажется, что все журналы, которые были созданы, когда logstash был недоступен, сбрасываются в ES и могут быть просмотрены.

я проверил ss | grep 5001 когда сервер logstash был недоступен, порт 5001 находится в состоянии CLOSED-WAIT, и очереди пусты.

В чем может быть причина этого?

1 ответ

Appender net.logstash.logback.appender.LogstashAccessTcpSocketAppender расширяет [net.logstash.logback.appender.AbstractLogstashTcpSocketAppender] ( https://github.com/logstash/logstash-logback-encoder/blob/ master / src / main / java / net / logstash / logback / appender / AbstractLogstashTcpSocketAppender.java), который имеет внутренний кольцевой буфер, который буферизирует журнал События. Буферизация необходима для достижения неблокирующего поведения. В противном случае appender заблокирует ваш код при записи событий в сокет TCP.

Кольцевой буфер по умолчанию содержит 8192 байта. Если буфер заполняется до того, как события могут быть отправлены в сокет, приложение начинает отбрасывать события. Размер буфера и многие другие свойства можно настроить через интерфейс приложения.

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