Недавно я настроил центральный сервер syslog. Журналы организованы в файлы, в папки, названные по именам клиентских машин (с использованием DNS), и сканируются с помощью logcheck.
На некоторых клиентских машинах установлено более одной ОС (а именно Linux и Windows), и в итоге получается один и тот же IP-адрес и имя хоста. В результате журналы Windows (сообщения) и журналы Linux оказались в одном файле, что меня и logcheck очень расстроило. Мне интересно хранить журналы для разных ОС отдельно.
Мое решение состояло в том, чтобы заставить syslog прослушивать несколько портов и настроить syslog/rsyslog на клиентских машинах Linux и Windows на использование другого номера порта. Таким образом, я могу легко перенаправлять журналы в соответствующие файлы в соответствии с их источником.
Однако я не совсем уверен в элегантности решения — nmap может определить клиентскую ОС по отпечатку стека TCP/IP.
Есть ли способ настроить Syslog-ng для перенаправления входящих данных в соответствии с ОС клиентской машины?
решение1
Ваш подход с разными портами для машин Linux и Windows совсем не плох.
Альтернативы:
- использование программы в качестве пункта назначения в syslog-ng (например, вашего пользовательского скрипта, который проверяет текущую ОС клиентской машины и записывает данные в linux.log или windows.log) — медленно и ненадежно.
- использование match(...) в фильтре syslog-ng для различения строк syslog Linux и Windows (не уверен, что это будет просто и надежно, если только вы не сможете поместить некоторую подстроку маркера в syslog клиента) и использование такого фильтра для выбора целевого файла журнала.
Оба варианта вряд ли можно рекомендовать.
Еще один трюк может заключаться в использовании транспорта tcp для syslog с клиентов linux и udp - с windows. Затем вы можете настроить назначения файлов с фильтром по протоколу.