最近开始测试部署ELK, 在部署logstash的时候出现一个故障:

logstash在第一次安装完成以后启动正常, 但是之后启动时间越来越长, 5分钟以上甚至10多分钟。以至于怀疑程序错误, 在重装以软件和系统以后问题还是没有解决。

搜索到github上的一个issue, 解释如下:

系统的“熵”低了。 查了一下, 这个熵好像是用来生成随机数的。

 

如果出现logstash启动慢,使用如下命令查询,。

cat /proc/sys/kernel/random/entropy_avail

如果返回值小于1000, 那么就需要安装haveged包。

 

jruby启动的时候jdk回去从/dev/random中初始化随机数熵,新版本的jruby会用RPNG算法产生随后的随机数,但是旧版本的jruby会持续从/dev/random中获取数字。但是不幸的是,random发生器会跟不上生成速度,所以获取随机数的过程会被阻塞,直到随机数池拥有足够的熵然后恢复。这在某些系统上,尤其是虚拟化系统,熵数池可能会比较小从而会减慢jruby的启动速度。

检查了一下系统的熵数池 cat /proc/sys/kernel/random/entropy_avail ,发现只有65,正常情况这个数字推荐大于1000,对比了一下独立主机的这个数值,大约在700-900之间晃悠。

解决

最简单的解决方案是安装一个熵数发生器,比如 Haveged ,centos可从epel源中获取,安装后启动服务 sudo systemctl start haveged 就可以看到entropy_avail暴涨至2000多,logstash几乎是秒启,然后再 sudo systemctl enable haveged 设为开机自启。

 

我在安装了以后, logstash启动慢的问题解决,在10秒内启动。

参考链接如下:

https://github.com/elastic/logstash/issues/5507
https://wiki.archlinux.org/index.php/Haveged_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://passbe.com/2016/12/21/logstash-slow-start-up-times-and-exhausting-entropy.html
posted on 2017-06-30 17:12  睡着的糖葫芦  阅读(2535)  评论(0编辑  收藏  举报