Rhel
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”不會導致錯誤。
使該比較起作用的正確條件語句是什麼?
我嘗試了一個更簡單的例子,在規則集之外設置一個局部變數,然後在規則集中訪問它,它的值為空。我認為這是一個功能,使規則集空間更加獨立。
我不確定對此能做些什麼,也沒有任何合適的反例。
$!var
json 樣式的變數也是如此。規則集概念中沒有提到這一點。您獲得的廣泛調試確認了規則集之外的
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