2017-01-12 22 views
0

фонLogrotate, Syslog-нг и потери журнала

  1. сервер Apache работает на машине и по производству бревен в /var/log/httpd/error_log
  2. Использование syslog-ng для отправки журнала в порт 5140
  3. В конце концов, это будет потребляемая kafka producer для отправки сообщения по электронной почте
  4. logrotate Вращается /var/log/httpd/error_log каждый час

Настройки

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 
    . 
    . 
    . 
} 

Потребление Войти

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

Эта программа Java является по существу kafka-producer и отправляет данные Кафка кластера

Проблема

Между logrotate инициирующих copytruncate и syslog-ng чтения данных из /var/log/httpd/error_log, некоторые данные передаются на этот файл но не фиксируется syslog-ng и, следовательно, не помещается в kafka-cluster

Есть ли разумный способ читать журналы непрерывно, не теряя при этом файл, который периодически поворачивается на logrotate?

ответ

0

Выполняет ли logrotate перезагрузку syslog-ng при вращении журнала? Без него syslog-ng узнает об усечении файла медленнее.