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秒檢查一次);