Я пытаюсь сконцентрировать журналы с нескольких устройств с нескольких клиентов на моем сервере RSYSLOG.
Мой сервер работает на Debian 11 с RSYSLOG v8.2102.
Конфигурация на данный момент довольно проста: я просто разрешил соединения UDP и TCP в /etc/rsyslog.conf и открыл порт 514 в UFW.
В /etc/rsyslog.d/ я добавляю для каждого оборудования правило. Например, чтобы соответствовать Fortinet, я добавляю это правило в /etc/rsyslog.d/10-Fortinet-SiteName-ClientName.conf:
if $msg contains 'devid="FGT_SerialNumber"' then /ClientsLogs/ClientName/SiteName/Fortinet.log
& stop
Он работает так, как ожидалось.
Я хотел бы отправить все оставшийся сетевой трафик в другом файле, который /var/log/syslog, чтобы помочь мне определить такие проблемы, как отсутствующая конфигурация оборудования и предотвратить рост /var/log/syslog (журналы брандмауэра довольно подробные!)
Я безуспешно пытался фильтровать с помощью $fromhost-ip:
if not $fromhost-ip == '127.0.0.1' then /ClientsLogs/Undefined.log
& stop
Я уверен, что это должно быть довольно просто, но я не могу заставить его работать!
Debian порт rsyslog ufw var
Круто34
2 ответа
Следуя вашему собственному ответу, вы не можете использовать '`hostname`'
как строку и ожидать, что она станет, скажем, 'abc'
куда abc
ваше локальное имя хоста. Вы можете использовать обратные кавычки только в двух формах: `echo $VARNAME`
для некоторой переменной среды или `cat filename`
для некоторого имени файла.
Вот почему ваш if
оператор соответствует всем входным данным.
Однако есть предопределенное системное свойство $myhostname
это должно содержать имя хоста, хотя я не уверен, является ли это полным доменным именем или нет. Вы должны использовать его с дополнительным $
префикс:
... and $fromhost != $$myhostname then ...
Мяу
Я нашел это решение, но оно прерывает нормальное ведение журнала в /var/log/syslog 🙁
Круто34