背景
/var/log/httpd/error_log日志的Apache服务器syslog-ng将日志发送到端口5140kafka producer使用以发送到一个主题。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,并将数据发送到kafka集群。
问题
在logrotate启动copytruncate和从/var/log/httpd/error_log读取数据的syslog-ng之间,一些数据被发送到该文件,但没有被syslog-ng捕获,因此没有被推送到kafka-cluster。
是否有任何正确的方法来连续地读取日志,而不丢失由logrotate定期旋转的文件?
发布于 2017-02-02 12:48:21
日志旋转时是否重新加载syslog-ng?没有它,syslog-ng就会更慢地了解文件的截断。
https://stackoverflow.com/questions/41622258
复制相似问题