《实战分享:服务器日志排查技巧 - 从入门到精通的 Linux 命令大全》
sed -n '/2024-05-07 10:00/,/2024-05-07 11:00/p' /var/log/app.log # 指定时间段日志。grep "ERROR" /var/log/app.log | grep "2024-05-07" # 日期+错误。awk '/ERROR/ {print NR": "$0}' /var/log/app.log # 显示错误行号。sed 's/ERR
目录
1.引言(痛点引入)
# 服务器日志排查实战:从手忙脚乱到游刃有余
> "凌晨3点,线上服务突然挂了,老板在群里@你:'快看看什么问题!'"
> 这是每个运维/开发工程师都经历过的噩梦。今天,我将分享在公司实战中总结的日志排查技巧,让你面对服务器问题时不再慌张。
2.基础篇:日志文件位置速查
# 常见日志目录
/var/log/ # 系统日志主目录
/var/log/messages # 系统全局日志(CentOS/RHEL)
/var/log/syslog # 系统日志(Ubuntu/Debian)
/var/log/auth.log # 认证日志
/var/log/nginx/ # Nginx 日志
/var/log/apache2/ # Apache 日志
/var/log/mysql/ # MySQL 日志
/var/log/docker/ # Docker 日志
3.核心命令篇(重点)
3.1 tail - 实时查看最新日志
# 基础用法
tail -f /var/log/nginx/access.log # 持续跟踪日志
tail -n 100 /var/log/messages # 显示最后100行
tail -f -n 50 /var/log/app/error.log # 跟踪并显示最后50行
# 实战技巧
tail -f /var/log/nginx/access.log | grep "500" # 只看500错误
tail -f /var/log/app.log | grep -E "(ERROR|WARN)" # 过滤错误和警告
3.2 grep - 强大的文本搜索
# 基础搜索
grep "ERROR" /var/log/app.log # 搜索包含ERROR的行
grep -i "error" /var/log/app.log # 忽略大小写
grep -n "timeout" /var/log/app.log # 显示行号
# 高级用法
grep -E "(ERROR|WARN|CRITICAL)" /var/log/app.log # 多模式匹配
grep -v "INFO" /var/log/app.log # 排除INFO
grep -A 5 "Exception" /var/log/app.log # 显示匹配行及后5行
grep -B 3 "Exception" /var/log/app.log # 显示匹配行及前3行
grep -C 5 "Exception" /var/log/app.log # 显示匹配行前后各5行
# 组合技
grep "ERROR" /var/log/app.log | grep "2024-05-07" # 日期+错误
grep -r "Connection refused" /var/log/ # 递归搜索所有日志
3.3 less - 交互式查看大文件
less /var/log/messages # 打开日志文件
# 快捷键:
# 空格 - 下一页
# b - 上一页
# /keyword - 搜索关键词
# n - 下一个匹配
# N - 上一个匹配
# G - 跳到文件末尾
# g - 跳到文件开头
# q - 退出
# 实战技巧
less +F /var/log/app.log # 类似 tail -f 的实时模式
less -S /var/log/app.log # 禁用自动换行(适合看长日志行)
个人经历:根据上述的命令可以定位到90%的错误信息(再结合AI分析错误日志定位出具体问题)
3.4 awk + sed - 日志分析利器
# awk 实战
awk '/ERROR/ {print NR": "$0}' /var/log/app.log # 显示错误行号
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn # 统计IP访问次数
awk -F':' '{print $1}' /var/log/auth.log | grep "Failed" # 提取失败登录的用户名
# sed 实战
sed -n '/2024-05-07 10:00/,/2024-05-07 11:00/p' /var/log/app.log # 指定时间段日志
sed 's/ERROR/🚨 ERROR/g' /var/log/app.log # 高亮错误(仅显示)
4.实战案例篇
案例1:Nginx 502 Bad Gateway 排查
# 1. 查看Nginx错误日志
tail -f /var/log/nginx/error.log | grep "502"
# 2. 发现错误:upstream prematurely closed connection
# 3. 检查后端服务日志
journalctl -u backend-service -f
# 4. 发现后端服务OOM,查看系统日志 grep -i "oom" /var/log/messages
# 5. 解决方案:增加内存或优化代码
案例2:数据库连接超时
# 1. 应用日志显示数据库连接超时
grep "Connection timeout" /var/log/app.log
# 2. 检查MySQL日志
tail -f /var/log/mysql/error.log
# 3. 发现连接数达到上限
grep "max_connections" /var/log/mysql/error.log
# 4. 查看当前连接数
mysql -u root -p -e "show status like 'Threads_connected';"
# 5. 临时解决方案:增加连接数
# 永久解决方案:优化连接池配置
5.高级技巧篇
5.1 日志轮转配置
# 查看 logrotate 配置 c
at /etc/logrotate.d/nginx
# 手动触发日志轮转
logrotate -f /etc/logrotate.conf
5.2 多文件同时监控
# 使用 multitail(需要安装)
multitail /var/log/nginx/access.log /var/log/nginx/error.log
# 或使用 tail + grep 组合
tail -f /var/log/nginx/*.log | grep -E "(ERROR|500|404)"
5.3 日志分析脚本
#!/bin/bash
# error_monitor.sh - 实时监控错误日志
LOG_FILE="/var/log/app.log"
ERROR_KEYWORDS=("ERROR" "CRITICAL" "FATAL" "Exception")
while true; do
for keyword in "${ERROR_KEYWORDS[@]}"; do
tail -n 100 "$LOG_FILE" | grep "$keyword"
done
sleep 5
done
6.常见问题速查表
| 问题现象 | 排查命令 | 可能原因 |
| 服务无法启动 | journalctl -u service_name | 配置错误、端口占用 |
| 页面502错误 | tail -f /var/log/nginx/error.log | 后端服务挂了 |
| 数据库连接失败 | grep "Connection" /var/log/app.log | 连接数超限、密码错误 |
| 磁盘空间不足 | df -h + du -h /var/log/ |
日志未轮转、大文件堆积 |
| 内存溢出 | grep -i "oom" /var/log/messages | 内存泄漏、配置不足 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)