私たちのネットワークにはデバイスがあちこちに散在しています。次のようなことをしたいです:
プール1 { 192.168.1.1-192.168.1.20, 192.168.1.50 } プール2 { 192.168.1.21-192.168.1.40, 192.168.1.66 }
プール1からの場合はこれを実行します
プール2からそれを実行する場合
そうすれば、Mac のログを Mac のログのように、Linux のログを Linux のログのように、Cisco のログを Cisco のログのように見せることができます。ただ、Google で検索しても十分に具体的なものを見つけることができませんでした。
答え1
比較的新しいバージョンのログ(最新バージョンのパッケージはウェブサイトで見つかります)その後、説明したように、比較に配列を使用できるはずです。ここ。 何かのようなもの:
if $fromhost-ip == [ "192.168.1.1", "192.168.1.2"... ] then {
action(...do this...)
}
しかし、制御構造のドキュメント次のようにすべきだと思われます:
if $variable in [array]
範囲が広い場合は、そのような foreach 構造を使用してローカル変数に値を設定できるはずです。ドキュメントで「RainerScript」を検索すると、スクリプトに関する詳細情報を見つけることができます。
答え2
これは私にとってはうまくいきます:
# accept logging for remote hosts on a per-ip-address basis
$template DirectoryPerHost,"/var/log/REMOTEHOSTS/%fromhost-ip%/%syslogfacility-text%.log"
if ( ( $fromhost-ip != "127.0.0.1" ) and ( $fromhost-ip != "::1" ) ) then {
?DirectoryPerHost
} else {
whatever you want to do with local log files here
}
fromhost-ip の代わりに使用できる変数は他にもあります。詳細については、Radu がリンクしているドキュメントを参照してください。
これを実現するには最新の rsyslog が必要であると Radu は正しく述べています。
RHEL6 またはそのリビルドのいずれかを使用している場合は、デフォルトの (古い) rsyslog の代わりに使用できる OS の rsyslog7 パッケージがあります。デフォルトのバージョンではこの構文はサポートされていませんが、v7 ではサポートされています。