Вход 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 байта. Если буфер заполняется до того, как события могут быть отправлены в сокет, приложение начинает отбрасывать события. Размер буфера и многие другие свойства можно настроить через интерфейс приложения.