2

应用程序 Logback 配置 -

<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状态并且队列为空。

这可能是什么原因?

4

1 回答 1

1

appendernet.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 套接字时,附加程序会阻塞您的代码。

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

于 2016-03-30T19:51:49.467 回答