通过编写 Shell 脚本可实现 Linux 日志自动化巡检,1. 聚焦系统错误、认证失败、服务重启及内存磁盘告警等关键信息;2. 使用 grep 提取 /var/log/messages 和 secure 等文件中的异常记录;3. 将结果输出至临时文件并支持邮件通知与定时任务,提升运维效率。

在 Linux 系统运维中,日志巡检是发现问题、排查故障的重要手段。手动查看日志费时费力,通过编写自动化脚本可以高效完成日志巡检任务。下面介绍如何实现一个实用的 Linux 日志巡检脚本。
明确巡检目标
日志巡检不是盲目地读取所有内容,而是聚焦关键信息。常见巡检目标包括:
- 系统错误日志 :如 /var/log/messages、/var/log/syslog 中的 ERROR、CRITICAL 关键字
- 认证失败记录 :/var/log/secure 或 /var/log/auth.log 中的 Failed password、Invalid user
- 服务异常重启 :特定服务(如 nginx、mysql)日志中的启动或崩溃信息
- 磁盘或内存告警 :日志中出现 Out of memory、disk full 等提示
确定目标后,脚本可以有针对性地提取和分析这些信息。
编写基础巡检脚本
以下是一个简单的 Shell 脚本示例,实现基本的日志巡检功能:
!/bin/bash
日志巡检脚本
LOG_DIR=”/var/log”
OUTPUT=”/tmp/logcheck$(date +%Y%m%d).txt”
echo “ 开始日志巡检: $(date)” > $OUTPUT
echo “================================” >> $OUTPUT
检查系统日志中的错误
echo “【系统错误】” >> $OUTPUT
grep -i -E “error|fail|critical|warning” $LOG_DIR/messages 2>/dev/null | tail -20 >> $OUTPUT
检查登录认证失败
echo -e “n【登录失败】” >> $OUTPUT
grep -i “Failed password” $LOG_DIR/secure 2>/dev/null | awk ‘{print $1,$2,$3,$9,$11}’ | tail -20 >> $OUTPUT
检查是否有 oom-killer 记录
echo -e “n【内存溢出】” >> $OUTPUT
grep -i “out of memory” $LOG_DIR/messages 2>/dev/null >> $OUTPUT
输出完成提示
echo -e “n 巡检完成,结果保存至: $OUTPUT”
将上述内容保存为 log_check.sh,赋予执行权限:chmod +x log_check.sh,然后运行即可生成巡检报告。
增强脚本实用性
为了让脚本更贴近实际使用,可加入以下改进:
- 邮件通知 :通过 mail 命令将结果发送给管理员
mail -s " 日志巡检报告 " admin@company.com < $OUTPUT - 定时执行 :使用 crontab 每天自动运行
0 8 * * * /path/to/log_check.sh(每天上午 8 点执行) - 高亮关键词 :用 sed 或 echo 配合颜色输出,便于识别
- 支持多日志路径 :根据发行版判断日志位置(如 Ubuntu 用 syslog,CentOS 用 messages)
注意事项
编写和运行日志巡检脚本时需注意:
- 确保脚本以 root 或具备日志读取权限的用户运行
- 避免频繁扫描大文件,影响系统性能
- 敏感信息(如 IP、用户名)可在输出前脱敏处理
- 定期清理临时输出文件,防止占用空间
基本上就这些。一个简单有效的日志巡检脚本不需要复杂逻辑,关键是稳定、可读、可持续运行。结合系统 cron 和邮件提醒,就能实现基础的自动化巡检能力。不复杂但容易忽略。