rsyslog:如何从元数据中提取值并将其存储在变量中?

rsyslog:如何从元数据中提取值并将其存储在变量中?

我目前有以下输入配置:

input(type="imfile"
      File="/scp_tmp/<source_ip_address>/*.log"
      addMetadata="on")

还有两个全局变量:

set $.sourceIP = $fromhost-ip;
set $.sourceTag = $syslogtag

我如何能够提取其中的值(作为示例$!metadata!filename应该等于)以仅分配给日志文件的名称以及从日志文件的名称分配给?/scp_tmp/127.0.0.1/audit.log<source_ip_address>$.sourceIPauditaudit.log$.sourceTag

答案1

rsyslog 的脚本语言雷纳脚本有多种用途功能。在这种情况下最简单的应用可能是场地,它将字符串拆分为由某个字符(由其十进制 ascii 代码给出)或字符串分隔的字段。您可以选择所需的结果分割字段,从 1 开始。例如:

field("/a/b/c", 47, 2)

将结果“a”作为第二个字段,因为第一个字段是第一个“/”之前的空白。所以你可以使用

set $.sourceIP = field($!metadata!filename, 47, 3);

不要忘记“;”这是强制性的。您可以使用相同的函数提取第四个字段,然后在“.”上再次拆分。占据第一个字段的字符。

对于更复杂的提取,有重新提取您可以在其中使用 POSIX ERE 正则表达式来匹配字符串的某些部分,也许类似于

re_extract("/a/b/c.d.log", "([^/]*).log$",0,1,"failed")

相关内容