与其他日志记录工具相比,使用 syslog 都有哪些优势?
Posted
技术标签:
【中文标题】与其他日志记录工具相比,使用 syslog 都有哪些优势?【英文标题】:What are the advantages of using syslog over other logging facilites?与其他日志记录工具相比,使用 syslog 有哪些优势? 【发布时间】:2011-10-13 07:07:58 【问题描述】:我们正在使用基于 BaseHTTPServer 的基本 python 日志服务器来在 ubunutu 服务器上聚合我们的 python 日志。这个解决方案已经满足了我们的需求......直到现在。转储到此日志服务器的程序数量已经增加,现在记录器正在破坏系统。
现在我们回到了绘图板上,我们正在考虑使用 syslog。
使用 syslog 是否优于其他日志记录工具。
感谢您的帮助
【问题讨论】:
【参考方案1】:使用 syslog 可能既简单又快速,但它无法让您完全控制日志的聚合方式。
您现在的主要问题是使用 BaseHTTPServer,它从未打算用于生产服务器或任何需要高性能的东西。
我看到两个选项:
-
使用更好的支持 wsgi 的 http 服务器,以及 mini web 框架(我们使用 gevent+bottle,但http://nichol.as/benchmark-of-python-web-servers 是一个很好的解决方案比较)
使用消息队列。这将意味着对您的代码进行更多更改,但它是针对您的问题的专用解决方案(并且更有效)。 (我们使用的是 rabbitmq,但请查看 google 或 http://www.darkcoding.net/software/choosing-a-message-queue-for-python-on-ubuntu-on-a-vps 进行比较)
编辑: 支持消息队列的专用解决方案是logbook。也可以直接替代标准库的日志模块。
【讨论】:
优秀的链接,我已经慢慢开始研究这两个主题。我理解您所说的关于 syslog 受到限制的说法......但是没有其他风格的 syslog 可以提供更好的控制吗?我们将使用的记录器位于分布式环境中,因此必须控制聚合和消息分发。我已经考虑过消息服务,但我真的在寻找一些更完整的日志记录服务。你有抄写员的经验吗? 我知道 BaseHTTPServer 的局限性,但我认为我永远不会看到这些限制。哈! 这取决于哪个更重要,纯粹的速度或灵活性。如果您只需要速度,那么 syslog-ng 或 scribe 应该是最佳选择。我个人更喜欢灵活性。 Logbook 是一个较新的项目,它同时支持 python 日志接口和消息队列。我已经用链接编辑了答案【参考方案2】:在可用的情况下使用 syslog(所有现代 *nix 系统,包括 Linux、FreeBSD、OS-X 等)的优势很多:
性能更好:syslog 是用 C 编译的,最重要的是,它作为一个单独的进程运行,因此您的所有日志记录操作对应用程序、进程和创建它们的线程来说都是非阻塞的 您可以同时从多个进程/线程登录,而不必担心锁定问题。所有日志记录都为您安全地序列化,因此您不会丢失数据 您可以免费获得所有记录行的标准可排序时间戳 您可以免费获得日志轮换 您可以免费获得严重级别支持(请参阅man syslog
)
您可以从任何具有 C 绑定的语言调用日志记录,这几乎是任何语言
您可以轻松地从 shell 脚本或命令行登录(通过logger
)
您无需重新发明(如何记录)***
我能想到的唯一缺点是syslog
是不可移植的(对于非 *nix 系统),但如果您使用的是任何现代 *nix,任何替代方案都会更复杂,并且可能不太可靠。
由于syslog
使用 UDP 而丢失数据包的担忧可能是有效的,但在 LAN 上的实践中,我从未发现它是一个问题。
【讨论】:
【参考方案3】:不确定为什么需要 HTTP,但这肯定会增加开销。更不用说 python 实现可能无法胜任这项任务。 我可以推荐 syslog ,但要注意使用 UDP 进行传输会导致消息丢失,因此强烈推荐使用 TCP。 syslog-ng 和 rsyslog 都可以处理 TCP syslog。 nxlog 也可以,甚至没有绑定到 syslog 协议。
【讨论】:
同意,HTTP 是不必要的。它用于我前段时间选择的 logging 包中,然后登录这个项目是一个巨大的问题。以上是关于与其他日志记录工具相比,使用 syslog 都有哪些优势?的主要内容,如果未能解决你的问题,请参考以下文章