2017-01-12 64 views
0

背景logrotate的,syslog-ng的和失去的日誌

  1. Apache服務器一臺機器,生產日誌上運行到/var/log/httpd/error_log
  2. 使用syslog-ng發送日誌到端口5140
  3. 最終這將是消耗kafka producer待發送至主題
  4. logrotate每小時輪換/var/log/httpd/error_log

設置

系統日誌-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 
    . 
    . 
    . 
} 

登錄消費

nc -k -l 5140 | grep "STATS:" | java program 

這java程序本質上是一個kafka-producer並將數據發送到卡夫卡簇

問題

/var/log/httpd/error_loglogrotate發起copytruncatesyslog-ng讀取數據期間,一些數據被髮送到該文件但不被syslog-ng捕獲,因此不被推到kafka-cluster

是否有任何理智的方式來連續讀取日誌,而不會丟失定期輪換logrotate的文件?

回答

0

logrotate是否會在輪轉日誌時重新加載syslog-ng?沒有它,syslog-ng會慢慢學習文件的截斷。