开发日志采集agent应用的朋友都面临一个问题,轮转日志(按时间切割或则文件大小切割)怎样采集?
要认清楚这个文件,我们须要了解三个问题:
1、日志文件轮转的原理过程;
2、linux文件储存原理、文件身分的惟一标示、文件变换的感知;
3、agent采集;
问题原理及解法:
1、日志文件的轮转linux 文件切割,以logback下的时间切割为例,输出每行日志时会比较当时时间和显存中记录的待切割时间,假如当前时间到了待切割时间linux设置默认网关,则重命名当前日志文件红帽linux,创建新文件写日志到新创建的日志文件,重新记录上次带切割时间;
2、linux操作上面,文件储存设计superblock、inode、denty、block等方面,我们重点看inode和block,inode可以理解为文件的索引或则元数据linux 文件切割,block为文件实际储存数据,二者有关联关系,文件名称变更inode的编号是不会变的(inode编号相当于元数据字段、文件名只是元数据的一个普通数组),而且inode是可以被复用的当文件被删掉后(删掉文件实际上只是删掉了inode和block的关联关系,block的数据并未删掉,旁边发生写会覆盖),因此可以用“dev编号+inode编号+md5(文件前1024byte)”唯一标示一个文件;
3、文件轮转后的变化通知,可以通过linux的inotify机制或则commons-io上面的轮训机制来捕获;commons-io的FileAlterationMonitor轮训机制时间会有一些坑会出现,旁边的文章我们会讲解。
看了filebeat和阿里的ilogtail,方案大致类似。
参考:Inode解读-Wiliz-博客园
本文原创地址://gulass.cn/kfrzcjayyzlz.html编辑:刘遄,审核员:暂无