我们有多个(20 多个)应用服务器,分布在多个数据中心。我们需要集中日志文件并从单个框中监控它们。
要求:
- 每个应用程序的日志文件很大,每天大约有 5-10 Gb - 因此每秒可能会有几千行。
- 延迟很重要——如果可能的话,我们需要能够在几秒钟内对日志事件做出反应。
- 性能占用空间应尽可能低,并且应随着日志文件大小可预测地扩展。
我想获得有关集中这些日志文件的最佳方法的意见?
我们想到的一个方法是使用 Logstash (http://logstash.net/) 和 Graylog2 (http://graylog2.org/),并通过网络将日志事件发送到监控盒,可以是直接TCP,也可以是通过RabbitMQ这样的总线。
第二种方法是拥有一个“共享”的 SAN 卷,所有应用程序服务器都会将其日志文件写入其中。
上述方法的优缺点是什么?有什么需要注意的事项吗?最佳实践是什么?
答案1
使用开源日志您可以使用该工具将来自 Linux 和 Windows 主机的日志文件集中起来。它可以通过 UDP、TCP、SSL 进行转发,具有强大的过滤功能、基于磁盘的缓冲以及丰富的其他功能。
答案2
只需设置一个集中式日志服务器syslog-ng
(或者rsyslogd
像最新趋势那样)并配置服务器应用程序/系统日志以记录到系统日志服务器即可。这种方法很干净,并且已在世界各地经过实地测试。
每个应用程序每天 5-10 GB 是可观的,但不会让您的 syslog-ng 过载。不,先生,这需要更多努力。我每天在工作中都会看到每秒几千行,而 syslog 服务器主要处于空闲状态。
我个人喜欢 syslog-ng,因为它非常即插即用。如果您添加指向 syslog 服务器的新服务器,syslog-ng 将自动为其日志文件创建必要的目录层次结构,无需系统管理员。
答案3
一年前我评估过 LogRhythm,那项服务确实非常棒。看看他们,他们能做的远不止简单地集中您的日志。警报、规范化、报告等。
答案4
看一下 rsyslog 的这个文档:
http://rsyslog.com/doc/rsyslog_reliable_forwarding.html
通过这样的设置,您可以将消息转发到远程 syslog(或 graylog2 服务器,因为它可以监听 syslog 消息),如果远程服务器关闭,它会在本地磁盘上排队。我在高负载下转发到 graylog2 时遇到了问题,如果 graylog2 或 elasticsearch(graylog2 使用它进行存储)无法跟上消息速率,它会将它们排队到内存中,一旦您填满所有可用内存,它就会挂起,直到您将其关闭(丢失所有消息)。