
大家都深日志排查在故障处理中的重要性。每当系统出现问题时,日志就像是我们的"黑匣子",记录着系统运行的每一个细节。今天就来和大家分享一下,如何在Linux环境下通过日志快速定位和解决问题。
在Linux系统中,日志文件主要集中在以下几个位置:
/var/log/ - 系统主要日志目录/var/log/messages - 系统综合日志/var/log/secure - 安全相关日志/var/log/cron - 定时任务日志/var/log/maillog - 邮件系统日志/var/log/boot.log - 系统启动日志除了系统日志,各种应用程序也会产生自己的日志:
/var/log/httpd/ 或 /var/log/nginx//var/log/mysqld.log/var/lib/docker/containers//var/log/messages、dmesg/var/log/secure/var/log/messages、应用日志/var/log/messagessystemctl status、journalctl# 查看日志文件末尾内容
tail -f /var/log/messages
# 查看指定行数
tail -n 100 /var/log/secure
# 实时监控多个日志文件
multitail /var/log/messages /var/log/secure
# 查看日志文件头部
head -n 50 /var/log/boot.log# 查看指定日期的日志
grep "Dec 15" /var/log/messages
# 查看指定时间段的日志
sed -n '/Dec 15 10:00/,/Dec 15 11:00/p' /var/log/messages
# 使用awk按时间筛选
awk '/Dec 15 10:/ && /Dec 15 11:/' /var/log/messages# 基本关键字搜索
grep "error" /var/log/messages
# 忽略大小写搜索
grep -i "failed" /var/log/secure
# 搜索多个关键字
grep -E "error|failed|timeout" /var/log/messages
# 显示匹配行的前后几行
grep -A 5 -B 5 "Out of memory" /var/log/messages# 查看所有日志
journalctl
# 查看指定服务的日志
journalctl -u nginx.service
# 实时查看日志
journalctl -f
# 查看指定时间范围的日志
journalctl --since "2023-12-15 10:00:00" --until "2023-12-15 11:00:00"
# 查看指定优先级的日志
journalctl -p err# 统计错误出现次数
grep -c "error" /var/log/messages
# 统计不同类型错误的数量
grep "error" /var/log/messages | awk '{print $5}' | sort | uniq -c
# 分析访问日志中的IP访问频率
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr# 查看logrotate配置
cat /etc/logrotate.conf
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
# 查看日志轮转状态
cat /var/lib/logrotate/logrotate.statusdmesg命令用于显示内核环形缓冲区的消息,这些消息包含了系统启动时的硬件检测信息和运行时的内核消息。
# 查看所有内核消息
dmesg
# 实时查看内核消息
dmesg -w
# 按时间戳显示
dmesg -T
# 只显示错误和警告
dmesg -l err,warn
# 清空dmesg缓冲区(需要root权限)
dmesg -c
# 按级别过滤
dmesg -l emerg # 紧急情况
dmesg -l alert # 需要立即处理
dmesg -l crit # 严重错误
dmesg -l err # 一般错误
dmesg -l warn # 警告信息
dmesg -l notice # 注意信息
dmesg -l info # 一般信息
dmesg -l debug # 调试信息
###################dmesg实用技巧##########
# 查看最近的内核消息
dmesg | tail -20
# 搜索特定硬件信息
dmesg | grep -i "usb\|disk\|network"
# 查看内存相关信息
dmesg | grep -i "memory\|oom"
# 查看CPU相关信息
dmesg | grep -i "cpu"
# 将dmesg输出保存到文件
dmesg > /tmp/dmesg_$(date +%Y%m%d_%H%M%S).log
# 1. 查看系统负载相关日志
grep -i "load" /var/log/messages
# 2. 查看内存不足相关信息
grep -i "out of memory" /var/log/messages
# 3. 查看磁盘IO相关问题
grep -i "blocked" /var/log/messages
# 4. 结合dmesg查看内核消息
dmesg | grep -i "killed process"# 1. 查看SSH登录失败记录
grep "Failed password" /var/log/secure
# 2. 统计失败登录的IP地址
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
# 3. 查看成功登录记录
grep "Accepted password" /var/log/secure
# 4. 查看SSH服务状态
systemctl status sshd
journalctl -u sshd# 1. 查看Nginx错误日志
tail -f /var/log/nginx/error.log
# 2. 分析访问日志中的异常状态码
awk '$9 >= 400 {print $0}' /var/log/nginx/access.log
# 3. 统计各种HTTP状态码的数量
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c
# 4. 查看PHP-FPM日志(如果使用PHP)
tail -f /var/log/php-fpm/www-error.logOOM是指系统内存不足时,内核会启动OOM Killer机制,强制杀死一些进程来释放内存。这是Linux系统的自我保护机制。
######################OOM日志特征识别##############
# 在dmesg中查找OOM相关信息
dmesg | grep -i "out of memory\|oom\|killed process"
# 在系统日志中查找OOM信息
grep -i "out of memory\|oom-killer\|killed process" /var/log/messages
# 使用journalctl查找OOM(RHEL 7+)
journalctl | grep -i "oom\|out of memory"
#!/bin/bash
# 监控关键错误日志
tail -f /var/log/messages | while read line
do
if echo "$line" | grep -q "CRITICAL\|FATAL\|Out of memory"; then
echo "$(date): 发现严重错误 - $line" | mail -s "系统告警" admin@company.com
fi
done# 配置rsyslog客户端
echo "*.* @@log-server:514" >> /etc/rsyslog.conf
systemctl restart rsyslog# 设置适当的日志文件权限
chmod 640 /var/log/secure
chown root:adm /var/log/secure# 定期备份重要日志
tar -czf /backup/logs-$(date +%Y%m%d).tar.gz /var/log/# 不推荐:在大文件中直接grep
grep "error" /var/log/huge-file.log
# 推荐:先按时间范围缩小搜索范围
sed -n '/Dec 15 10:/,/Dec 15 11:/p' /var/log/huge-file.log | grep "error"# 为经常查询的日志建立索引文件
grep -n "ERROR" /var/log/app.log > /tmp/error_index.txt在进行日志排查时,建议按照以下清单逐项检查:
通过日志排查定位问题是每个运维人员必须掌握的核心技能。从基础的grep、tail命令到高级的journalctl、ELK分析,每一种方法都有其适用场景。关键在于:
记住,日志不会说谎,它忠实地记录着系统的每一个细节。当你学会了与日志"对话",你就掌握了解决大部分系统问题的钥匙。
在实际工作中,多实践、多总结,逐步建立起自己的问题排查方法论。每一次成功的故障处理,都是技能提升的宝贵经验。
如果这篇文章对你有帮助,欢迎点赞转发!想了解更多Linux运维实战技巧,记得关注@运维躬行录,我们一起在运维的道路上不断精进!