我正在设置一个 syslog-ng 服务器来接受来自各种来源的日志。一般设置将是:
Device1
Device2 Syslog1
Device3 --> Load balancer --> Syslog2 --> Shared SAN storage
Device4 Syslog3
Device5
我使用的是 514/udp,通过此设置,我应该可以轻松获得 HA 并能够循环并分散负载。我关心的是如何在后端共享和写入存储。理想情况下,我希望每台设备当天都有一个 deviceX.log 文件。如果 syslog1 从 device1 获取一个大日志文件并且仍在写入 device1.log 而当 syslog2 从 device1 获取一个小日志文件并同时开始尝试写入同一个文件时会发生什么情况?
我在 Linux 中读到,如果您附加文件并且不以“写入”模式打开它,那么您将永远不会收到写保护错误。我不确定 syslog 是如何做到这一点的。
所以我的问题是:
- 您会推荐哪种共享文件系统供 SAN 在系统日志框之间共享?
- 有没有更好的方法将多个系统日志服务器做成一个文件?如果系统日志只是附加,那么我应该没问题。
任何建议将不胜感激。提前致谢。
不确定您使用的负载均衡器是什么,但我建议您在负载均衡器上配置某种“粘性”,以便 Device1 日志始终定向到 Syslog1 等。
这将解决您对日志文件的担忧,但它也可以防止我认为是同样糟糕的问题。
我对您的示例的担心是,如果有很多日志条目从 Device1 传递到 Syslog1,然后从 Device1 传递到 Syslog2 的日志条目数量较少,那么 Syslog2 可能会无序地将后面的系统日志消息插入到您的日志文件中。
我发现任何类型的集群文件系统(例如 GlusterFS)都可以很好地用于多个服务器写入一个文件。但是,由于我拥有的 SAN 基础架构,这是不可能的。因此,我最终每天为每个 syslog 集群写一个文件。
然后我使用 logmerge 脚本和 cronjob 来组合文件并按正确的时间对它们进行排序。下面的 cron 作业在文件写入完成后的第二天运行。