rsyslog:你能检查两个局部变量是否相等吗?

rsyslog:你能检查两个局部变量是否相等吗?

编辑:更多背景。

我有以下示例:

set $.dev1IP = 192.168.1.1;
set $.dev2IP = 192.168.1.2;
set $.dev3IP = 192.168.1.3;

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

template(name="temp1" type="string" string="/path/to/logDir/%.sourceIP%/%.sourceIP%.%.sourceTag%.log")

ruleset(name="rules1") {
if ($.sourceIP == $.dev1IP) then {
    set $.sourceTag = "tag1";
    do something
} else if ($.sourceIP == $.dev2IP) then {
    set $.sourceTag = "tag2";
    do something
} else if ($.sourceIP == $.dev3IP) then {
    set $.sourceTag = "tag3";
    do something
} else {
    do something if nothing else matches
}
action(type="omfile" dynaFile="temp1")
}

这是一个更完整的代码块,用于展示我如何知道它不起作用。我有来自这些 IP 地址的日志,但生成的动态文件名为“192.168.1.1..log”,而它应该命名为“192.168.1.1.tag1.log”。

运行“rsyslogd -N1 -f /etc/rsyslog.conf”不会出现错误。

使比较有效的正确条件语句是什么?

答案1

我尝试了一个更简单的示例,在规则集外部设置一个局部变量,然后在规则集内部访问它,它的值为空。我认为这是一个功能,可以使规则集空间更加独立。

我不确定对此能做些什么,而且我没有任何合适的反例。$!varjson 风格的变量也是如此。中没有提到这一点规则集概念

您获得的广泛调试确认了规则集外部的rsyslog -dn变量集如何位于规则集内部,以评估规则集内部的设置位置:set $.var1 = "abc";(null)if($.var1 == $.mydir)...$.mydir

eval expr 0x556bdce30480, return datatype 'S':0
    IF
        var '.var1'
      ==
        var '.mydir'
eval expr 0x556bdce30560, type 'CMP_EQ'
eval expr 0x556bdce30390, type 'V'
rainerscript: (json/string) var 202: '(null)'
eval expr 0x556bdce30390, return datatype 'S':0
eval expr 0x556bdce1e2b0, type 'V'
rainerscript: (json/string) var 202: 'abc'
if condition result is 0

相关内容