Shell脚本实战:日志关键字监控+自动告警

Shell脚本实战:日志关键字监控+自动告警
最新回答
妖孽只在夜里哭

2021-12-29 22:59:23

Shell脚本实现日志关键字监控与自动告警的完整方案如下:该方案通过监控日志文件中的特定关键字,触发邮件告警机制,适用于Linux服务器环境,包含邮件服务安装、脚本开发及测试验证三个核心模块。

一、邮件服务安装与配置

邮件服务是告警通知的基础,需完成以下步骤:

  1. 解压与编译安装

    解压mailx源码包至指定目录:

    tar -jxf mailx-12.4.tar.bz2 -C /usr/src/ && cd /usr/src/mailx-12.4/

    执行编译命令(需处理OpenSSL兼容性问题):

    make install UCBINSTALL=/usr/bin/install

    异常处理:若编译报错,需下载补丁文件mailx-12.4-openssl_1.0.0_build_fix-1.patch,执行打补丁操作后重新编译:

    patch -p0 < mailx-12.4-openssl_1.0.0_build_fix-1.patchmake install UCBINSTALL=/usr/bin/install
  2. 配置邮件参数编辑配置文件/etc/nail.rc,在文件末尾添加以下内容(需替换为实际值):

    set from=发件邮箱地址set smtp=smtp服务器地址:端口set smtp-auth-user=认证用户名set smtp-auth-password=认证密码set smtp-auth=login
  3. 测试邮件功能执行以下命令发送测试邮件,验证配置是否成功:

    echo '邮件正文' | mailx -v -s "邮件标题" 收件邮箱地址

二、日志关键字监控脚本开发

脚本分为核心监控脚本CheckLogs.sh和邮件发送脚本SendMail.sh,配合配置文件实现灵活监控。

  1. 脚本架构设计

    CheckLogs.sh:读取日志文件,检测关键字并触发告警。

    SendMail.sh:封装邮件发送逻辑,支持自定义内容。

    conf/chklist:配置文件,定义监控的日志路径、关键字列表及告警规则。

  2. 核心逻辑实现

    初始化行号记录:首次运行时记录当前日志文件行号,后续仅检查新增内容。

    # 示例:记录行号至文件last_line=$(cat last_line.txt 2>/dev/null || echo 0)current_line=$(wc -l < /var/log/app.log)echo $current_line > last_line.txt

    关键字匹配与告警:提取新增行内容,匹配配置中的关键字,触发邮件发送。

    # 示例:提取新增行并匹配关键字sed -n "${last_line},${current_line}p" /var/log/app.log | while read line; do if echo "$line" | grep -qE "error|fail|critical"; then echo "$line" | mailx -s "日志告警" admin@example.com fidone
  3. 配置文件示例在conf/chklist中定义监控规则,格式如下:

    # 日志路径 关键字列表 告警频率(秒)/var/log/app.log error,fail,critical 300
三、功能测试与验证

通过模拟日志写入和关键字插入,验证脚本的监控与告警能力。

  1. 单关键字测试

    手动向日志文件插入关键字error:

    echo "2023-01-01 error: service unavailable" >> /var/log/app.log

    执行监控脚本,观察是否收到告警邮件。

  2. 多关键字测试

    插入多个关键字(如fail和critical):

    echo "2023-01-01 fail: connection lost" >> /var/log/app.logecho "2023-01-01 critical: disk full" >> /var/log/app.log

    验证脚本能否捕获所有关键字并触发告警。

  3. 频率控制测试

    在配置文件中设置告警频率为300秒,连续插入关键字观察邮件发送间隔。

四、部署与运维建议
  1. 脚本自动化:通过crontab设置定时任务,例如每分钟执行一次监控:* * * * * /path/to/CheckLogs.sh
  2. 日志轮转处理:确保脚本兼容logrotate等日志轮转工具,避免因日志切割导致监控失效。
  3. 性能优化:对于高频日志,可采用tail -F实时跟踪文件变化,减少行号计算开销。

总结:本方案通过Shell脚本实现了日志关键字监控与邮件告警的全流程,覆盖了邮件服务配置、脚本开发、测试验证及部署优化等关键环节。实际使用时需根据业务需求调整关键字列表和告警频率,确保监控的准确性与及时性。