目录

1.引言(痛点引入)

2.基础篇:日志文件位置速查

3.核心命令篇(重点)

3.1 tail - 实时查看最新日志

3.2 grep - 强大的文本搜索

3.3 less - 交互式查看大文件

3.4 awk + sed - 日志分析利器

4.实战案例篇

案例1:Nginx 502 Bad Gateway 排查

案例2:数据库连接超时

5.高级技巧篇

5.1 日志轮转配置

5.2 多文件同时监控

5.3 日志分析脚本

6.常见问题速查表


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 内存泄漏、配置不足
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐