自动采集文章网站(开发日志采集agent应用之轮转日志(按时间切割或者文件大小切割))
优采云 发布时间: 2022-01-21 09:17自动采集文章网站(开发日志采集agent应用之轮转日志(按时间切割或者文件大小切割))
开发日志采集代理应用的同学都面临一个问题,如何轮转日志(按时间或文件大小)采集?
要弄清楚这个文件,我们需要了解三个问题:
1、日志文件轮转的原理流程;
2、Linux文件存储原理,文件身份唯一标识,文件变换感知;
3、代理采集;
问题原理及解决方法:
1、日志文件的轮转,以logback下的时间切割为例,在输出每一行日志时,会比较当前时间和内存中记录的要切割的时间。如果当前时间到达要剪切的时间,则将当前日志重命名文件,新建文件,将日志写入新创建的日志文件,重新记录下一次剪切时间;
2、在Linux操作系统中,文件存储设计superblock、inode、denty、block等,我们重点介绍inode和block,inode可以理解为文件的索引或者元数据,block是实际的文件的存储数据,两者是有关系的,文件名改变inode号不会改变(inode号相当于元数据的主键,文件名只是元数据的一个公共字段),但是删除文件时可以重用inode(delete文件其实只是删除了inode和block的关联,block的数据并没有被删除,后面写的时候会被覆盖),所以可以使用“dev number + inode number + md5(文件的前1024bytes)”来唯一标识一个文件;
3、文件轮换后的变化通知可以通过linux的inotify机制或者commons-io中的轮换训练机制来获取;commons-io的FileAlterationMonitor的轮换训练机制会有一些坑,下面文章来解释。
看了filebeat和阿里巴巴的ilogtail,解决方案大致差不多。
参考:inode详解-Wiliz-博客园