Linux 日志排查的五个实用技巧

举报
yd_211758112 发表于 2026/11/01 12:59:58 2026/11/01
【摘要】 分享五个实战高频的 Linux 日志排查技巧:tail -f 实时跟踪、grep 正则过滤、journalctl 查看 systemd 日志、awk/cut 统计字段,以及 logrotate 与磁盘排查,均含命令示例。

在日常运维和故障排查中,Linux 系统的日志是定位问题的第一现场。无论是服务启动失败、磁盘空间告警,还是异常登录,日志里往往藏着答案。但面对动辄数十 MB 甚至 GB 的日志文件,盲目 cat 只会让排查效率更低。下面分享五个在实战中高频使用的日志排查技巧,配合真实命令示例,帮助快速锁定问题。


一、用 tail -f 实时跟踪日志输出


当服务行为正在发生时,实时观察日志是最直接的方式。tail 的 -f 参数会持续输出文件新增内容,配合 -n 可以只关注最近几行。


tail -f /var/log/syslog

tail -n 50 -f /var/log/nginx/access.log


如果日志文件会被定期切割(例如 logrotate 后原文件变为 .1),用 tail -F 可自动重新打开新文件,避免跟踪中断。


二、用 grep 快速过滤关键词


grep 是日志排查的瑞士军刀。结合 -i 忽略大小写、-C 输出匹配行上下文,可以快速定位相关记录。


# 找出所有 ERROR 行及其前后两行

grep -i -C 2 "error" /var/log/app/service.log


# 同时匹配多个关键词(正则交替)

grep -E "timeout|refused|failed" /var/log/messages


对于大文件,建议先 grep 再管道到 less 浏览,避免终端被大量输出淹没:

grep -i "connection refused" /var/log/app/service.log | less


三、用 journalctl 结构化查询 systemd 日志


systemd 管理的系统使用 journalctl 取代了传统的 /var/log/messages。journalctl 支持按单元、时间、优先级筛选,非常适合定位服务异常。


# 只看 nginx 最近的 100 条日志

journalctl -u nginx -n 100 --no-pager


# 查看今天以来的错误级别以上日志

journalctl -p err -since "today"


# 查看某服务上次启动到本次启动之间的日志

journalctl -u myservice --since "reboot"


配合 -f 同样可以实时跟踪:journalctl -u nginx -f。


四、用 awk 和 cut 做简单的日志统计


当需要看"哪个 IP 请求最多"或"哪些状态码占大头"时,awk 比写脚本更快。


# Apache/Nginx Combined 格式中,统计 Top 10 访问 IP

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10


# 统计 HTTP 状态码分布

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn


# 只看响应时间大于 2 秒的请求(假设最后一列为耗时)

awk '$NF > 2 {print}' /var/log/nginx/access.log


五、用 logrotate 和磁盘检查避免"日志把磁盘写满"


日志排查本身也可能被日志反噬:/var/log 占满磁盘会导致新日志写不进去,服务直接崩溃。排查时先检查磁盘,再找日志。


# 查看各分区使用率

df -h


# 找出 /var/log 下最大的 10 个文件

du -ah /var/log | sort -rh | head -10


确认是日志占满后,先检查 logrotate 配置 /etc/logrotate.conf 及 /etc/logrotate.d/ 下的规则,确保日志会定期切割和压缩。紧急清理不要直接 rm 日志文件(进程仍持句柄,空间不释放),正确做法是清空文件内容:


> /var/log/app/service.log

# 或

truncate -s 0 /var/log/app/service.log


之后 systemctl reload 相关服务或执行 logrotate -f /etc/logrotate.conf 触发切割。


小结


这五个技巧覆盖了"看日志 → 筛日志 → 统计日志 → 防日志爆炸"的常用链路。实际排查时通常组合使用,例如先用 journalctl 找到异常时间点,再切到具体应用日志用 grep -C 拉上下文,最后用 awk 统计确认是否为批量问题。把日志当数据来查,而不是当文本来翻,效率会高很多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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