导语:Linux 故障排查最怕“有现象、没证据”。日志就是系统留下的现场记录,从服务启动失败、磁盘异常、登录风险,到应用 500 错误,很多问题都能在日志里找到线索。下面这篇文章从入门命令讲到实战思路,帮你把“翻日志”变成一套可复用的方法。🛠️
一、先认识 Linux 日志在哪里
大多数 Linux 发行版会把传统文本日志放在 /var/log 目录下,例如 /var/log/messages、/var/log/syslog、/var/log/auth.log、/var/log/secure、/var/log/nginx/access.log 等。不同发行版命名略有差异,排查时不要死记文件名,建议先用 ls -lh /var/log 看最近修改时间和文件大小。
如果系统使用 systemd,很多系统与服务日志也可以通过 journalctl 查询。根据 journalctl 手册,它用于打印 systemd journal 中的日志,并支持按服务单元、时间、优先级等条件过滤 [1]。这意味着你不必只依赖单个文本文件,可以从统一入口查看系统级事件。🔍
二、入门必会:快速看日志
刚开始排查时,不建议一上来就全量打开大文件。常用思路是“先看尾部,再按关键词缩小范围”。例如:tail -n 100 /var/log/syslog 查看最后 100 行;tail -f /var/log/nginx/error.log 实时观察新增错误;less /var/log/messages 分页查看大文件。
搜索关键词时,grep 是最常用工具。GNU grep 文档说明,grep 会在输入文件中搜索匹配模式,并默认输出匹配行 [2]。排查中可以组合使用:grep -i "error" app.log 忽略大小写查错误,grep -n "timeout" app.log 显示行号,grep -C 3 "failed" app.log 查看命中行上下文。
三、进阶技巧:按时间、服务和级别定位
日志排查的核心不是“看得多”,而是“缩得准”。如果你知道故障发生在 10:30 左右,就应该优先按时间过滤。systemd 场景下可使用:journalctl --since "2026-08-17 10:00" --until "2026-08-17 11:00"。如果只看某个服务,例如 nginx,可用:journalctl -u nginx.service --since "1 hour ago"。
服务启动失败时,建议先执行 systemctl status 服务名 看状态摘要,再用 journalctl -xeu 服务名 查看更详细的错误上下文。常见线索包括配置文件语法错误、端口被占用、权限不足、依赖服务未启动、证书路径错误等。看到报错后,不要只复制最后一行,最好向上多看几十行,因为真正原因往往出现在“失败结果”之前。
四、实战场景:网站访问异常怎么查
- 确认现象:先区分是访问慢、打不开、返回 403、404、502 还是 500。不同状态码对应的排查方向不同。
- 看 Web 服务日志:例如 nginx 通常看 access.log 和 error.log。access.log 能看到请求路径、状态码、来源 IP;error.log 更容易发现上游连接失败、文件权限、配置问题。
- 看应用日志:如果 nginx 返回 502,问题可能在后端应用。此时要继续查看 Java、PHP、Python、Node.js 等应用自己的日志,而不是只停留在代理层。
- 看系统资源:用 dmesg、journalctl -k、df -h、free -m、top 辅助判断是否存在 OOM、磁盘满、文件句柄耗尽等问题。
一个实用习惯是把日志按“请求链路”串起来:用户请求进入负载均衡,再到 nginx,再到应用服务,最后到数据库或缓存。每一层都可能记录不同信息,单看某一处容易误判。排查时可以用请求 ID、时间戳、用户 ID、接口路径或来源 IP 作为线索,把分散日志拼成完整故事。🧩
五、不要忽略日志轮转和历史文件
很多新手只看当前日志文件,却忽略了 .1、.gz、按日期命名的历史日志。Linux 常用 logrotate 管理日志轮转、压缩、删除和邮件发送,手册中也说明它可按 daily、weekly、monthly 或文件大小等条件处理日志 [3]。因此,如果故障发生在昨天,当前日志里没有记录是正常的,要去历史文件中找。
查看压缩日志可以使用 zgrep,例如:zgrep "OutOfMemory" app.log.2.gz。如果日志特别大,尽量先按时间切片或关键词过滤,避免直接打开造成终端卡顿。对于线上机器,排查动作要克制,少用高消耗命令,必要时复制日志片段到分析环境处理。
六、实用排查清单 ✅
- 先定范围:确认故障时间、影响服务、用户现象和最近变更。
- 先看错误:搜索 error、failed、timeout、denied、oom、panic、refused 等关键词。
- 再看上下文:不要只看命中行,使用 grep -A、grep -B、grep -C 查看前后内容。
- 对齐时间:确认服务器时区、容器时间、应用日志时间格式是否一致。
- 保留证据:处理前保存关键日志片段,便于复盘和协作。
- 避免误删:不要为了“清理空间”直接删除正在写入的日志,优先使用正确的轮转或截断方案。
经验提示:日志排查不是背命令比赛,而是不断缩小范围的过程。先问“什么时候开始异常”,再问“哪一层先报错”,最后问“错误前发生了什么”。
总结
Linux 日志排查可以概括为四步:定位时间、选择日志、过滤关键词、串联上下文。入门阶段掌握 tail、less、grep、journalctl,就能处理大量常见问题;实战阶段则要结合服务链路、系统资源、历史日志和变更记录综合判断。多做几次复盘,你会发现日志不是一堆杂乱文本,而是系统把问题答案提前写好的“案发现场”。🚀