编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

轮转日志文件采集(日志轮转工具)

wxchong 2024-07-22 22:27:03 开源技术 35 ℃ 0 评论

开发日志采集agent应用的同学都面临一个问题,轮转日志(按时间切割或者文件大小切割)如何采集?

要搞清楚这个文件,我们需要了解三个问题:

1、日志文件轮转的原理过程;

2、linux文件存储原理、文件身份的唯一标识、文件变换的感知;

3、agent采集;

问题原理及解法:

1、日志文件的轮转,以logback下的时间切割为例,输出每行日志时会比较当时时间和内存中记录的待切割时间,如果当前时间到了待切割时间,则重命名当前日志文件,创建新文件写日志到新创建的日志文件,重新记录下次带切割时间;

2、linux操作系统里面,文件存储设计superblock、inode、denty、block等方面,我们重点看inode和block,inode可以理解为文件的索引或者元数据,block为文件实际存储数据,两者有关联关系,文件名称变更inode的编号是不会变的(inode编号相当于元数据主键、文件名只是元数据的一个普通字段),但是inode是可以被复用的当文件被删除后(删除文件实际上只是删除了inode和block的关联关系,block的数据并未删除,后面发生写会覆盖),因而可以用“dev编号+inode编号+md5(文件前1024byte)”唯一标识一个文件;

3、文件轮转后的变化通知,可以通过linux的inotify机制或者commons-io里面的轮训机制来捕获;commons-io的FileAlterationMonitor轮训机制时间会有一些坑会出现,后面的文章我们会讲解。

看了filebeat和阿里的ilogtail,方案大致类似。

参考:Inode详解 - Wiliz - 博客园

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表