我正在设置一个syslog-ng服务器来接受来自各种来源的日志。 一般设置将是:
Device1 Device2 Syslog1 Device3 --> Load balancer --> Syslog2 --> Shared SAN storage Device4 Syslog3 Device5
我正在使用514 / udp,并且使用这个设置,我应该很容易拥有HA,并且能够循环播放负载。 我关心的是存储如何在后端被共享和写入。 理想情况下,我希望每个设备都有一个deviceX.log文件。 如果syslog1从device1中获取一个较大的日志文件,并且在syslog2从device1中获取一个小的日志文件并开始尝试同时写入同一个文件时仍在写入device1.log,会发生什么情况?
我已经读过,如果你追加这个文件,而不是在“写”模式下打开它,那么你永远不会得到写保护的错误。 我不知道syslog如何做到这一点。
所以我的问题是:
任何build议将不胜感激。 提前致谢。
不知道您用于负载均衡器的是什么,但是我build议您在负载均衡器上configuration某种“粘性”,以使Device1日志始终定向到Syslog1等。
这将解决您对日志文件的担忧,但也可以防止我认为是一样的问题。
我关心你的例子是,如果有很多从Device1传递到Syslog1的日志条目,然后从Device1传递到Syslog2的较小的数字是Syslog2可能能够将后来的系统日志消息乱序插入到您的日志文件。
我发现任何types的群集文件系统(如GlusterFS)都可以正常工作,以便多个服务器写入一个文件。 但是由于我有SAN基础设施,这是不可能的。 因此,我最终每个syslog集群写了一个文件。
Syslog1 --> 2012-07-29-sys01.log Syslog2 --> 2012-07-29-sys02.log
然后,我使用logmerge脚本和一个cronjob来合并文件并按正确的时间对它们进行sorting。 下面的cron作业在文件写完之后运行。
/ local / bin / logmerge -f / logs /
date -d yesterday +\%Y-\%m-\%d-sys * .log | gzip -9 -c> / logs /date -d yesterday +\%Y-\%m-\%d.log.gz && rm -f / logs /date -d yesterday +\%Y-\%m-\%d-sys * .log