一个名为JaM的PHP监控系统
在与我的一位同事交谈之后,我开始思考JaM。他的团队在他们的代码中有一个致命的错误,因为编写它的人在PHP 5.4上测试了它,而生产站点在PHP 5.3上运行。他告诉我他的团队看着日志,找不到任何表示问题的条目。
原因是有人将error_log PHP指令设置为不同的日志位置,所以错误没有发送到Apache的错误日志(这是团队希望找到它的地方)。
于是,我开始考虑创建一个根本不需要日志解析的解决方案,而是直接插入到Zend引擎中,并重写zend_error_cb()来通过电子邮件和其他方法报告错误,然后写入错误日志,是原始的zend_error_cb()函数的作用。
我已经知道了Zend的一个这样的解决方案,叫做Zend Monitor。但Zend Monitor不是免费软件,并且依赖于其他Zend专有组件。我想要一个FOSS解决方案。
在我看来,当你得到一个新项目的想法时,你需要做的第一件事是检查它是否已经存在,这正是我要做的。这不是很容易找到,但是使用“zend_error_cb()”和其他关键字的组合,我到了Mikko Koppanen的PHP Aware。
看看这个项目的自述文件,觉得它是一个很好的起点,因为它已经完成了我想要实现的大部分内容,并且是以一种非常模块化的方式编写的,而且总是很好的。
当我试图建立它,但是,它没有编译。那是因为这是2011年的最后一次工作,而PHP引擎已经发生了很大的变化。
因此,我将其移植到支持较新的PHP版本,按照原始计划添加了ElasticSearch后端,并提交了一个pull请求。
我和Mikko联系,询问他是否愿意合并。Mikko说,当他很高兴有人对这个项目感兴趣的时候,他不再为这个项目工作或者总体上是PHP,而且对于我来说拥有所有权让他感到非常高兴。
JaM就是这样诞生的。
JaM被实现为一个PHP扩展,直接挂钩到Zend引擎并覆盖默认的错误处理函数:zend_error_cb()。
这允许JaM拦截所有PHP事件(致命错误,警告,通知等等),以便它们可以被发送到多个可配置,存储后端。
这意味着JaM可以配置为将您的所有事件或其中的一部分发送到ElasticSearch服务器,或将SNMP事件发送到您的通用监视系统,或通过电子邮件发送给开发团队或上述所有内容。
由于ElasticSearch实现是通过将事件格式化为JSON over HTTP来完成的,因此实际上可以由多个服务使用,而不一定由ElasticSearch服务器使用。
如果您的系统知道如何处理格式为JSON的数据,则可以轻松地与JaM集成。
请注意,JaM将在加载的任何PHP ENV上透明地运行。这意味着您可以用来监视您的所有PHP应用程序,包括Kaltura,当然,无需对应用程序或日志进行任何代码更改。