Linux日志分析:5分钟定位故障根因
凌晨3点,手机响了——"服务挂了"。
这种时刻你脑子里第一反应是什么?重启?别急,日志才是真相。今天教你一套日志分析的实战方法,让你5分钟内定位95%的故障根因。
一、先搞清楚日志在哪
很多新手一上来就 grep,结果翻了半天发现找错了文件。先确认日志位置:
# 系统日志 /var/log/messages # CentOS/RHEL /var/log/syslog # Ubuntu/Debian # 应用日志(常见位置) /var/log/nginx/ # Nginx /var/log/mysql/ # MySQL /app/logs/ # Java/Go 自定义应用 # systemd 服务日志 journalctl -u <服务名> --since "1 hour ago"
Pro Tip:养成 tail -f 习惯,出问题时先开一个窗口实时跟踪:
tail -f /var/log/nginx/error.log
二、3个grep技巧,快速过滤噪音
日志动辄几GB,大部分是正常请求,怎么快速找到异常?
技巧1:时间范围过滤
# 只看最近10分钟的错误 awk '/^2026-05-18 08:[0-5][0-9]:/' /var/log/app.log | grep ERROR
技巧2:按错误级别筛选
# 统计各级别数量,快速判断严重程度 grep -oP 'ERROR|WARN|INFO' /var/log/app.log | sort | uniq -c | sort -rn
技巧3:提取关键信息字段
# 从JSON格式日志中提取错误信息 grep ERROR app.log | grep -oP '"message":"[^"]*"' | sort | uniq -c | sort -rn | head -10
三、高频故障的日志特征速查
我整理了最常见的几种故障对应的日志特征:
| | |
|---|
| Java heap / Out of memory | `OutOfMemoryError`, `killed process` |
| | `ConnectionPool`, `timeout`, `wait` |
| | `No space left on device` |
| | `Temporary failure in name resolution` |
| | `certificate has expired`, `SSL` |
实战案例:某次服务告警,dmesg 显示 Out of memory: Killed process,但应用日志完全正常。用 dmesg -T | grep -i oom 确认是系统级OOM Killer,不是Java的OOM。根本原因是另一个服务内存泄漏,通过 systemctl stop 那个服务后恢复。
四、journalctl — systemd时代的日志神器
如果你的系统用systemd管理服务,journalctl 是必会工具:
# 查看某服务最近1小时的日志 journalctl -u nginx --since "1 hour ago" --no-pager # 只看错误 journalctl -u app-service -p err --since today # 按CPU/内存使用排序 journalctl -u app-service --since today -o verbose | grep -E "CODE_FILE|MESSAGE" # 导出日志给开发排查 journalctl -u app-service --since "2026-05-18 08:00" --until "2026-05-18 09:00" > /tmp/debug.log
五、日志分析自动化脚本
手动grep太慢?这个脚本可以帮你一键生成故障报告:
#!/bin/bash # quick-diag.sh - 快速故障诊断 LOG=$1 echo "=== 错误统计 ===" grep -oP '\[(ERROR|WARN)\].*' $LOG | awk -F']' '{print $2}' | sort | uniq -c | sort -rn | head -10 echo "" echo "=== 异常IP TOP10 ===" grep -oP '\d+\.\d+\.\d+\.\d+' $LOG | sort | uniq -c | sort -rn | head -10 echo "" echo "=== 最近10条ERROR ===" grep ERROR $LOG | tail -10用法:bash quick-diag.sh /var/log/app.log
日志分析的核心不是工具多厉害,而是知道看什么、怎么过滤、怎么关联。上面这套方法覆盖了我日常90%的故障排查场景。
你的日志分析有什么独家技巧吗?留言交流,说不定能帮到更多人。
#Linux运维 #日志分析 #故障排查 #journalctl #grep #运维实战 #shell脚本 #服务器