Logback中configuration中 name='logstash'中配置queueSize问题(发送数据丢失)

转:https://segmentfault.com/q/1010000010320780

问题:

现在的情况是logstash能接受到数据并在es里elasticsearch能显示出来,只是数据不全,比如我发了10w条,它只能接受到1w或者2w,数据量小的时候还好,一大就差得多了。
下面是logback.xml的配置文件:

    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
      <destination>192.168.4.212:8881</destination>
      <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>



    <logger name="commonLog" level="debug" additivity="false"> 
               <appender-ref ref="logstash" />  
    </logger> 

然后logstash的配置:

input{
tcp {
    host => "192.168.4.212"
    port => 8881
    type => "tcplog"
    mode => "server"
    tags => ["tags"]
    codec => json_lines
  }
}

output{
    elasticsearch{ 
         hosts=>"192.168.4.212" 
         index=>"test"
    }
}

发送完后用来查看logstash收到条数的命令:

curl "http://192.168.4.212:9200/_cat/indices?v"

我调过logstash.yml里的参数,依然无法解决这个问题

解决方案:

没认真看人家的官方文档啊。之前测试过logback客户端通过socket发送到服务端只要eventDelayLimit参数配置合适,数据就不会丢失。还想参数logback源码修改一下logstash-logback-encoder源码来着。其实logstash-logback-encoder的GitHub说明里原文“The async appenders will never block the logging thread. If the RingBuffer is full (e.g. due to slow network, etc), then events will be dropped.”然后在源码里找到这个RingBuffer对应的字段是queueSize。其实这个queueSize之前我在logback.xml里调式过,没有作用,后来就放弃了。但之后在源码里对queueSize有注释,这个值只能配置2的N次幂(2,4,8,16...),默认8192,单位是B。所以解决方案就是:在logback的配置文件中配置:
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">

     <destination>192.168.4.212:8881</destination>
      <queueSize>1048576</queueSize>
  <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    

queueSize配置合适的大小,就可以了,发送到logstash的数据就不会丢失了。正如官方文档里写的那样:* AsyncDisruptorAppender追加器与Logback的AsyncAppender类似,不同之处在于使用LMAX Disruptor RingBuffer作为排队机制,而不是BlockingQueue。 这些异步appender可以委托给任何其他底层的logback appender。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值