日志分析中的难点

创建:xiaozi · 最后修改:xiaozi 2019-07-27 16:25 ·

我们的线上日志如果都打到一个文件中,文件就会越来越大,所以会有个策略对日志文件进行分割

包括log4j本身就带有的日志分割功能,或者使用logrotate来分割nginx日志

这样在把解析文件,保存到数据库的时候,就需要处理多个日志文件,还需要处理日志分割时候的情况

logrotate默认切分的方式

重命名日志文件,创建一个新的文件

文件的inode

Note

在同一块磁盘上mv文件的时候,inode是不会变的

使用 ls -i <filename> 或者 stat <filename> 可以看到文件的inode

下面这个例子 /data/~/ 处于两块不同的磁盘上

$/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

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

记录的位置信息有下面几种情况

  1. 还没有位置信息

  2. inode 对应的是已经被删除的文件 analytics.tool.lu.access.log-20170725

  3. inode 对应的是 analytics.tool.lu.access.log-20170728

  4. inode 对应的是 analytics.tool.lu.access.log

应对这上面的几种情况

  1. 可以指定从哪天的开始分析

  2. 已经被删除的文件再也找不回来了,这部分的日志就丢失了;不过一般会保存7天内的,如果7天内都没有处理,说明日志不重要;我们可以直接从最老的日志文件开始分析

  3. 直接从这个文件开始分析

  4. 直接从最新的文件开始分析

那么如何根据inode找到对应的日志文件

Tip

扫描日志文件夹, 记录所有的inode和文件名的对应关系,供索引使用


浏览 25338 次

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.3. UTC+08:00, 2024-12-10 01:04
浙ICP备14020137号-1 $访客地图$