压缩归档日志的检索方式
轮转后的旧日志通常被压缩成 .gz 或 .xz,直接用 grep 检索只会得到二进制文件的匹配提示。gzip 体系提供 zgrep 与 zcat,xz 体系提供 xzgrep 与 xzcat,用法和普通 grep/cat 一致,可以直接在压缩文件上做关键字检索或管道统计,不必先解压占用额外磁盘空间。
跨文件统计要处理文件名前缀
对多个压缩文件执行 zgrep 时,命中行会带上文件名前缀,做行数统计或字段截取之前应当用 -h 抑制前缀,否则统计结果会混入文件名。另一个常见问题是不压缩与压缩文件混在一起搜索:通配符写法要覆盖两类文件,或者分开处理再合并结果。
基本信息
| 适用平台 | Linux(gzip 与 xz 套件) |
|---|---|
| gzip 体系 | zgrep、zcat、zless |
| xz 体系 | xzgrep、xzcat、xzless |
| 常用选项 | -h 抑制文件名前缀、-c 只输出计数 |
| 适用场景 | 跨天跨周的日志回溯与批量统计 |
典型使用场景
- 跨周统计失败登录:对多份归档日志一次完成计数
- 回溯某个地址的历史行为:在归档范围内检索该地址的全部记录
- 管道统计:用 zcat 输出后交给 awk 做字段聚合
- 确认历史是否仍存在:先确认归档文件存在,再决定分析范围
- 为报告取证:注明命中的文件名与时间段,结论可追溯
压缩日志检索
压缩日志检索
# 统计多份归档日志中失败登录的次数(-h 抑制文件名前缀)
zgrep -h -c 'Failed password' /var/log/auth.log.*.gz
# 检索特定地址的全部记录,保留文件名以便注明来源
zgrep '203.0.113.9' /var/log/auth.log.*.gz | head -20
# 管道统计:按月统计接受登录的对象
zcat /var/log/auth.log.*.gz | grep 'Accepted' | awk '{print $NF}' | sort | uniq -c | sort -rn | head
# xz 压缩的历史文件改用对应命令
# xzgrep -c 'Failed password' /var/log/auth.log.*.xz常见问题与处理
| 现象 | 原因 | 处理方式 |
|---|---|---|
| 提示二进制文件匹配 | 直接对压缩文件用了 grep | 改用 zgrep 或先 zcat |
| 统计结果异常偏大 | 输出带文件名前缀被计入 | 加 -h 抑制前缀 |
| 通配符没匹配到文件 | 压缩格式不是 .gz | 确认实际扩展名,改用 xzgrep |
| 跨天数据缺失 | 归档已被轮转删除 | 核对保留份数,说明边界 |
| 统计口径不一致 | 部分文件加了 -h 部分没加 | 统一选项后重跑 |
不同发行版与配置可能使用不同的压缩程序(gzip、bzip2、xz),用 ls 确认扩展名后再选对应命令,不要假定一定是 .gz。
检索结果要连同文件名与时间段记录在分析笔记中:报告里的每个数字都应当能回指到具体的文件与命令。