Rsyslog - 解析audit.log / omprog更改日志值

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")

十六进制2ascii

    #!/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

答案1

尽管 rsyslog 内置了多个模块,但其中一些模块不是内置的,需要先加载才能使用。

您正在使用的模块imfile前面需要添加以下行(采用旧语法):

$ModLoad imfile

同样,奥普罗格模块,如果使用较新的语法,需要

module(load="omprog")

在它可以在语句中使用之前if(缺少结束语})。查看您将从中获得的错误消息rsyslogd -N 1

答案2

只需在脚本将更改的日志重定向到另一个文件后停止流程即可。然后我将新文件作为 rsyslog 中的另一个输入。我找到的最佳解决方案

相关内容