Python 客户端/服务器实时流式日志文件更新?
我们在Solaris 10服务器上有一些应用程序,它们会生成文本日志文件。我们需要实时将这些日志文件传送到一个中央服务器,以便监控新的事件。
理想情况下,我们希望有一个NFS挂载,这样所有系统就可以把日志写到那里,监控服务器也可以直接从那里读取日志。不过,由于一些技术和非技术原因,这个方案在这里行不通。
目前,我们使用一个后台运行的命令“tail -f”通过SSH隧道来传输数据。
但是,我们在考虑是否值得做一个更稳健的解决方案。
我在想是否可以用Python写一个简单的客户端/服务器程序,使用Twistedb(或者类似的东西 - 有什么推荐吗?)来流式传输日志数据。这种做法容易实现吗?有没有现成的库或工具可以参考?我需要注意哪些问题?
另外,这里是Solaris 10,所以我对文件系统监控的情况不太了解。我知道Gamin可以通过OpenCSW获得,但还有其他选择吗?
2 个回答
可以考虑使用zeromq,而不是直接使用原始的套接字。它不是一个消息中介服务器,而是一个库,让你可以自己编写消息传递系统。它可以让你在不同的平台和编程语言之间轻松地进行通信,支持TCP、进程间通信(没错,就是进程间的!)、多播和其他协议。你只需要把一个用Python写的部分换成用C写的部分,它就能像之前一样正常工作。
这款软件非常适合用来满足你“……借此学习……”的理由;-)
不过,如果你在Solaris系统上搭建它,可能会遇到一些麻烦。Python的绑定可以在http://pypi.python.org/pypi/pyzmq/2.1.9找到。
看看Python的日志模块吧。 http://docs.python.org/library/logging.html
这个模块可以把信息记录到文件、流、系统日志、网络服务器等等。里面还有一些关于如何在网络上记录日志的例子。 http://docs.python.org/howto/logging-cookbook.html#logging-cookbook
这个模块也很容易扩展。