在当今时代,软件系统正变得越来越复杂。与此同时,客户对响应时间和可用性等方面的期望也比以往任何时候都高。正如您所知,性能不佳的服务可能会将客户推向竞争对手的产品。
因此,系统故障和性能不佳通常会对公司的声誉和经济效益产生重大负面影响。APM(应用性能管理)学科应运而生,它提供方法和工具来确保高质量的服务。APM 工具提供了监控软件系统健康状况、检测和应对新兴性能异常以及诊断性能问题根本原因的手段。一套商业 APM 工具(AppDynamics、DynaTrace、NewRelic 等)功能丰富且成熟;然而,在某些情况下,由于许可成本、供应商锁定或其他可能对遵循开源策略的公司产生负面影响的原因,商业工具可能并不适用。
InspectIT 是一款成熟的开源 APM 替代方案。该工具提供了管理系统性能所需的所有核心功能。特别是,inspectIT 允许您监控系统的健康状况,在出现性能问题时通知您,并为您提供复杂的手段来进行问题诊断。
InspectIT 概览
下图显示了该工具的高级概述。
inspectIT 背后的架构充当一个平台,您可以在其基础上构建和扩展,或者您可以根据您的要求和需求调整所提供的功能。您可以将其分为三种主要类型的组件:代理、CMR(中央测量存储库)和用户界面。
代理
代理连接到您应监控或分析的系统,并负责收集数据。您可以收集底层基础设施的统计信息(例如,CPU 使用率、已用内存等)以及详细的运行时数据。例如,在 Java 应用程序中,这些可能是执行跟踪、方法调用持续时间、JMX bean 或执行的 SQL 语句。
InspectIT 为 Java 提供了一个全面的代理,它采用 字节码插桩 来收集测量数据。
除了 Java 代理之外,开发人员还在创建多个代理来支持更多平台和编程语言;例如,他们已经为 .NET、Android 和 Node.js 制作了实验性代理。他们还在开发浏览器代理,以实现对最终用户体验的监控。
CMR
inspectIT CMR(中央测量存储库)是接收代理收集的数据的中央组件。它管理数据并为查询提供接口。除了数据管理之外,CMR 还负责指示代理应收集哪些数据。
CMR 区分两种类型的数据:长期数据(CPU 使用率、请求响应时间、运行线程等)和详细数据(执行跟踪、方法调用层次结构等)。详细数据存储在内存中的 环形缓冲区 中,inspectIT 富客户端可以对其进行分析。长期数据存储在 时间序列数据库 中,作为基于 Web 的仪表板的基础。
用户界面
由于监控系统健康状况和性能问题诊断是两个不同的关注点,具有不同的目标用户和不同的要求,因此 inspectIT 提供了两个相应的用户界面。
您可以使用基于 Grafana 的 Web-UI,一目了然地查看系统当前健康状况的概述。您可以使用富客户端进一步分析收集的详细数据。以下案例历史将进一步探讨这些用户界面。
案例故事
如果有效使用,inspectIT 可以提高并确保您系统的高质量,从而积极影响最终用户的体验。
为此,我设置了一个虚拟应用程序并连接了 inspectIT 代理。使用的应用程序基于 Red Hat 的开源 JBoss 展示应用程序 TicketMonster,在这里它代表一个电子商务 Web 应用程序。为了展示 inspectIT 的功能,我集成了性能瓶颈来模拟问题。
使用 inspectIT 可定制的基于 Web 的仪表板,您可以从业务和技术角度查看当前系统状态的概述。特别是,它可以显示纯粹的技术指标,如 CPU 使用率和内存消耗,并且可以将数据与指定的业务上下文相关联。
在典型的用例中,系统不是全天候手动监控的,但操作员希望在发生问题(例如服务器故障或性能下降)时立即收到通知。为此,您可以定义警报规则,这些规则会在违反规则时触发操作,例如发送警报电子邮件。
这方面的一个例子是,当请求的响应时间超过定义的阈值时,会发出警报的规则。
在下一步中,您将使用 inspectIT 富客户端来分析收集的数据,以发现问题的根本原因。使用警报 ID(包含在收到的警报电子邮件中),您可以访问仪表板。从仪表板,您可以
- 显示所有违反相应警报规则的请求
- 调查每个请求的执行跟踪,并检查调用了哪些方法以及执行花费了多长时间
- 查看由此请求引起的已执行 SQL 语句和异常
- 通过数据浏览器请求独立的统计信息(例如,所有 SQL 语句、方法计时等的聚合)
在默认配置中,仅捕获并显示在调用层次结构中的 servlet 调用和 SQL 语句。因此,您无法准确地看到时间都消耗在哪里。
要克服这个问题,请添加额外的插桩点以收集更多数据。为此:
- 创建一个新的插桩配置文件,您可以在其中定义您应监控的自定义类
- 您可以将这些配置文件分组到环境中,这将允许您在不同的代理上分配不同的配置文件集
一旦配置文件或环境被保存,受影响类的字节码将与 inspectIT 代理修改的字节码进行动态交换。 一旦发生这种情况,将收集新指定方法的运行时数据。
如果您现在查看新捕获的请求,数据将以更详细的方式提供。使用此数据,您可以确定哪个方法导致了响应时间过长。在本例中,问题的根本原因是先前集成的性能瓶颈的方法。
您现在可以查看源代码并发现此方法为何如此缓慢。例如,可能是依赖于无法访问的第三方服务,或者只是代码中的错误。
最终想法
使用开源 APM 软件,您可以确保系统的质量,并采取措施进一步改进它。您可以使用此软件立即对问题做出反应,并确定其根本原因,或至少将其定位到一定程度的细节。
开发人员正在创建许多强大的功能,这些功能将显着丰富 inspectIT 的功能。
其中一项功能是在多个主机上关联执行跟踪的能力,这增加了系统洞察力,使得跟踪数据流通过整个系统成为可能。此外,移动(Android、iOS)和浏览器(JavaScript)代理将不再处于实验状态——它们将可以投入生产使用。使用这些功能,您可以查看受监控系统的端到端视图。
正在开发的另一项功能是自主异常检测,它可以使用智能和自适应基线而不是硬阈值。
这只是 inspectIT 及其功能的简短概述。还有更多功能有待发现。如果您想尝试一下,您可以下载 inspectIT 及其文档,或者您可以从其 GitHub 存储库 中查看完整的源代码。
评论已关闭。