写点什么

Filebeat 同步写位点文件引发的磁盘 IO 问题

用户头像
秦宝齐
关注
发布于: 2021 年 01 月 07 日

使用 Filebeat 版本 6.8.9(高版本也涉及)

通过监控发现宿主机磁盘繁忙


发现 filebeat 进程和 jdb2 进程占据了磁盘 IO 的大部分(97%+)。

经研究发现 filebeat 写临时位点文件代码中采用了 direct IO 的写方式。

diskstore.go checkpointTmpFile 方法:

func (s *diskstore) checkpointTmpFile(tempfile string, states map[string]entry) (string, error) {	f, err := os.OpenFile(tempfile, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_SYNC, s.fileMode)	if err != nil {		return "", err	}  ....}
复制代码


考虑到 checkpointTmpFile 应该无需同步刷盘(最坏情况可能重复采集),故去掉 os.O_SYNC

更新后效果明显:


磁盘繁忙前后对照(另外一台)



给 filebeat 提了 mr,还没合并。https://github.com/elastic/beats/pull/23325


发布于: 2021 年 01 月 07 日阅读数: 61
用户头像

秦宝齐

关注

还未添加个人签名 2020.03.26 加入

还未添加个人简介

评论

发布
暂无评论
Filebeat同步写位点文件引发的磁盘IO问题