使用syslog相比其他日志工具有哪些优点?
我们在一台Ubuntu服务器上使用一个简单的Python日志服务器,主要是用BaseHTTPServer来收集我们的Python日志。这个方案之前一直能满足我们的需求……直到现在。现在,有越来越多的程序往这个日志服务器写日志,导致日志记录器让系统变得很慢。
现在我们需要重新考虑解决方案,正在考虑使用syslog。
使用syslog相比其他日志记录方式,是否会更有优势呢?
谢谢大家的帮助!
3 个回答
1
不太明白为什么需要HTTP,但这肯定会增加一些负担。而且,Python的实现可能也不够强大。我可以推荐使用syslog,但要注意,使用UDP传输可能会导致消息丢失,所以强烈建议使用TCP。syslog-ng和rsyslog都可以处理TCP的syslog。nxlog也可以,而且不局限于syslog协议。
4
使用syslog的好处有很多,特别是在现代的*unix系统上,比如Linux、FreeBSD、OS-X等:
- 性能更好:syslog是用C语言编写的,而且它作为一个独立的进程运行,这样你在记录日志时,不会影响到其他应用程序、进程和线程的运行。
- 你可以同时从多个进程或线程记录日志,而不用担心数据会被锁住。所有的日志记录都是安全的,确保不会丢失数据。
- 所有记录的日志都有标准的可排序时间戳,这个功能是免费的。
- 日志轮换功能也是免费的,这样可以定期清理旧日志。
- 你可以免费使用严重性级别支持(具体可以查看
man syslog
)。 - 几乎所有编程语言都可以通过C语言的接口调用日志功能。
- 你可以很简单地通过shell脚本或命令行来记录日志(使用
logger
命令)。 - 你不需要重新发明日志记录的方法。
我能想到的唯一缺点是syslog
不适用于非*unix系统,但如果你在现代的*unix系统上,其他选择通常会更复杂,而且可能不太可靠。
关于使用UDP可能会丢失数据包的担忧是有道理的,但在局域网环境中,我实际上从未遇到过这个问题。
5
使用syslog虽然简单又快速,但它无法让你完全控制日志的聚合方式。
你现在面临的主要问题是使用BaseHTTPServer,这个东西本来就不适合在生产服务器上使用,也不适合需要高性能的场合。
我看到有两个选择:
- 使用一个更好的http服务器,支持wsgi,并搭配一个小型的网页框架(我们用的是gevent和bottle,不过http://nichol.as/benchmark-of-python-web-servers上有个很好的比较,可以看看不同的解决方案)。
- 使用消息队列。这会意味着你的代码需要做更多的改动,但这是一个专门解决你问题的方案(而且效率更高)。(我们用的是rabbitmq,但你可以查查谷歌或者http://www.darkcoding.net/software/choosing-a-message-queue-for-python-on-ubuntu-on-a-vps来比较不同的选择)。
补充:一个支持消息队列的专门解决方案是logbook。它也可以直接替代标准库中的日志模块。