2017-01-12 1 views
0

Hintergrundlogrotate, syslog-ng und verlieren log

  1. Apache-Server auf einem Computer ausgeführt wird und produziert Protokolle in /var/log/httpd/error_log
  2. syslog-ng Mit Protokoll zu einem Port 5140
  3. Schließlich senden wird es sein, verbraucht von kafka producer an ein Thema senden
  4. 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

geschoben

Gibt es eine vernünftige Möglichkeit, Protokolle kontinuierlich zu lesen, ohne von einer Datei zu verlieren, die periodisch um logrotate gedreht wird?

Antwort

0

Logrotate syslog-ng beim Rotieren des Protokolls neu laden? Ohne es erfährt syslog-ng über die Kürzung der Datei langsamer.

Verwandte Themen