Linux Trigger日志监控的核心逻辑与实现方法
Linux Trigger(触发器)是一种事件驱动的监控机制,通过预定义的条件(如日志中的关键字、系统状态变化)触发相应操作(如发送警报、执行脚本)。其本质是将“事件检测”与“响应动作”绑定,实现日志监控的自动化。以下是具体的实现路径:
对于临时或简单的日志监控需求,可通过组合基础命令实现实时触发:
tail -f + grep:实时跟踪日志文件并筛选关键字。例如,监控/var/log/syslog中的“error”日志,触发终端输出:tail -f /var/log/syslog | grep --line-buffered "error"
可扩展为将输出重定向到脚本(如发送邮件),增强实用性。watch命令:定期执行日志检查(如每5秒扫描一次),适合无法使用tail -f的场景:watch -n 5 "grep 'error' /var/log/syslog"
通过-n参数调整检查频率,满足不同场景需求。对于生产环境,建议使用专业工具实现集中化日志监控与智能触发:
/var/log/syslog提取时间、级别、消息字段);log[])采集日志(如log[/var/log/secure,"(Accepted|Failed) password",,,skip]);{host:log[/var/log/secure,"Failed password"].str(Failed)}=1),当检测到“Failed password”时触发警报。若需监控系统调用或文件访问等底层事件(如用户执行rm命令),可使用auditd(Linux审计框架):
sudo apt install auditd audispd-plugins # Debian/Ubuntu
sudo yum install audit # RHEL/CentOS
添加审计规则(监控execve系统调用,触发时执行脚本):sudo auditctl -a always,exit -F arch=b64 -S execve -k user_actions
将触发事件与脚本绑定(如记录到/var/log/user_trigger.log):sudo auditctl -a always,exit -F arch=b64 -S execve -k user_actions -p x -F exe=/bin/rm -F success=1 -F auid>=1000 -F auid!=4294967295 -k user_rm_action
通过ausearch查询触发事件(如ausearch -k user_rm_action),确认触发是否生效。为防止日志文件过大导致触发器失效,需配置日志轮转(logrotate):
/etc/logrotate.conf(全局配置)或/etc/logrotate.d/syslog(针对syslog):/var/log/syslog {
daily # 每天轮转
rotate 7 # 保留7份
compress # 压缩旧日志
missingok # 文件不存在时不报错
notifempty # 日志为空时不轮转
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/usr/bin/killall -HUP rsyslogd # 重启rsyslog,重新打开日志文件
endscript
}
确保触发器指向轮转后的日志文件(如/var/log/syslog.1),避免遗漏事件。auditd、zabbix-agent)有权限读取目标日志文件;tail -f)可能增加系统负载,建议结合日志轮转和采样(如每10秒检查一次);