編集:より多くの背景。
次の例があります。
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.tag1.log」でなければなりませんが、「192.168.1.1..log」です。
「rsyslogd -N1 -f /etc/rsyslog.conf」を実行してもエラーは発生しません。
比較を有効にする正しい条件文は何ですか?
答え1
ルールセットの外部でローカル変数を設定し、ルールセット内でアクセスする簡単な例を試しましたが、値が空でした。これはルールセット空間をもう少し独立させるための機能だと思います。
これについて何ができるかわからないし、適切な反例もない。$!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