Hintergrundlogrotate, syslog-ng und verlieren log
- Apache-Server auf einem Computer ausgeführt wird und produziert Protokolle in
/var/log/httpd/error_log
syslog-ng
Mit Protokoll zu einem Port5140
- Schließlich senden wird es sein, verbraucht von
kafka producer
an ein Thema senden logrotate
rotiert/var/log/httpd/error_log
jede Stunde
Einstellungen
syslog-ng.conf
options {
flush_lines (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off);
use_dns (no);
use_fqdn (no);
create_dirs (no);
keep_hostname (no);
};
source s_apache2 {
file("/var/log/httpd/error_log" flags(no-parse));
}
destination loghost {
tcp("*.*.*.*" port(5140) template("$MSG\n"));
}
logrotate.hourly.conf
/var/log/httpd/error_log {
copytruncate
rotate 4
dateext
missingok
ifempty
.
.
.
}
Log Verbrauch
nc -k -l 5140 | grep "STATS:" | java program
Das Java-Programm ist im Wesentlichen ein kafka-producer
und sendet Daten an kafka Cluster
Problem
Zwischen den logrotate
Initiieren copytruncate
und syslog-ng
Lesen von Daten aus /var/log/httpd/error_log
werden einige Daten in diese Datei gesendet wird aber nicht von syslog-ng
erfasst und daher nicht auf kafka-cluster
Gibt es eine vernünftige Möglichkeit, Protokolle kontinuierlich zu lesen, ohne von einer Datei zu verlieren, die periodisch um logrotate
gedreht wird?