首页 文章

Logstash关闭文件描述符?

提问于
浏览
13

BACKGROUND:

我们有 rsyslog 创建日志文件目录,如: /var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME 因此,多个服务器将不同日期的日志分发到中心位置 .

现在阅读这些日志并将它们存储在elasticsearch中进行分析我的logstash配置文件是这样的:

file{
   path => /var/log/rsyslog/**/*.log
}

ISSUE :

现在,随着目录中日志文件数量的增加,logstash会为新文件打开文件描述符(FD),并且不会为已读取的日志文件释放FD . 由于日志文件是按日期生成的,因此一旦读取它,之后就没有用了,因为在该日期之后它不会被更新 .

/etc/security/limits.conf 我将文件开口限制增加到65K

我们可以在一段时间后让logstash关闭句柄,这样打开的文件句柄数量不会增加太多?

2 回答

  • 1

    我想你可能遇到过这个错误:http://github.com/elastic/logstash/issues/1604 . 你有相同的症状吗?一段时间后日志中的异常?如果您运行 sudo lsof | grep java | wc -l ,您是否看到描述符随着时间的推移而稳步增加? (其中一些可能会关闭,但有些会保持开放状态,而且数量会增加)

  • 6

    我已经跟踪了这个问题一段时间了,我不知道它已经妥善解决了 .

    我们在一艘类似的船上,可能更大:Logstash无法打开盒子上数十万个日志文件的句柄,尽管很少有人积极地写入 . LOGSTASH-271捕获了这个问题,并且有一些尝试修补Logstash,包括PR #1260 .

    似乎修复可能已经进入Logstash 1.5与PR #1545,但我从来没有亲自测试过 . 我们最终分支了底层库Logstash使用来实现名为FileWatch的文件输入到FFileWatch,它添加了一个"eviction mechanism" .

    这种方法背后的基本思想是只在文件被打开时保持打开状态 . 通常,Logstash将打开文件的句柄并使其永久打开,但如果文件最近没有更改,则FFileWatch会添加一个关闭句柄的选项( eviction_interval ) . 然后我使用forked gem创建了Logstash的自定义构建 .

    显然这不太理想,但它对我们有用 . 最终我们完全删除了Logstash以获取日志文件,尽管我们仍然在日志处理管道中进一步使用它 . 我们实现了自己的轻量级日志托运者(Franz),它没有遇到这个问题 .

相关问题