Logstash TCP输入一旦出现就会检索所有过去的日志

时间:2016-03-28 09:46:17

标签: tcp logstash logstash-logback-encoder

应用程序日志记录配置 -

<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并且可以查看。

我在logstash服务器关闭时检查ss | grep 5001,端口5001处于CLOSED-WAIT状态,队列为空。

这可能是什么原因?

1 个答案:

答案 0 :(得分: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),它有一个内部环形缓冲区缓冲日志事件。需要缓冲才能实现非阻塞行为。否则,在将事件写入TCP套接字时,appender会阻塞您的代码。

环形缓冲区默认保存8192个字节。如果在事件可以发送到套接字之前缓冲区已满,则appender开始丢弃事件。可以通过appender接口配置缓冲区大小和许多其他属性。