$/data touch test.txt
$/data stat test.txt
Device: ca11h/51729d Inode: 12 Links: 1
$/data mv test.txt ~
$/data stat ~/test.txt
Device: ca01h/51713d Inode: 286751 Links: 1
$/data touch foo.txt
$/data stat foo.txt
Device: ca11h/51729d Inode: 12 Links: 1
$/data mv foo.txt bar.txt
$/data stat bar.txt
Device: ca11h/51729d Inode: 12 Links: 1
日志分析中的难点
我们的线上日志如果都打到一个文件中,文件就会越来越大,所以会有个策略对日志文件进行分割
包括log4j本身就带有的日志分割功能,或者使用logrotate来分割nginx日志
这样在把解析文件,保存到数据库的时候,就需要处理多个日志文件,还需要处理日志分割时候的情况
logrotate默认切分的方式
重命名日志文件,创建一个新的文件
文件的inode
Note
|
在同一块磁盘上mv文件的时候,inode是不会变的 |
使用 ls -i <filename>
或者 stat <filename>
可以看到文件的inode
下面这个例子 /data/
和 ~/
处于两块不同的磁盘上
trace日志的分析
通常来讲,一行就是一条日志;但是Java的trace日志是多行的,唯一的区别就是日志的开始行有时间的标志,可以使用时间的标志来决定是多行日志还是单行日志
无缝的日志切换分析
首先需要知道日志的切分规则,在分析的时候取出最后一次分析的日志的inode和offset,使用seek的方式找到上次中断的点,这样分析的日志才不会漏掉
比如我服务器上有下面这几个文件
analytics.tool.lu.access.log
analytics.tool.lu.access.log-20170726
analytics.tool.lu.access.log-20170727
analytics.tool.lu.access.log-20170728
analytics.tool.lu.access.log-20170729
analytics.tool.lu.access.log-20170730
analytics.tool.lu.access.log-20170731
analytics.tool.lu.access.log-20170801
analytics.tool.lu.access.log-20170802
记录的位置信息有下面几种情况
-
还没有位置信息
-
inode 对应的是已经被删除的文件 analytics.tool.lu.access.log-20170725
-
inode 对应的是 analytics.tool.lu.access.log-20170728
-
inode 对应的是 analytics.tool.lu.access.log
应对这上面的几种情况
-
可以指定从哪天的开始分析
-
已经被删除的文件再也找不回来了,这部分的日志就丢失了;不过一般会保存7天内的,如果7天内都没有处理,说明日志不重要;我们可以直接从最老的日志文件开始分析
-
直接从这个文件开始分析
-
直接从最新的文件开始分析
那么如何根据inode找到对应的日志文件
Tip
|
扫描日志文件夹, 记录所有的inode和文件名的对应关系,供索引使用 |
浏览 25230 次