首页/安全/取证与溯源速查/按小时统计日志条数查缺口
日志溯源53 条

按小时统计日志条数查缺口

对单一日志文件按小时聚合行数,缺口与突降会浮现;与轮转记录、重启记录对照后再标记为可疑时段。

取证与溯源速查安全更新于 2026-10-13

按小时聚合行数看得见缺口

单一日志文件的记录量在正常情况下是平稳的,把行数按小时聚合后,某个小时突然掉到接近零,或者前后两个小时的数字相差数倍,都是值得追查的信号。与重启记录、轮转时间、服务重载记录对照,就能区分「服务停了」「日志被轮转」「有人清理了日志」这几种完全不同的原因。

syslog 时间不带年份

传统 syslog 格式的时间戳只有月、日与时分秒,没有年份。跨年数据在按小时聚合时会重叠在一起,所以要先按文件与轮转顺序确定每条记录的年份,再统计;否则会得到一份看似正常、实际年份错乱的分布。

基本信息

适用平台Linux(日志文件与轮转归档)
常用命令grep 提取时间字段后配合 awk 聚合、sort、uniq
对照材料轮转时间、重启与关机记录、服务重载记录
粒度按小时,必要时按十分钟
注意syslog 无年份,跨年需补年份后再统计

典型使用场景

  • 发现日志清理:某段记录整体缺失,先排除停机与轮转
  • 识别服务中断:某类记录的缺失与故障时间吻合
  • 评估证据完整性:说明可分析范围与缺口位置
  • 验证轮转策略:确认轮转时间点与归档文件数量一致
  • 为时间线做区域划分:按缺口把时间线分成若干连续段落

小时聚合与缺口定位

小时聚合与缺口定位
# 按小时统计行数,窗口内数字应用接近
awk '{print $1" "$2" "substr($3,1,2)}' /var/log/auth.log | uniq -c | tail -24

# 加入年份信息后再统计(示例:2026 年的记录)
sed 's/^/2026 /' /var/log/auth.log | awk '{print $1" "$3" "substr($4,1,2)}' | uniq -c | head -24

# 与轮转和重启记录对照
grep -E 'logrotate|rotate' /var/log/syslog 2>/dev/null | tail -5
last -x -f /var/log/wtmp | head -5

# 列出当前与历史文件,确认归档是否连续
ls -l --time-style=long-iso /var/log/auth.log*

缺口原因对照

表现可能原因核实方式
单小时骤降服务重启或日志轮转查服务重载与轮转记录
连续多小时为零服务停机或日志停止写入对照启动记录与故障时间
固定时段重复缺失采集配置排除或过滤规则检查采集配置与规则
整体突然中断不再恢复日志被清理或转发中断核对归档文件与转发节点
归档文件数量不足轮转保留份数偏少查看轮转配置
聚合时先把压缩归档与当前文件分开统计,再合并结果:混在一起用通配符容易把不同时间段的数字叠加,得出错误的分布。
缺口本身不等于被人清理:重载、崩溃、磁盘写满、转发队列积压都会造成缺口,报告中应写明排除依据,而不是直接定性。

易错点

  • syslog 无年份直接统计:跨年数据重叠,分布结果完全错乱
  • 把缺口直接判为清理:未排除停机与轮转,结论不成立
  • 归档文件顺序读错:应从最新往前追溯,读反会得到颠倒的分布
  • 统计口径混用:部分文件带压缩部分不带,数字不可比
  • 只统计不核实:缺少与重启、轮转记录的对照,缺口原因无法确认

数据来源与参考

  • logrotate man 手册
  • SANS 日志分析资料
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌