当前位置:首页>Linux>Linux日志分析:5分钟定位故障根因

Linux日志分析:5分钟定位故障根因

  • 2026-10-11 07:51:46
Linux日志分析:5分钟定位故障根因

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

三、高频故障的日志特征速查

我整理了最常见的几种故障对应的日志特征:

故障类型
日志特征
关键词
OOM
Java heap / Out of memory
`OutOfMemoryError`, `killed process`
数据库连接池耗尽
获取连接超时
`ConnectionPool`, `timeout`, `wait`
磁盘满
写入失败
`No space left on device`
DNS解析失败
域名无法访问
`Temporary failure in name resolution`
证书过期
SSL握手失败
`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脚本 #服务器

最新文章

随机文章