Linux 日志排查:从一条报错到定位根因的日常思路

举报
yd_69240880 发表于 2026/11/01 06:06:02 2026/11/01
【摘要】 线上服务出问题时先别急着重启:本文按确认范围、找对日志、按时间线还原、区分表象与根因的顺序,分享一套日常可用的 Linux 日志排查思路和可复用清单。

线上服务出问题时,日志往往是第一现场。很多人一上来就重启服务,结果问题暂时消失,根因却还在,下一次换个时间又会回来。本文分享一套日常可用的 Linux 日志排查思路:先定范围,再找证据,最后才动手改。

第一步:先确认三件事

看到报错不要急着翻日志,先问清楚:什么时候开始的?影响了哪些用户或接口?最近有没有发布、改配置、扩缩容?把这三点写下来,能避免在无关日志里浪费半小时。如果是刚发布后出问题,先对比变更内容;如果是凌晨定时出现,就要留意定时任务和日志轮转。

第二步:找对日志,而不是到处翻

系统服务优先看 journalctl,例如查看某个服务最近的日志并按时间过滤;传统服务则在 /var/log 下找对应的 messages、secure 或应用专属日志。应用自己的日志更重要:先确认日志级别、输出路径和轮转策略,再看有没有把关键信息打到标准输出却没有落盘。容器环境里,要区分宿主机日志、容器日志和应用日志,不要只看其中一层就下结论。

journalctl -u nginx --since "2026-11-01 05:00" --until "2026-11-01 06:00"
tail -n 200 /var/log/nginx/error.log
grep -n "ERROR" /var/log/app/app.log | tail -n 100

第三步:按时间线还原,而不是只看最后一行

报错的最后一行常常只是结果。正确做法是把故障时间点前后几分钟的日志拉出来,按时间排序,找出第一次异常。可以用 grep 过滤关键字,再用上下文参数看前后几行;也可以先用 tail 观察实时日志,确认问题是否还在复现。注意时区和时间格式不一致的问题:有的日志用 UTC,有的用本地时间,对不齐时间线就容易把两件无关的事拼成因果。

第四步:区分表象和根因

举个常见例子:应用日志报数据库连接失败,第一反应可能是数据库挂了,但往前翻可能发现磁盘满了,数据库无法写入;再往前看,可能是某个定时任务产生了大量临时文件。只重启应用,磁盘还是满的,问题很快会复发。再如连接池耗尽,表面是超时,根因可能是慢查询占住了连接,或者下游接口变慢导致连接迟迟不释放。这时要结合系统指标一起看:CPU、内存、磁盘、连接数和慢查询,日志给线索,指标给佐证。

一份可复用的排查清单

  1. 确认故障时间、影响范围和最近变更;2. 找到对应服务的系统日志和应用日志;3. 按时间线定位第一次异常,而不是最后一次报错;4. 用关键词和上下文缩小范围,必要时实时跟随日志;5. 结合磁盘、内存、连接数等指标验证猜测;6. 修复后观察一段时间,确认异常不再出现;7. 把过程和结论记下来,下次同类问题可以直接复用。

结尾:好习惯比命令更重要

日志排查拼的不是谁记得的命令多,而是思路是否稳定:先定范围,再找证据,再验证,最后修复并复盘。平时可以把常用命令整理成自己的速查表,给关键服务加上日志级别说明和告警阈值,故障时就不用临时翻文档。把每一次排查都当成一次积累,日志就会从一堆看不懂的文字,变成定位问题最可靠的线索。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。