Jess Portnoy 是一位多产的 PHP 开发者和开源爱好者,在 SourceForge 和 GitHub 上有很多有用的数据和 Web 数据实用程序。
我对 Jess 的工作略有了解,来自她所做的各种技术讲座,这些讲座通常会引起我的注意,因为她与 Web 多媒体平台 Kaltura 有关联。
她在 LinuxFest Northwest 上的即将到来的演讲是关于 PHP 监控的,考虑到 Kaltura 处理的流量类型,可能很少有人像 Jess 那样熟悉这个主题。
什么是 JaM?
JaM 是一个 PHP 监控系统,它支持将 PHP 事件(致命错误、警告、通知,基本上 此处列出的所有内容)存储到不同的存储后端。 这些事件稍后可以从实现 PHP_JAM_GET_FUNC() 的后端检索。
JaM 主要对大型重量级网站有用,还是使用少量 PHP 来增强网站的人也可以从中受益?
我相信每个基于 PHP 的系统都可以从使用 JaM 中受益。
当然,你越大,就越有可能遇到你不知道的问题,监控就变得越重要。 然而,考虑到 JaM 只需要很少的初始设置,并且只有在发生错误事件时才会被触发,我觉得较小的项目也可以从中受益。
我了解到 JaM 最初是 Aware 项目。 你是如何参与其中的,JaM 提供了 Aware 所没有的东西?
这实际上是 FOSS 如此出色的一个很好的例子。
在与我的一位同事交谈后,我开始考虑 JaM。 他的团队的代码中出现了一个致命错误,因为编写它的人在 PHP 5.4 上进行了测试,而生产站点运行在 PHP 5.3 上。 他告诉我,他的团队查看了日志,但没有发现任何表明问题的条目。
原因是有人将 error_log PHP 指令设置为不同的日志位置,因此该错误没有进入 Apache 的错误日志(团队希望在那里找到它)。
因此,我开始考虑创建一个解决方案,该解决方案根本不需要日志解析,而是直接插入 Zend Engine 并覆盖 zend_error_cb() 以通过电子邮件和其他方法报告错误,然后再写入错误日志,这是原始 zend_error_cb() 函数所做的事情。
我已经知道 Zend 的一个这样的解决方案,称为 Zend Monitor。 但是 Zend Monitor 不是免费软件,并且依赖于其他 Zend 专有组件。 我想要一个 FOSS 解决方案。
我认为,当你对一个新项目有想法时,你需要做的第一件事就是检查它是否已经存在,这正是我着手去做的事情。 这并不容易找到,但使用 "zend_error_cb()" 和其他关键字的组合,我找到了 Mikko Koppanen 的 PHP Aware。
查看该项目的 README,感觉它将是一个很好的起点,因为它已经完成了我想实现的大部分目标,并且以非常模块化的方式编写,这总是很好的。
然而,当我尝试构建它时,它没有编译。 这是因为它最后一次工作是在 2011 年,而 PHP 引擎自那时以来已经发生了很大的变化。
因此,我将其移植以支持更新的 PHP 版本,按照我的原始计划添加了 ElasticSearch 后端,并提交了一个拉取请求。
我联系了 Mikko,询问他是否愿意合并它。 Mikko 说,虽然他很高兴有人对该项目感兴趣,但他不再从事该项目或 PHP,因此,他很乐意让我获得所有权。
这就是 JaM 的诞生方式。
据推测,Kaltura 使用 JaM。 它纯粹是喜欢查看日志的系统管理员的后端技术,还是有喜欢查看图表和图形的站点管理员的美观前端?
Kaltura 确实使用 JaM 来监控我们的开发和测试环境; JaM 是我今年为公司黑客马拉松所做的项目。 它目前被我们的一些团队使用,包括我自己的团队,我希望它也能被其他人采用。
JaM 的主要目标受众是开发人员,因为 JaM 事件包括该事件的完整堆栈跟踪,因此允许他们了解触发该事件的流程。
系统管理员也可以通过查看事件来获得见解,因为它通常可以表明支持服务的问题,而不一定是在代码本身中。 例如,假设你的应用程序使用 MySQL,而 MySQL 当前已关闭; 这很可能会触发多个事件,因为你的应用程序没有它就无法工作,并且由系统管理员来纠正它。
就前端和图表而言,由于 JaM 知道如何使用 ElasticSearch 来存储事件,因此你可以使用 Kibana 来获得事件的可视化表示,运行查询并轻松创建图形。
此外,由于可以通过发出简单的 HTTP 请求、传递 JSON 格式的数据来将数据插入 ElasticSearch,因此 JaM 的 ElasticSearch 后端也可以用于将事件插入也可以接受这种方式数据的其他系统中。
ElasticSearch 是你最初对该项目的想法之一。 它对 JaM 有什么作用?
主要目标是使搜索更快。 然而,就像我在回答有关图形和其他数据可视化的问题时提到的那样,通过使用 Kibana,你可以从数据中获得相当多的附加值,而无需编写任何代码。
JaM 提供了其他监控系统没有提供的什么?
由于 JaM 直接从 Zend Engine 获取事件数据,因此完全避免了解析日志或创建 API 以将应用程序的错误报告给监控系统的必要性。
解析大文件很慢,有时也很困难,因为你需要你的算法来确定它现在正在查看的行是否实际上是一个错误,并且经常会发出错误的警报,否则,由于错误的解析模式而错过一个错误。
查看已解析的结果也很麻烦,尤其是在你每天都有大量日志的情况下。
JaM 具有多个后端这一事实也很有帮助,因为你可以将其配置为仅将事件的子集发送到一个后端,同时将所有事件记录到另一个后端。
例如,考虑一下用于发出有关问题的警报的电子邮件。 许多应用程序会触发许多你想要解决的通知,但这些通知对于应用程序的运行并不重要。 因此,你可能不希望通过电子邮件获取它们,因为它们会很多,并且不会立即采取任何措施来修复它们。
你可以将 JaM 配置为仅通过邮件发送你认为需要立即响应的关键错误,并将其余错误记录到 ElasticSearch 或任何其他后端以供稍后分析和解决。
如果我有一个,我可以运行 JaM 来监控我的 Wordpress 安装吗?
是的,并且配置它只需要大约五分钟,前提是你的 WordPress 实例在 Linux 或任何其他 UNIX 上运行。 JaM 也应该能够在 Windows 上运行,但我从未测试过它,因为我几乎完全使用 Linux(偶尔会深入研究 FreeBSD)。
你是如何开始使用 PHP 的? 显然你已经在其中做了很多工作。 这是出于习惯,还是你首选的 Web 开发语言?
当我为 Zend 工作时,我开始大量使用 PHP,在那里我编写 PHP 代码,帮助维护各种 PHP 扩展,并负责构建 Zend Server deb 和 RPM 包。
在 Kaltura,我们也大量使用 PHP,因为我们的大部分核心都是用它编写的。 所以,我确实可以编写相当多的 PHP 代码。
我认为 PHP 在 Web 开发方面肯定有一些优势,其中之一是你可以非常快速地产生结果。
使用 PHP 7,性能提升非常显著,这传统上是使用 PHP 的问题之一,所以这也是个好消息。
顺便说一句,在 Kaltura,我们最近将 我们的核心移植到 PHP 7。
当然,花时间正确地了解它非常重要。
我认为易于开发的缺点之一是,你可以开始生成看起来非常实用的代码,而实际上并没有真正理解太多,并且一些初学者显然很想这样做。
像任何其他语言一样,它只和使用它的开发者一样好。 但总而言之,我认为对于快速 Web 开发而言,它是我的最爱之一,其次是 Ruby,它也非常漂亮和灵活。
JaM 非常可扩展。 你是否正在积极寻找贡献者? 你是否有一个待办事项列表,其中充满了需要完成的任务? 还是 JaM 现在处于一个良好的状态?
我非常相信 FOSS,无论是从技术角度还是从意识形态角度。 因此,我总是很高兴收到代码、文档和错误报告形式的贡献。
对我来说,这个项目是开放的非常重要。 幸运的是,在 Kaltura,我们的大部分项目都是开放的。 事实上,我的部分工作是与社区开发者和用户合作,将他们的贡献整合到我们的代码库中。
JaM 处于一个相当不错的状态,但它在设计上非常可扩展,我很想看到人们贡献额外的后端。 我也开始将其移植到 PHP 7,并且很乐意让其他人加入这项工作。
你做了很多关于开源的事情。 为什么开源很重要?
这是一个我可以花几个小时谈论的话题。 很难用几句话来概括,但我会尝试。
从技术角度来看,开放性使任何项目都变得更好,因为没有公司能够与社区提供的资源量相匹敌,这些资源可以用于测试不同的用例、安全审计、错误报告和修复。
从意识形态的角度来看,开源意味着用户不会得到一辆引擎盖被焊死的汽车。 即使某个用户根本不懂技术,无法理解代码本身,开放性也意味着他或她可以很容易地找到人来帮助他们,而且通常是完全免费的。
这意味着用户不会被锁定,最终得到他们不再想要且无法更改的东西。 这是每个最终用户都应该拥有的基本自由。
从社交角度来看:FOSS 是结识志同道合的人和潜在朋友的好方法。 我过去和现在都是一个非常自豪的极客,我羡慕今天的孩子们能够通过他们的 FOSS 活动找到朋友。
FOSS 对一个人的职业生涯也很有帮助。 虽然您编写的代码属于您工作的公司,但 *您* 的工作的功劳属于您,您可以将其作为您整个职业生涯的参考。 开发 FOSS 软件的开发人员也倾向于编写更好的代码,因为他们知道全世界都在关注!
您在您的桌面/笔记本电脑上运行 Linux 吗? 如果是,是什么发行版? 您的桌面或窗口管理器是什么?
我从 15 岁起就完全使用 Linux。 我于 1997 年从 Red Hat 5 开始使用。
我最喜欢的桌面环境是 LXDE。 我喜欢它,因为它功能足够齐全,可以满足我所有的需求,而且非常轻量级,事实上,它从未在我的任何机器上崩溃过,这是一个相当重要的特性。
评论已关闭。