是否有Python接口用于Apache计分板(服务器统计)?
简单来说:有没有现成的开源Python接口可以用来访问Apache的记分板IPC功能?我需要从一个正在运行的服务器上收集统计数据,但不想使用mod_status这个HTTP接口,而且如果可以的话,我希望避免使用Perl。
一些背景知识:我了解到,Apache网络服务器使用一种叫做记分板的功能来处理进程间的协调。这可能完全是在内存中进行,也可能是基于文件的共享内存。(如果我说错了,请纠正我!)
在其他用途之外,mod_status允许你查询一个在正确配置的服务器上的特殊路径,返回一个动态生成的页面,上面有Apache整体运行情况的可读性分解:运行时间、请求数量、总数据传输大小,以及进程/线程状态。(这些信息对于监控性能或排查无法关闭进行调试的运行服务器非常有用。)
但是,如果你需要Apache的状态,但又无法打开与服务器的HTTP连接怎么办?(我的组织偶尔会遇到这种情况。例如,Slowloris攻击。)我们可以通过哪些不同的方法获取记分板统计数据?有没有Python接口可以用这些方法?
值得注意的是,一个Perl模块Apache::Scoreboard似乎能够做到这一点。但我不太确定它是否能直接访问本地服务器的统计数据(共享内存,有或没有支持文件),或者它是否必须通过TCP连接到本地主机接口。所以我甚至不确定这个Perl模块是否能满足我们的需求。此外,由于独立的组织原因,我希望在解决方案中避免使用Perl(没有冒犯Perl的意思!)。
另外,如果有人使用完全不同的方法来获取这些统计数据,我也很想了解一下。
1 个回答
Apache::Scoreboard 可以通过 HTTP 获取记分板,或者如果它和服务器在一起加载的话,也可以直接访问记分板的内存。这是通过一个 XS 扩展实现的,也就是用 C 语言写的。想了解如何从 C 语言访问内存中的记分板,可以查看这个链接:httpd/include/scoreboard.h。
如果你在使用 mod_python,那么你也可以用和 Apache::Scoreboard 一样的方法:写一个 C 扩展来直接访问记分板。