
Ich möchte die Protokolle jeder Anwendung mit syslog-ng an einen Remote-Collector senden.
Wenn ich Apache habe, möchte ich, dass meine Apache-Protokolle in der Datei an meinen Remote-Collector gesendet werden /var/log/apache.log
.
Ich konnte dazu nichts finden. Ich weiß, dass es mit rsyslog möglich ist, aber das einzige, was ich hier tun kann, ist, alle Protokolle zusammen mit folgendem zu senden:
destination remote { network("<collector_adress>" transport("udp") port(514)); };
Antwort1
Um mit syslog-ng Protokolle aus Dateien zu sammeln, müssen Sie Dateiquellen erstellen und diese einer Protokollanweisung hinzufügen. Etwa so:
source s_apache {
file("/var/log/apache.log");
};
log {
source(s_apache); destination(remote);
};
Um auch Protokolle aus anderen Dateien zu sammeln, definieren Sie zusätzliche Quellen und fügen Sie sie der Protokollanweisung hinzu. Wenn Sie eine Anwendung haben, die sich in mehrere verschiedene Protokolldateien einloggt (z. B. in zeitgestempelte Protokolldateien), können Sie die Wildcard-Dateiquelle verwenden. Weitere Informationen finden Sie in der Dokumentation:https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.21/administration-guide/16#TOPIC-1180423
Antwort2
Ich denke, Sie können den gleichen Ansatz verwenden wie inSyslog-ng - Dateinamen vom Client an den Server senden.
Clientseitige Konfiguration in syslog-ng -
file("/var/log/shell.log" log_prefix("shell: "));
Serverseitige Konfiguration in 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); };