Linux日志分析需聚焦时间、服务、错误模式三要素,通过journalctl、grep、tail等命令快速过滤关联,结合典型错误指纹与轮转机制高效定位问题。

Linux日志分析不是“翻文件”,而是带着问题找线索——核心是定位时间、服务、错误模式三要素,再用工具快速过滤和关联。
盯紧关键日志路径和默认轮转机制
系统日志大多集中在 /var/log/ 下,但不同服务存放位置有差异:
- /var/log/messages:通用系统消息(RHEL/CentOS);Ubuntu/Debian 对应的是 /var/log/syslog
- /var/log/auth.log:登录、sudo、SSH 认证相关(Debian系);RHEL系在 /var/log/secure
- /var/log/kern.log:内核级事件(如驱动加载、OOM、硬件报错)
- /var/log/journal/:systemd-journald 的二进制日志,需用 journalctl 查看
- 应用日志通常由服务自定义,比如 Nginx 在 /var/log/nginx/,MySQL 在 /var/log/mysql/ 或配置中指定
注意:日志会按大小或时间轮转(logrotate 管理),旧日志带 .1、.2.gz 后缀。查历史问题别只看当前文件,先 ls -lt /var/log/*.log* 看最新归档。
用对命令,5秒筛出有效信息
别从头 cat,先用组合命令缩小范围:
- 查某时段错误:journalctl --since "2024-05-20 14:00" --until "2024-05-20 14:30" -p err
- 实时跟踪新日志:tail -f /var/log/syslog | grep -i "failed\|denied\|timeout"
- 统计高频错误关键词:grep "Connection refused" /var/log/syslog | awk '{print $1,$2,$3,$9}' | sort | uniq -c | sort -nr | head -10
- 关联进程与日志:用 ps aux | grep nginx 找 PID,再 grep "PID" /var/log/nginx/error.log
小技巧:加 --no-pager 避免 journalctl 分页阻断管道;用 less +G /var/log/messages 直接跳到末尾再搜索。
识别典型错误模式,少走排查弯路
很多问题有固定“指纹”,见了就能快速判断方向:
- "Permission denied" + "open(/path/file)":不是权限没设,很可能是 SELinux 拦截(ausearch -m avc -ts recent 查 AVC 拒绝记录)
- "Out of memory: Kill process":立刻看 dmesg -T | tail -20,确认是否 OOM killer 干的,再查内存使用趋势(free -h; top -o %MEM)
- "Connection refused" on port X:先 ss -tuln | grep :X 看端口是否真监听;再 systemctl status servicename 确认服务状态
- "Failed password for user xxx" 大量出现:大概率暴力破解,检查 faillog -u xxx 和 IP 来源(配合 lastb)
建立轻量日志习惯,防患于未然
分析是救火,习惯才是防火墙:
- 所有自研脚本或服务,输出日志务必带时间戳:echo "$(date '+%F %T') INFO: started backup" >> /var/log/myscript.log
- 关键操作留痕:sudo 命令默认已记入 auth.log,但建议开启 sudoers 中 logfile /var/log/sudo.log 并设权限 0600
- 定期抽检日志健康度:find /var/log -name "*.log" -mtime +7 -size +100M 找异常增长文件
- 简单集中:单机环境用 rsyslog 转发到远程日志服务器,比本地 grep 更易回溯跨服务事件
基本上就这些。日志本身不会说谎,只是需要你问对问题、选对工具、看懂上下文。










