Я установил сервер 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
& ~