Bash
Rsyslog - 解析 audit.log / omprog 更改日誌值
我正在嘗試使用 bash 腳本來使用 rsyslog 解析 audit.log,以便將 proctitle 的十六進制部分轉換為 ascii。但是我沒有得到結果:文件 audit_ascii.log 沒有帶有“proctitle”值的行。我測試了腳本,它工作正常,所以我猜問題來自我的 rsyslog.conf。
rsyslog.conf:
$InputFileName /var/log/audit/audit.log $InputFileTag tag_auditd: $InputFileStateFile log_audit $InputFileSeverity info $InputFileFacility local6 $InputRunFileMonitor if $msg contains "msg=audit" then { action(type="omprog" binary="/bin/bash /opt/bin/hex2ascii.sh" output="/var/log/audit/audit_ascii.log")
hex2ascii
#!/bin/bash read log hasHex=$(echo $log | egrep "msg=audit" | egrep "type=PROCTITLE" | egrep -v '"' | wc -c) if [ ${hasHex} -gt 0 ]; then part1=$(echo $log | cut -d"=" -f1-3) part2=$(echo $log | cut -d"=" -f4) part2=$(echo $part2 | xxd -r -p ) echo $part1 >> /var/log/audit/verif.txt #echo "${part1}=${part2}\n" >> /var/log/audit/audit_ascii.log log="${part1}=${part2}\n" #else #echo $log >> /var/log/audit/audit_ascii.log fi
在腳本將更改的日誌重定向到另一個文件後停止流程。然後我將新文件作為 rsyslog 中的另一個輸入。我找到的最佳解決方案
儘管 rsyslog 內置了幾個模組,但其中一些模組沒有並且需要在使用之前載入。
您正在使用的
imfile
模組需要以以下行開頭(在舊語法中):$ModLoad imfile
同樣,omprog模組,如果使用較新的語法,需要
module(load="omprog")
在它可以在
if
語句中使用之前(缺少關閉}
)。查看您將從中獲得的錯誤消息rsyslogd -N 1
。