Filebeat占用文件句柄

Filebeat占用文件句柄,第1张

平台使用整套的ELK日志框架:服务写本地文件日志,由Filebeat监控本地日志,并写入ES。

本地Filebeat配置如下:

问题:文件句柄占用,导致磁盘无法释放。重启Filebeat后可清理掉占用的磁盘。

收到问题后,感觉是一个很常见的问题,就直接百度了一下,果然是一下就有很多的线索。结合一些帖子,对现有服务器做了排查,如下:

这里有两个问题:

可设置:

close_older:1h

force_close_files:false

由于目前服务日志滚动的雀数陪频率不是很高,文件更名后,1h左右不会被删除。所以可以尝试使用close_older配置在文件删除之前释放句柄。

=====================

2019/7/17更新:

调研后发现,close_older的默认值就是1h,所以该方案不会让原本的问题变得更好。

虽然问题可能会被解决,但对Filebeat还不够理解,并且上述提出的两个问题,没有很好的解答。因此,毕哪我继续对Filebeat做进一步的学习和实验。

资料链接: https://www.jianshu.com/p/6282b04fe06a

Filebeat主要组件:prospector和harvester,如图:

filebeat保持文件状态:

filebeat保证至少一次交付:

每次交付会有状态,对端需要ACK确认。

注意:

Filebeat的至少一次交付保证包括日志轮换和删除旧文件的限制。如果将日志文件写入磁盘并且写入速度超过Filebeat可以处理的速度,或者在输出不可用时删除了文件,则可能会丢失数据。

在Linux上,Filebeat也可能因inode重用而跳过行。有关inode重用问题的更多详细信息,请参阅filebeat常见问题解答。(后续遇到的顷蠢话,继续研究,本次略过)

首先看一下close_renamed的解释:

close_renamed

Only use this option if you understand that data loss is a potential side effect.

When this option is enabled, Filebeat closes the file handler when a file is renamed. This happens, for example, when rotating files. By default, the harvester stays open and keeps reading the file because the file handler does not depend on the file name. If the close_renamedoption is enabled and the file is renamed or moved in such a way that it’s no longer matched by the file patterns specified for the , the file will not be picked up again. Filebeat will not finish reading the file.

WINDOWS: If your Windows log rotation system shows errors because it can’t rotate the files, you should enable this option.

经过测试后发现,采用filebeat监听一个文本文件,通过mv将文件更改,close_renamed是管用的,但通过rm删除文件,close_renamed是不管用的。

结论:未重现生产环境的现象。

阶段性结论:升级生产环境filebeat版本后,检查问题是否解决。

后续研究:

close_inactive

启用此选项时,如果文件在指定的持续时间内没有更新,Filebeat会关闭文件句柄。如果关闭的文件再次发生变化,则会启动一台新的harvester,并在scan_frequency过去后采集最新的更改。建议将close_inactive设置为大于日志文件两次更新间隔时间的最大值。例如,如果日志文件每隔几秒更新一次,则可以安全地将close_inactive设置为1m。如果有更新频率非常不同的日志文件,则可以使用具有不同值的多个prospectors配置。将close_inactive设置为较低的值意味着文件句柄会更快关闭。但是,这具有副作用,即如果harvester关闭,则不会实时发送新的日志行。关闭文件的时间戳不取决于文件的修改时间,关闭文件的时间戳为修改文件的时间+close_inactive。例如,如果close_inactive设置为5分钟,那么在收割机读取文件的最后一行之后,5分钟的倒计时开始。您可以使用时间字符串,如2h(2小时)和5m(5分钟)。默认值是5m。

scan_frequency

指定扫描指定路径目录下是否有新的文件产生。例如,指定1以尽可能频繁地扫描目录,而不会导致Filebeat过于频繁地扫描。我们不建议将此值设置为<1秒。

如果您需要近实时发送日志行,请勿使用非常低的scan_frequency,但应调整close_inactive,以便文件处理程序保持打开状态并持续轮询您的文件。

默认设置是10秒。

注意区分backoff

安装lsof

yum install lsof

查看线程占句做困柄数

ulimit -a

查看系统打开句柄最大数量纯哪念

more /proc/sys/fs/file-max

1

查看打开句柄总数

lsof|awk '{print $2}'|wc -l

1

根据打开文件句柄的数量降序排列,其中第二列为进程ID:

lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more

1

根据获取的进程ID查缓陪看进程的详情

ps -ef |grep

1

修改linux单进程最大文件连接数

修改linux系统参数。vi /etc/security/limits.conf 添加

softnofile65536

hardnofile65536

修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:

技术贴 类似unlocker文件占用解锁工具(开源)-文件句柄

日期:2019-09-15 16:48:22返回目录:文件问题

最近做程序,需要塌判族删除文件,有时候文件被占用,就要解除占用才能删除,类似unlocker一样

到网上查,基本上是这个思路团弊:1,ntquerysysteminformaton获取系统内所有句柄

2,过滤出文件句柄

3,ntqueryinformatonfile获取不带盘符路径

4,getfileinformationbyhandle比对卷序号获取盘符

5,比对

6,关闭句柄删除up1更新:

1,解决了忘记静态链接的无敌大bug

2,解决了带空格文件名无法读取的bug

3,解决了遇到namedpipe个别死锁的bug

本软件属开源软件,源代码和软件均可冲唯在fanqiedownloadpage.gq下载,并遵守MIT开源协定制作环境:VS2010+Windows7 sp1 中文旗舰版


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8200188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存