Есть ли способ отправлять логи в определенный каталог с помощью syslog-ng?

Есть ли способ отправлять логи в определенный каталог с помощью syslog-ng?

Я хотел бы отправлять логи каждого приложения на удаленный сборщик с помощью syslog-ng.

Если у меня есть Apache, я бы хотел, чтобы мои логи Apache отправлялись на мой удаленный сборщик в файле /var/log/apache.log.

Я не смог найти ничего об этом. Я знаю, что это возможно с rsyslog, но единственное, что я могу сделать здесь, это отправить все логи вместе с:

destination remote { network("<collector_adress>" transport("udp") port(514)); };

решение1

Чтобы собрать логи из файлов с помощью syslog-ng, вам нужно создать источники файлов и добавить их в оператор журнала. Что-то вроде этого:

source s_apache {
    file("/var/log/apache.log");
};
log {
    source(s_apache); destination(remote);
};

Чтобы собирать журналы также из других файлов, определите дополнительные источники и добавьте их в оператор журнала. Если у вас есть приложение, которое регистрируется в нескольких разных файлах журнала (например, в файлах журнала с метками времени), вы можете использовать источник wildcard-file. Проверьте документацию для получения подробной информации:https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.21/administration-guide/16#TOPIC-1180423

решение2

Я думаю, вы можете использовать тот же подход, что и вSyslog-ng — отправка имени файла от клиента на сервер.

Конфигурация на стороне клиента в syslog-ng -

file("/var/log/shell.log" log_prefix("shell: "));

Конфигурация на стороне сервера в syslog-ng -

filter f_shell { match("shell" value("MSGHDR")); };

destination d_shell { file("/var/log/syslog-ng/shell.log"); };

log { source(demo_tls_src); filter(f_shell); destination(d_shell); flags(final); };

Связанный контент