Orbitz 的开源监测工具 ERMA 和 Graphite

阅读数:806 2008 年 7 月 10 日

话题:Java语言 & 开发

Orbitz Worldwide——全球领先的在线旅行公司,已经开源了它的两个监测工具:Extremely Reusable Monitoring API(ERMA)和 Graphite(一个持久化和可视化组件)。ERMA 是 Orbitz 自己开发出来的一个 Java API 和类库,已经被用于 Orbitz 的几个 Web 应用程序中,用以在运行时捕获应用程序中的监测统计数据。它是被处理的事件流源头,以便在服务停止或运行速度低于所定义的响应时间阈值时发出警报。

Orbitz 监测和管理在线旅行社网站的范围包括了数十个 Web 应用、数百个 VM 和数千个Jini 服务。ERMA 基于三种技术:复杂事件处理(Complex Event Processing——CEP)、Java 管理扩展 API(Java Management Extensions——JMX)和面向方面编程(Aspect Oriented Programming——AOP)。 Orbitz 使用 Aspect 把监测逻辑注入到应用程序代码中,并使用 CEP 处理监测事件。CEP 为处理大量的监测数据提供了一个高吞吐量及低延迟的解决方案。通过减少由软件可用性、可靠性和性能问题引起的客户影响事件的平均修复时间(MTTR),系统提升了可管理性。其结果是,Orbitz 用最小的开发成本获得了访问超过 10 万个不同事件类型的能力。其处理如此大量数据的能力使公司能够在需要的时候以非常细粒度的层次监测服务。而且,使用这种技术,增加新的监测应用程序所需的硬件成本被限制在了最小程度。

JavaOne 2008大会上,Doug Barth 和 Matthew O'Keefe 就 Orbitz 的 CEP 作了介绍,这是一个关于 Orbitz Web 站点的应用程序级监测的案例研究。在这个技术专题中,他们用监测统计的例子和可视化控制台示范了怎么把 ERMA 和 Graphite 工具用于 Orbitz 的应用程序。网上有关于这个介绍的多媒体录音,这个资源对于 Sun 开发者网络的成员来说是免费的。

ERMA

ERMA 是一个基于 Java 技术的仪表 API,它使用起来和日志 API 一样简单,而且足够灵活,通过配置就可以满足大多数日志、监测、分析和其它事件处理需求的需要。它动态地把发生在同一应用线程上的事件联系起来。作为结果的事件模式还可以把服务于一个用户请求的、分布式的 VM 连接在一起,以便能够高效下钻错误和延迟的根本原因分析,以及自下而上的影响分析。

ERMA 的两个主要元素是 Monitor 和 MonitorProcessor 接口。应用程序代码通过使用 Monitor 实现来仪表化。开发者还可以使用注解如 @Monitored 来标记需要被监测的 Java 类。@Monitored 注解可以被声明在类型一级(类或接口)也可以被声明在方法级。通过利用基于SpringAspectJ的配置,Orbitz 使用了一个直接 ERMA 仪表和 AOP 风格仪表的混合体。

MonitorProcessor 负责使用由仪表化代码产生的原始数据。Orbitz 有许多 MonitorProcessor 实现,其中包括这么一个实现,把来自成百个 VM 的 ERMA 事件实时汇集到 CEP 引擎,这些事件在这里被高效聚合并处理。

ERMA 可以从其Launchpad站点上下载。其团队已经完成了新的 ERMA 3.0 版本的测试。他们内部所有与 ERMA 相关的 wiki 文档已经被复制到新的 ERMA Wiki站点上了。

ERMA 使用了 Apache Commons JEXL类库以便为声明哪些 Monitor 定位到哪些 MonitorProcessor 上提供简单的配置语法。这也使得应用程序可以在运行的时候动态地路由信息流。在开发过程中,为了确保向应用程序增加监测逻辑时不至于引入过多的延迟,使用了JUnitPerf测试框架。

该解决方案的可视化部分包括了一个显示 SNMP 事件的 Netcool/OMNIBus 控制台,以及一个自主开发的持久化和可视化系统——Graphite。Orbitz 使用OpenNMS项目的 JoeSNMP API 开发了一个控制器,它可以把来自事件处理应用的数据通过 SNMP 汇聚到网络运转中心。

Graphite

Graphite 是一个PythonWeb 应用,用来为数字时序数据提供可伸缩的存储和可视化显示。它接收来自 CEP 引擎的输出,这些输出由 7 万种数据汇聚而成。Graphite 中有一个 Graphite portlet 用来与监测 portal 集成,它是基于JBoss Portal框架的。这个 portal 呈现了重要的系统统计图表视图以及警报的 RSS feeds。用户可以针对特定警报的严重性和 / 或受影响应用来订阅这些 feeds。Graphite Web 应用本身被用来显示使用 RESTful URL 所产生的监测统计的可视图形。Graphite 数据可以被展现成线型图、饼图或者原始的 CSV 数据。Graphite 还提供了一个基于 Web 的命令行接口,高级用户可以使用它来快速且方便地创建并共享包含相关图表集的仪表盘。

Graphite 可以从Launchpad 站点上下载。Chris Davis 和 Graphite 开发团队也已经创建了一个wiki,介绍如何使用这个可视化工具。如果想向开发团队提供反馈,可以填写这个站点上的一个表格(需要用户注册)。不管什么时候,只要你把问题提交到这个网站上,Graphite 团队都将收到一封电子邮件。

未来 Orbitz 的复杂事件处理还具有事件模式监测能力,包括实时点击序列(click stream)相关的分析和纠错能力。该公司正在开发一个解决方案,通过查找离散事件中的模式,估算出问题的根本原因,将之与客户影响事件信息捆绑在一起,能够减少传递给控制人员的警报数量。随着业务量和系统规模的增长,运营团队必然要依赖自动的行为事件侦测才能有效管理。ERMA 的未来路线图包括与开源 ESP 引擎Esper的集成。

如果想更进一步了解 ESP 这个话题,InfoQ ESP专题还介绍了其它CEP产品,包括来自 IBM 的(WebSphere Business Events)、来自 BEA 的(WebLogic Event Server)、以及 Esper。

查看英文原文:Orbitz Open Sources Monitoring Tools ERMA and Graphite