2021-12-29 22:59:23
Shell脚本实现日志关键字监控与自动告警的完整方案如下:该方案通过监控日志文件中的特定关键字,触发邮件告警机制,适用于Linux服务器环境,包含邮件服务安装、脚本开发及测试验证三个核心模块。
一、邮件服务安装与配置邮件服务是告警通知的基础,需完成以下步骤:
解压与编译安装
解压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配置邮件参数编辑配置文件/etc/nail.rc,在文件末尾添加以下内容(需替换为实际值):
set from=发件邮箱地址set smtp=smtp服务器地址:端口set smtp-auth-user=认证用户名set smtp-auth-password=认证密码set smtp-auth=login测试邮件功能执行以下命令发送测试邮件,验证配置是否成功:
echo '邮件正文' | mailx -v -s "邮件标题" 收件邮箱地址
脚本分为核心监控脚本CheckLogs.sh和邮件发送脚本SendMail.sh,配合配置文件实现灵活监控。
脚本架构设计
CheckLogs.sh:读取日志文件,检测关键字并触发告警。
SendMail.sh:封装邮件发送逻辑,支持自定义内容。
conf/chklist:配置文件,定义监控的日志路径、关键字列表及告警规则。
核心逻辑实现
初始化行号记录:首次运行时记录当前日志文件行号,后续仅检查新增内容。
# 示例:记录行号至文件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配置文件示例在conf/chklist中定义监控规则,格式如下:
# 日志路径 关键字列表 告警频率(秒)/var/log/app.log error,fail,critical 300通过模拟日志写入和关键字插入,验证脚本的监控与告警能力。
单关键字测试
手动向日志文件插入关键字error:
echo "2023-01-01 error: service unavailable" >> /var/log/app.log执行监控脚本,观察是否收到告警邮件。

多关键字测试
插入多个关键字(如fail和critical):
echo "2023-01-01 fail: connection lost" >> /var/log/app.logecho "2023-01-01 critical: disk full" >> /var/log/app.log验证脚本能否捕获所有关键字并触发告警。

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