LinuxShell处理日志文件_批量分析技巧说明【教学】

10次阅读

Linux 日志批量分析核心是熟练组合 grep、awk、sed、sort、uniq、cut 命令,依据日志结构特征高效筛选、统计、提取与去重,避免常见陷阱。

LinuxShell 处理日志文件_批量分析技巧说明【教学】

Linux Shell 处理日志文件的批量分析,核心在于“用对命令、串好流程、避开陷阱”。不需要写脚本也能高效完成,关键是掌握 grep、awk、sed、sort、uniq、cut 这几个命令的组合逻辑和常见日志结构特征。

按时间范围快速筛选日志行

多数日志(如 nginx、systemd、应用自定义日志)首字段是时间戳。直接用 awk 提取并比对,比逐行 grep 更稳:

  • 提取今天凌晨到现在的 Nginx 访问日志:
    awk -F'[‘ ‘$2 ~ /^$(date -d “today” +%d/%b/%Y):[0-9]{2}:[0-9]{2}/ {print}’ /var/log/nginx/access.log
  • 更通用做法:先用 sed 提取含日期的行,再用 grep 精确匹配(例如只看 10 月 25 日):
    sed -n ‘/25/Oct/2024/p’ app.log | grep ‘ERROR|WARN’

统计高频错误或接口调用

目标不是“看到错误”,而是“知道哪类错误最多、哪个路径最常出问题”:

  • 统计 HTTP 状态码 分布(Nginx 日志第 9 字段):
    awk ‘{print $9}’ access.log | sort | uniq -c | sort -nr
  • 提取并统计报错行中的关键词(如 Java 异常类名):
    grep ‘Exception|ERROR’ app.log | awk -F’:’ ‘{print $NF}’ | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -10

提取关键字段做横向对比

日志里混着 IP、URL、响应时间、用户 ID 等信息,用 cutawk 定位后,可导出为简易表格用于排查:

  • 导出耗时超 2 秒的请求(假设第 10 字段是 $request_time):
    awk ‘$10 > 2 {print $1, $7, $10, $9}’ access.log | column -t
  • 按 IP 统计请求数 + 最长响应时间:
    awk ‘$10 > 0 {ip[$1]++; max[$1] = ($10> max[$1]) ? $10 : max[$1]} END {for (i in ip) print i, ip[i], max[i]}’ access.log | sort -k2 -nr

合并多日志文件统一分析

滚动日志(如 app.log、app.log.1、app.log.2.gz)不能靠手动 解压 拼接:

  • 自动处理当前目录下所有相关日志(含 gzip):
    zcat app.log*gz 2>/dev/null; cat app.log app.log.1 2>/dev/null | awk ‘/POST /api/order/ && $9 ~ /^5../ {print $1, $7, $9}’
  • 避免重复分析:用 awk ‘!seen[$0]++’ 去重(适用于误重复写入场景):
    zcat *.gz | cat – app.log | awk ‘!seen[$0]++’ | grep ‘OutOfMemoryError’

不复杂但容易忽略:日志字段分隔符是否一致、时间格式是否跨时区、gzip 文件权限是否可读。动手前先 head -3file 看一眼,省掉大半调试时间。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-29发表,共计1306字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources