
Я хотел бы отправлять логи каждого приложения на удаленный сборщик с помощью 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); };