我们生产环境最近有服务器出现空间告警,登录上去排查后,发现是filebeat(5.4.0)占用了大量已被删除的日志文件句柄,接近300个,具体如下(列出部分):
经排查,当时这台服务器上SystemErr.log日志文件突然日志量增大,1分钟会滚动8个日志文件(每个日志文件20MB),当达到50个时,最早的那个会被删除。
为了防止文件句柄被占用不释放,我们也提前梳理配置了相关的配置参数(见下面下划线标记),filebeat 配置的相关参数如下:
---
filebeat.prospectors:
-
clean_inactive: 168h
close_inactive: 1m
close_removed: false
close_renamed: true
close_timeout: 1h
encoding: utf-8
fields:
logSource: WAS
topicName: Log_IFMC
fields_under_root: true
ignore_older: 5m
input_type: log
max_bytes: 307200
multiline.match: after
multiline.negate: true
multiline.pattern: "^\\["
paths:
- /soft/IBM/WebSphere/AppServer/profiles/BEMC*/logs/bemc*/*
filebeat.spool_size: 256
output.kafka:
enabled: true
hosts:
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
topic: "%{[topicName]}_LOG"
tags:
- json
但是以上这样的配置,依然出现了这个问题,filebeat自身持续打印出下面这种日
麻烦大家有遇到过类似的或者懂得帮忙看一下,谢谢。
附上filebeat的日志文件
经排查,当时这台服务器上SystemErr.log日志文件突然日志量增大,1分钟会滚动8个日志文件(每个日志文件20MB),当达到50个时,最早的那个会被删除。
为了防止文件句柄被占用不释放,我们也提前梳理配置了相关的配置参数(见下面下划线标记),filebeat 配置的相关参数如下:
---
filebeat.prospectors:
-
clean_inactive: 168h
close_inactive: 1m
close_removed: false
close_renamed: true
close_timeout: 1h
encoding: utf-8
fields:
logSource: WAS
topicName: Log_IFMC
fields_under_root: true
ignore_older: 5m
input_type: log
max_bytes: 307200
multiline.match: after
multiline.negate: true
multiline.pattern: "^\\["
paths:
- /soft/IBM/WebSphere/AppServer/profiles/BEMC*/logs/bemc*/*
filebeat.spool_size: 256
output.kafka:
enabled: true
hosts:
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
- "0.0.0.0:9092"
topic: "%{[topicName]}_LOG"
tags:
- json
但是以上这样的配置,依然出现了这个问题,filebeat自身持续打印出下面这种日
麻烦大家有遇到过类似的或者懂得帮忙看一下,谢谢。
附上filebeat的日志文件
1 个回复
Jiehui Tang
赞同来自:
图一
很奇怪,如果close_renamed生效,则应该lsof出来的日志文件都会在重命名后重新被harversted(因为path配置的是*,处于扫描的范围)。
所以怀疑是否close_renamed对于filebeat 5.4而言会不生效。
还有一点,lsof列出的日志文件,删除后,会被filebeat占用长达1h,直到触发 close_timeout: 1h 这项配置才被释放,难道filebeat在这种场景下日志采集的速度变得非常慢吗?这其中如果日志文件被重新harversted的,那么日志会慢慢地被读取,而不被重新harversted的日志文件,则filebeat根本就不采集了。