我目前有以下输入配置:
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>
$.sourceIP
audit
audit.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")