现象
- 注册表记录有大量ttl为-2的记录,并且对应的日志文件已经被删除,但是这些记录却一直存在。
- log.json有大量日志写入,把磁盘IO占满。
- IO被占满后,影响filebeat采集日志的性能。
原因
配置了clean_removed: true
,但是未生效。
filebeat的bug。具体可见:
https://github.com/elastic/beats/issues/13140
版本信息
filebeat 7.17
解决方法
按照上面issues提到的唯一的解决方案是停止filebeat并使用一些脚本清理注册表文件。
- 停止filebeat,使用kubernetes的daemonset部署的filebeat,可以通过将对应的节点暂时打上污点,然后删除filebeat的pod。
data/registry/filebeat
路径下找到注册表文件,删除ttl为-2的记录:sed -i '/"ttl":-2/d' $(cat active.dat | awk -F '/' '{print $NF}')
- 删除节点污点,daemonset会自动在节点上重新拉起filebeat。