Linux系统日志分析教程_GrepAwkSed日志解析实战

9次阅读

Linux 日志分析靠 grep、awk、sed 精准组合:grep 筛选错误 / 警告等关键词并显示上下文,awk 按时间戳提取日志片段并统计 IP、状态码等字段,sed 清洗格式、脱敏敏感信息,三者协同实现高效结构化分析。

Linux 系统日志分析教程_GrepAwkSed 日志解析实战

Linux 系统日志分析不靠猜,靠精准匹配和结构化提取。掌握 grepawksed 这三个核心 工具 的组合用法,能快速从海量日志中定位异常、统计趋势、提取关键字段。

快速定位错误和警告信息

系统日志(如 /var/log/syslog/var/log/messages)里混杂大量信息,优先抓出高价值线索:

  • grep -i "error|warning|fail|denied" 不区分大小写筛选典型关键词
  • -C 2 显示上下文(前后两行),便于看清报错前后的操作或服务状态
  • 配合 tail -f /var/log/secure | grep "Failed password" 实时监控 SSH 暴力破解尝试

按时间范围提取日志片段

日志首字段通常是时间戳,但格式不统一(如 Oct 12 14:23:012024-10-12T14:23:01+08:00)。用 awk 灵活处理:

  • 提取今天的所有 nginx 访问日志:awk '$4 ~ /[.*$(date +%d/%b/%Y)/ {print}' /var/log/nginx/access.log
  • 筛选某小时内的记录(假设时间在第 4 字段):awk '$4 ~ /^[12/Oct/2024:14:/ {print}' access.log
  • sed -n '/Oct 12 14:00:/, /Oct 12 15:00:/ p' syslog 截取时间段(适合标准 syslog 格式)

提取并统计关键字段(IP、状态码、URL)

Nginx 或 Apache 日志结构清晰,awk是字段提取主力:

  • 统计访问最多的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
  • 查看 HTTP 状态码分布:awk '{print $9}' access.log | sort | uniq -c | sort -nr
  • 提取返回 500 错误 的完整 URL:awk '$9 =="500"{print $7}' access.log | sort -u

清洗与重构日志内容

原始日志常含冗余字符或需格式标准化,sed擅长做“文本手术”:

  • 去掉日志中的方括号(如[error]error):sed 's/[//g; s/]//g'
  • 把多空格替换成单逗号,方便导入 CSV:sed 's/[[:space:]]+/","/g; s/^","//; s/","$//'
  • 脱敏处理敏感 IP(如将 192.168.1.100 替换为192.168.1.XXX):sed 's/192.168.1.[0-9]+/192.168.1.XXX/g'

实际分析时,三者常嵌套使用:先用 grep 缩小范围,再用 awk 切字段,最后用 sed 整理输出。不必死记命令,理解每条工具的核心能力——grep是“找”,awk是“切和算”,sed是“改”——组合起来就是日志分析的最小高效闭环。

text=ZqhQzanResources