HOME> 世界杯谁是冠军> 收藏!!Linux日志排查这篇就够了
{$vo.文章标题}
{$vo.文章标题}

收藏!!Linux日志排查这篇就够了

admin
3677

大家都深日志排查在故障处理中的重要性。每当系统出现问题时,日志就像是我们的"黑匣子",记录着系统运行的每一个细节。今天就来和大家分享一下,如何在Linux环境下通过日志快速定位和解决问题。

一、Linux日志体系概览1.1 系统日志的分布在Linux系统中,日志文件主要集中在以下几个位置:

• /var/log/ - 系统主要日志目录• /var/log/messages - 系统综合日志• /var/log/secure - 安全相关日志• /var/log/cron - 定时任务日志• /var/log/maillog - 邮件系统日志• /var/log/boot.log - 系统启动日志1.2 应用程序日志除了系统日志,各种应用程序也会产生自己的日志:

• Apache/Nginx: /var/log/httpd/ 或 /var/log/nginx/• MySQL: /var/log/mysqld.log• Docker: /var/lib/docker/containers/• 自定义应用: 通常在应用安装目录下的logs文件夹二、日志排查的基本思路2.1 问题定位的三步走1. 确定问题发生的时间范围2. 选择合适的日志文件3. 使用工具快速筛选关键信息2.2 常见问题类型与对应日志• 系统性能问题 → /var/log/messages、dmesg• 登录认证问题 → /var/log/secure• 网络连接问题 → /var/log/messages、应用日志• 磁盘空间问题 → /var/log/messages• 服务启动问题 → systemctl status、journalctl三、实用的日志查看命令3.1 基础查看命令代码语言:javascript代码运行次数:0运行复制# 查看日志文件末尾内容

tail -f /var/log/messages

# 查看指定行数

tail -n 100 /var/log/secure

# 实时监控多个日志文件

multitail /var/log/messages /var/log/secure

# 查看日志文件头部

head -n 50 /var/log/boot.log3.2 时间范围筛选代码语言:javascript代码运行次数:0运行复制# 查看指定日期的日志

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/messages3.3 关键字搜索代码语言:javascript代码运行次数:0运行复制# 基本关键字搜索

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四、高级日志分析技巧4.1 使用journalctl(systemd系统)代码语言:javascript代码运行次数:0运行复制# 查看所有日志

journalctl

# 查看指定服务的日志

journalctl -u nginx.service

# 实时查看日志

journalctl -f

# 查看指定时间范围的日志

journalctl --since "2023-12-15 10:00:00" --until "2023-12-15 11:00:00"

# 查看指定优先级的日志

journalctl -p err4.2 日志统计分析代码语言:javascript代码运行次数:0运行复制# 统计错误出现次数

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 -nr4.3 日志切割和轮转代码语言:javascript代码运行次数:0运行复制# 查看logrotate配置

cat /etc/logrotate.conf

# 手动执行日志轮转

logrotate -f /etc/logrotate.conf

# 查看日志轮转状态

cat /var/lib/logrotate/logrotate.status4.4 使用dmesg分析dmesg命令用于显示内核环形缓冲区的消息,这些消息包含了系统启动时的硬件检测信息和运行时的内核消息。

代码语言:javascript代码运行次数:0运行复制# 查看所有内核消息

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:系统负载过高排查代码语言:javascript代码运行次数:0运行复制# 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"案例2:SSH登录失败排查代码语言:javascript代码运行次数:0运行复制# 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案例3:Web服务异常排查代码语言:javascript代码运行次数:0运行复制# 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.log案例4:内存OOM问题排查OOM是指系统内存不足时,内核会启动OOM Killer机制,强制杀死一些进程来释放内存。这是Linux系统的自我保护机制。

代码语言:javascript代码运行次数:0运行复制######################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"

六、日志监控和告警6.1 实时监控脚本代码语言:javascript代码运行次数:0运行复制#!/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

done6.2 使用rsyslog集中管理代码语言:javascript代码运行次数:0运行复制# 配置rsyslog客户端

echo "*.* @@log-server:514" >> /etc/rsyslog.conf

systemctl restart rsyslog七、日志安全和维护7.1 日志文件权限管理代码语言:javascript代码运行次数:0运行复制# 设置适当的日志文件权限

chmod 640 /var/log/secure

chown root:adm /var/log/secure7.2 日志备份策略代码语言:javascript代码运行次数:0运行复制# 定期备份重要日志

tar -czf /backup/logs-$(date +%Y%m%d).tar.gz /var/log/八、常用工具推荐8.1 命令行工具• less: 分页查看大文件• zcat/zless: 查看压缩日志文件• awk/sed: 文本处理和分析• multitail: 同时监控多个日志文件8.2 图形化工具• Logwatch: 日志分析和报告工具• ELK Stack: 企业级日志分析平台• Graylog: 开源日志管理平台九、性能优化建议9.1 避免频繁的全文搜索代码语言:javascript代码运行次数:0运行复制# 不推荐:在大文件中直接grep

grep "error" /var/log/huge-file.log

# 推荐:先按时间范围缩小搜索范围

sed -n '/Dec 15 10:/,/Dec 15 11:/p' /var/log/huge-file.log | grep "error"9.2 使用索引和缓存代码语言:javascript代码运行次数:0运行复制# 为经常查询的日志建立索引文件

grep -n "ERROR" /var/log/app.log > /tmp/error_index.txt十、故障排查检查清单在进行日志排查时,建议按照以下清单逐项检查:

1. ✅ 确认问题发生的准确时间2. ✅ 检查系统资源使用情况3. ✅ 查看相关服务的状态4. ✅ 分析错误日志的上下文5. ✅ 对比正常时期的日志6. ✅ 验证配置文件的正确性7. ✅ 检查网络连接状况8. ✅ 确认磁盘空间充足总结通过日志排查定位问题是每个运维人员必须掌握的核心技能。从基础的grep、tail命令到高级的journalctl、ELK分析,每一种方法都有其适用场景。关键在于:

1. 培养良好的日志阅读习惯:定期查看日志,熟悉正常状态下的日志模式2. 掌握高效的搜索技巧:合理使用正则表达式和时间范围筛选3. 建立完善的监控体系:主动发现问题,而不是被动等待故障发生4. 注重日志的安全和维护:确保日志的完整性和可用性记住,日志不会说谎,它忠实地记录着系统的每一个细节。当你学会了与日志"对话",你就掌握了解决大部分系统问题的钥匙。

在实际工作中,多实践、多总结,逐步建立起自己的问题排查方法论。每一次成功的故障处理,都是技能提升的宝贵经验。

如果这篇文章对你有帮助,欢迎点赞转发!想了解更多Linux运维实战技巧,记得关注@运维躬行录,我们一起在运维的道路上不断精进!