Filebeat的Registry文件越来越大?

背景

使用Filebeat 5.6.4收集业务日志,配置文件比较简单:

filebeat.prospectors:
- input_type: log
  paths:
    - /path/logs/access.log
output.elasticsearch:
  hosts: ["http://x.x.x.x:9200"]
  index: "accesslog-%{+yyyy.MM.dd}"

其中,access.log是业务主日志,按天进行滚动,日志文件最大为128MB, 当天日志超出128MB后也进行滚动,最多保留15个日志文件;滚动后的日志文件会立即进行压缩。

启动filebeat后几个月过去了,发现filebeat目录下的data/registry文件容量越来越大。registry本身是用来记录日志文件的state信息,比如记录读取到文件位置的的offset,文件的inode、modify time等,通过查看registry文件内容看到,该文件中保存了从filebeat启动后的所有经过滚动并删除的日志文件的state信息,registry文件大小也到了几百KB,虽然看起来问题不大,但是越来越大的文件势必在每次更新时要消耗更多的系统资源,所以需要想办法优化,解决registry文件越来越大的问题。

解决办法

通过查看filebeat 5.6.4文档看到,有两个参数clean_removed和clean_inactive可以清除掉registry文件中无用的state信息。

  • clean_removed: 默认打开,清除已经被删除文件的state信息
  • clean_inactive:默认关闭,清除掉已经不活跃的文件的state信息,必须配合ignore_older参数使用,并且ignore_older +scan_frequency必须小于clean_inactive,否则可能造成日志重复收集。

既然clean_removed参数是默认打开的,并且可以清除掉已经被删除文件的state信息,那为什么在上述场景下并没有生效呢?原因就是日志滚动时是先rename重命名了access.log文件为acess.log.1, 然后把acess.log.1文件压缩成了acess.log.1.gz之后再删除acess.log.1文件,也就是说并没有直接删除掉access.log文件,而clean_removed参数对重命名的文件是不起作用的,所以state信息没有被清除。

5.6版本中有关clean_removed参数的描述:

This setting does not apply to renamed files or
files that were moved to another directory that is still visible to Filebeat

但是这个问题已经在6.0之后的版本得到了修复,即使文件被重命名,在收集完该文件后后续state信息也会被清理。

6.0版本中有关clean_removed参数的描述:

When this option is enabled, Filebeat cleans files from the registry if they 
cannot be found on disk anymore under the last known name. This means also files
which were renamed after the harvester was finished will be removed.

解决办法1

通过使用6.4.3版本的filebeat重新采集access.log日志,发现registry文件越来越大的问题已经得到了解决,所以最好的解决办法是把filebeat升级到6.4.3版本。

解决办法2

如果不能立即升级filebeat怎么办?那就可以通过配置ignore_older+clean_inactive参数解决问题.

解释一下ignore_older参数:

  • ignore_older: 默认为0不启用,启用该参数可以忽略掉比较旧的日志文件(根据modify time判断),从较新的文件开始收集日志。如果日志文件第一次被采集到但是modify time超出了ignore_older,则会从该文件末尾开始采集日志,registry文件中的state信息为日志文件的末尾;如果日志文件的state信息已经存在,但是文件的modify time超出了ignore_older,则继续从state中记录的offset开始读取日志。ignore_older必须大于close_inactive, 以确保文件在被忽略之前已经被关闭。如果文件modify time已经超出了ignore_older, 但是仍然在被采集中,此时filebeat会把文件读取完毕后等待close_inactive时间后关闭该文件。

最终针对业务场景,新的基于5.6.4版本的filebeat的配置文件如下:

filebeat.prospectors:
- input_type: log
  paths:
    - /path/logs/access.log
  ignore_older: 24h
  clean_inactive: 36h
output.elasticsearch:
  hosts: ["http://x.x.x.x:9200"]
  index: "accesslog-%{+yyyy.MM.dd}"

因为日志文件是按天滚动的,ignore_older设置为24h,clean_inactive设置为36h,清理掉registry文件中距离最近一次更新超出36小时的日志文件的state信息.

根据上述配置,分别验证了两个场景,证明registry文件是可以正常清理旧的state,并且日志采集也不受影响:

  • 场景1:日志较少,可能十天半月才有一条日志

    这种场景下,因为日志文件一直没有更新,registry中始终记录的有日志文件的state信息,offset指向文件末尾。为什么日志文件的state信息一直没有被清理,因为更新registry文件是在读取文件之后进行的,filebeat每次扫描文件时发现文件没有被更新,就直接结束本次scan了。经过了十天半月,日志文件中产生了日志,此时会先根据registry中的state信息从文件末尾读取日志,不会从头开始读取,从而不会造成日志重复读取的情况。

  • 场景2:日志较多,滚动较快,当天的日志都能滚动15次以上

这种场景下,每次滚动后新产生的日志文件被从头开始读取,旧的日志文件被重命名后即便被删除,因为filebeat此时并没有释放文件句柄,所以也可以被持续读取直至文件末尾。旧的日志文件的state信息在滚动发生后36h会被清理掉,从而避免了registry文件越来越大的情况发生。另外需要注意的是,这种场景下因为filebeat会占用已经删除文件的句柄直至文件读取完毕并且close_inactive到期,整个过程中磁盘资源是不会释放的,所以可以通过合理配置close_timeout参数及时释放掉文件句柄。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342