Назад | Перейти на главную страницу

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 сделай это

если из pool2 сделайте это

Таким образом, я мог сделать журналы с Mac похожими на журналы Mac, журналы Linux выглядели как журналы Linux, журналы Cisco выглядели как журналы Cisco и т. Д. Я просто не смог найти ничего достаточно конкретного с помощью Googling.

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

if $fromhost-ip == [ "192.168.1.1", "192.168.1.2"... ] then {
  action(...do this...)
}

Хотя из документация контрольных структур кажется, должно быть больше похоже:

if $variable in [array]

Если у вас большой диапазон, вы сможете заполнить локальную переменную такой структурой foreach. Дополнительную информацию о сценариях можно найти, если поискать в документации по запросу "RainerScript".

Это работает для меня:

# 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 поддерживает.