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

Как использовать rsyslog для регистрации файлов от клиента к серверу

Я установил сервер rsyslog, который принимает информацию журнала от клиентов.

Однако я могу успешно получать сообщения системного журнала Я тоже заинтересован в регистрации ряда файлов.

Вот как выглядит мой клиент:

$ModLoad imfile

$InputFileName /var/log/drew-error.log
$InputFileTag drew:
$InputFileStateFile stat-drew-error
$InputFileSeverity error
$InputRunFileMonitor

$InputFilePollInterval 1

Я не совсем уверен, что добавить в конфигурацию моего сервера. В идеале я бы хотел, чтобы сервер выводил что-то вроде этого:

/var/log/remote/$HOSTNAME/drew-error.log

Правильно ли я поступаю? Разумно ли пытаться достичь этого?

Лучший сценарий: Я хотел бы иметь возможность обновлять файлы, которые я просматриваю на клиенте, без необходимости перенастраивать сервер. Если это невозможно или слишком сложно, я, вероятно, смогу обойти жестко запрограммированное решение.

Что я пробовал

Пока что я пробовал несколько конфигураций для сервера (хотя я считаю, что это неправильное решение / подход):

$template syslog, "/var/log/remote/%hostname%/%programname%/%$year%%$month%%$day%/syslog"
*.*;auth,authpriv.none          ?syslog

и

$template DrewTemplate,"/var/log/remote-DREWAPP-%HOSTNAME%.log"
if $programname == 'drew:' then -?DrewTemplate
& ~

$template PerHostLog,"/var/log/remote-%HOSTNAME%.log"
if $fromhost-ip startswith '1.2.' then -?PerHostLog
& ~

Одно из решений - проверить $ programname (которое заполняется значением из $ InputFileTag на клиенте для каждого файла, который вы отслеживаете).

Конфигурация клиента

На клиенте создайте монитор (ы) файлов и убедитесь, что $ InputFileTag начинается с 'file-'. Вот пример файлов журнала foo и bar:

######################### START /var/log/foo.log
$InputFileName /var/log/foo.log
$InputFileTag file-foo:
$InputFileStateFile stat-foo
$InputFileSeverity info
$InputRunFileMonitor
######################### END /var/log/foo.log

######################### START /var/log/bar.log
$InputFileName /var/log/bar.log
$InputFileTag file-bar:
$InputFileStateFile stat-bar
$InputFileSeverity info
$InputRunFileMonitor
######################### END /var/log/bar.log

Конфигурация сервера

Затем на сервере проверьте, что $ programname начинается с 'file-' (как и должно быть для всех ваших файловых мониторов, но не для стандартных сообщений системного журнала). Вот пример:

$template FileTemplate,"/var/log/remote-%HOSTNAME%-%programname%.log"
if $programname startswith 'file-' then -?FileTemplate
& ~
  • Это решение проверяет, начинается ли $ programname с 'file-'
  • Пока у вас есть контроль над маркировкой $ InputFileTag (на клиенте), это решение работает достаточно хорошо.
  • В шаблоне используются имя программы и имя хоста, чтобы имена файлов на сервере были уникальными.
  • & ~ Гарантирует, что это сообщение системного журнала не будет обработано дальше в конфигурации.
  • Это решение предоставляет ОДНУ конфигурацию на сервере, которую не нужно обновлять каждый раз, когда вы добавляете новый файловый монитор на клиенте.