Linux日志分析基础流程与常用工具
Linux系统中的日志(如/var/log/syslog、/var/log/nginx/access.log)是排查故障、监控系统状态的核心数据源。通过合理使用命令行工具和专用平台,可高效提取、分析日志中的关键信息。以下是具体的分析与提取方法:
基础工具是日志分析的“瑞士军刀”,适用于中小规模日志文件的快速处理:
grep "error" /var/log/syslog查找包含“error”的行(区分大小写);grep -i "error"忽略大小写;grep -A3 -B2 "fail" auth.log显示匹配行及后3行、前2行(用于定位错误上下文)。结合管道可进一步处理,如grep "404" access.log | wc -l统计404错误的数量。awk '{print $1, $3}' logfile提取第1和第3列(如nginx日志中的时间戳与状态码);awk '$9 == 500 {count++} END {print count}' access.log统计状态码为500的请求数;awk '{sum+=$3} END {print sum}' logfile计算第3列的总和(如请求耗时总和)。sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[ANONYMIZED]/g' auth.log将IP地址替换为“[ANONYMIZED]”(隐私保护);sed -n '/^May 10 04:00/,/^May 10 04:30/p' system.log提取特定时间段(04:00-04:30)的日志。sort按指定字段排序(如sort -k3n logfile按第3列数值升序排列);uniq -c统计重复行数量(如awk '{print $1}' syslog | sort | uniq -c | sort -nr统计每分钟日志数量,找出高频时间段)。对于使用systemd的系统(如Ubuntu 16.04+、CentOS 7+),或需要处理海量日志的场景,专用工具更高效:
journalctl -b查看本次启动以来的所有日志;journalctl -u nginx.service过滤nginx服务的日志;journalctl --since "2025-11-01" --until "2025-11-02"按时间范围查询;journalctl -o json以JSON格式输出(便于后续用jq解析)。/etc/logrotate.conf配置(如/var/log/nginx/*.log { daily rotate 7 compress missingok }表示每天轮换,保留7天压缩日志),或手动执行logrotate -vf /etc/logrotate.d/nginx强制轮换。现代应用(如Nginx、API服务)常生成JSON格式的日志,需用结构化工具解析:
cat app.log | jq '.timestamp, .error.message'提取JSON中的时间戳与错误信息;cat api.log | jq 'select(.response_code >= 400) | {time: .timestamp, url: .request.url}'过滤400及以上错误,并输出时间与URL。in2csv logfile > log.csv),再用csvstat log.csv统计列信息(如唯一值数量、最大值)。对于大规模或分布式日志,需用高级工具实现深度分析与可视化:
{job="nginx"} |= "500"查询nginx服务的500错误)。awk '{print $9}' access.log | sort | uniq -c | gnuplot -p -e 'plot "-" using 2:1 with boxes'生成状态码分布柱状图,直观展示错误分布。tail -f /var/log/syslog | grep "keyword"实时跟踪包含关键词的日志(如监控nginx错误)。sed -n '/start_time/,/end_time/p' big.log > small.log提取特定时间段的日志,减少处理量。m键标记日志位置(如错误行),通过<tag>(如a对应第一个标记)快速返回,便于反复查看。zgrep "error" youzan.log.gz或zcat youzan.log.gz | grep "error"直接查看.gz压缩日志中的关键词,无需解压。