rsyslog — разные журналы для разных IP-адресов?

rsyslog — разные журналы для разных IP-адресов?

В нашей сети устройства разбросаны по всему миру. Я бы хотел сделать что-то вроде:

пул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

Если у вас достаточно свежая версияrsyslog(пакеты последней версии можно найти на их сайте) тогда вы сможете использовать массив для сравнения, как объясненоздесь. Что-то вроде:

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 можно использовать и другие переменные — более подробную информацию см. в документации, на которую ссылается Раду.

Раду прав: для этого вам понадобится свежий rsyslog.

Если вы застряли на RHEL6 или одной из его пересборок, есть пакет rsyslog7 из ОС, который вы можете использовать вместо стандартного (старого) rsyslog. Версия по умолчанию не поддерживает этот синтаксис, но v7 поддерживает.

Связанный контент