集中式网络日志记录 - syslog和替代方案?

15

在工作中,我们正在构建一个分布式应用程序(可能跨越局域网上的多台机器,可能稍后跨越广域网+VPN上的多个洲际)。我们不希望每台机器都有日志文件(占满了它的磁盘并且无法聚合查看),因此需要通过网络集中记录日志。大多数日志并不重要,因此对于它们使用UDP就可以了,但是其中一些日志是与赚钱相关的重要警报,必须可靠地传递,这意味着要使用TCP。我们担心如果日志记录协议过于繁琐会拥塞网络,或者如果它不响应将拖慢应用程序。

我考虑过以下几种可能性:

  • syslog(似乎很完美,但是我的老板对此持有敌意,所以我可能无法选择它)。
  • 来自Facebook的scribe(但它似乎有点重量级,每个机器上都要安装一个服务器-不是每个日志消息都需要超高的可靠性)。
  • 使用像rabbitmq这样的消息队列,它可以具有多个调整为不同事务安全级别的队列。
  • 最坏的情况下,我可以自己从头开始编写。

你有其他建议吗?您使用过哪些集中式日志记录解决方案,它们的效果如何?

编辑:我倾向于使用scribe,因为其存储和转发设计将运行的应用程序与网络延迟分离开来。但是在努力安装它后,我发现(1)它不可用作二进制包-现在这是不可原谅的-而且(2)它依赖于一个库(thrift),该库也不可用作二进制包!最糟糕的是,它甚至无法正确编译。即使在开源中,那也不是发布质量的代码。

6个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
12
我们已经成功地在像您这样的分布式应用场景中使用了ZeroMQ来记录日志。它非常可靠且速度快得惊人。在我们尝试使用Spread实现不太成功后,我们转向了ZeroMQ。在我们的设置中,单个ZeroMQ服务器能够处理来自局域网和互联网的中等到高负载分布式应用程序的70多个不同的日志。 如果您需要详细的队列服务器比较,请查看Second Life wiki上的此页面。 希望对您有所帮助!

对于直接记录日志,我仍然推荐使用Syslog-NG,但显然社区不同意我的看法 :) 尽管如此,还是要为第二人生维基提供的出色链接点赞。非常有趣的阅读材料。 - JasonSmith

6
最近出现了几种可选方案。值得注意的是,Scribe不再维护。Facebook开发了它的后继者Caligraphus,但未开源。以下是一些替代方案列表:
  • syslog:已安装在所有Linux发行版中
  • Fluentd:基于C+Ruby的轻量级记录器,将日志处理为JSON流
  • Flume:由Cloudera开发,使用Java编写,并与Hadoop生态系统良好配合
  • Apache Kafka:由LinkedIn开发,采用拉取式架构
  • Scribe:由Facebook开源,但不再维护

免责声明:我是Fluentd项目的提交者。


5

其他例子可能很棒,但我在使用Syslog-NG时运气不错。它非常灵活和可配置;尽管很容易快速掌握并快速做出有用的事情。


5
如果你只想关注基础设施日志(例如系统级别),那么Syslog是一个不错的选择。我听说KIWI Syslog Server很不错,但我自己没有尝试过。另一方面,如果你想记录与应用程序相关的内容,那么Syslog可能不是最好的选择。如果你使用Apache日志服务(log4j、log4xxx等),那么logFaces是一个不错的解决方案,因为它专门用于在一个地方聚合多个应用程序。它可以使用TCP或UDP连接,并且具有良好的日志查看器和数据库集成。 声明:我是该产品的作者。

1
嗨,我想知道为什么syslog可能不是应用程序相关内容的最佳选择。我还在考虑日志解决方案,我的团队成员建议将所有内容都使用syslog。这样,我们就不需要在一个系统中使用太多单独的日志解决方案了。 - A-letubby
1
嗯,syslog很简单,这是好事。但是过于简单并不总是最好的选择。有许多日志框架可供选择,它们都存在一定的原因。例如,如果我使用syslog而不是lo4j,我的服务器端Java应用程序将会非常麻烦。但是如果你问我的老板,他管理着许多应用程序,当然会告诉你 - 使用一个系统。这取决于应用程序。这也取决于你问的人是谁。 - Dima
我明白了,谢谢!我以为这更多是关于扩展或性能问题。但似乎更多是关于每种日志类型的使用和易用界面。 - A-letubby

1

您也可以考虑使用SNMP警报。


1

我已经查看了这个帖子中推荐的所有备选方案。寻找一些使用Python编写的东西。在进行更多谷歌搜索后,发现了Sentry https://getsentry.com/welcome/。开源,文档齐全。应该对商业项目可靠,因为有一个基于此的业务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,