Linux 日志排查:grep / tail / journalctl 常用组合

举报
yd_240164646 发表于 2026/11/12 06:28:37 2026/11/12
【摘要】 服务器出问题时,先看日志。grep 负责定位,tail 跟进最新输出,journalctl 查 systemd 服务日志,三者组合基本够用。 一、grep:先定位,再看上下文查报错加 -n 显示行号,大小写不统一用 -i 忽略:grep -n "ERROR" /var/log/app.loggrep -i "timeout" /var/log/app.log一行报错不够判断,用 -A、-B ...

服务器出问题时,先看日志。grep 负责定位,tail 跟进最新输出,journalctl 查 systemd 服务日志,三者组合基本够用。

一、grep:先定位,再看上下文

查报错加 -n 显示行号,大小写不统一用 -i 忽略:

grep -n "ERROR" /var/log/app.log
grep -i "timeout" /var/log/app.log

一行报错不够判断,用 -A、-B 展开上下文,-A 5 为之后 5 行,-B 5 为之前 5 行:

grep -n -A 5 -B 5 "OutOfMemoryError" /var/log/app.log

跨文件查找加 -r,统计匹配次数可接 wc -l。先用 grep 把范围缩小,再用 -A、-B 看完整过程,而不是一上来就翻整个文件。

二、tail -f:盯住正在发生的日志

服务运行时,tail -f 实时跟随新写入的内容:

tail -f /var/log/nginx/error.log

只看报错时,和 grep 串起来:

tail -f /var/log/app.log | grep -i "error"

日志轮转后 tail -f 可能跟丢被替换的文件,长期监控改用 tail -F;排查结束按 Ctrl+C 退出即可。

三、journalctl:查 systemd 服务日志

按服务名查看,实时跟随加 -f:

journalctl -u nginx.service
journalctl -u nginx.service -f

故障后用 --since 限定时间范围,避免被旧日志淹没:

journalctl -u app.service --since "2026-11-12 06:00:00"
journalctl -u app.service --since "1 hour ago"

只看错误级别、最近 50 行:

journalctl -u app.service -p err --since today -n 50

四、排查示例:接口突然返回 502

接口突然大量返回 502,先限定时间看网关日志:

journalctl -u nginx.service --since "2026-11-12 05:50:00" | grep -i "502"

日志反复出现上游连接超时,说明问题在后端。再跟住后端日志找报错:

tail -f /var/log/app.log | grep -n -i -A 3 "timeout"

结果是后端连接池耗尽,前面还有大量慢查询。定位慢查询接口后限流并修复,502 随即恢复。关键是先用时间范围缩小,再用上下文定位根因。

小结

先用 journalctl 或 tail 确定时间范围和最新动态,再用 grep -n 定位、-i 兜底大小写、-A、-B 还原上下文。先缩小范围再展开细节,多数问题都能在日志里找到答案。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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