衡量任何应用程序最重要的指标之一就是性能。 我们希望确保用户能够获得最佳的体验,并确保我们的应用程序正常运行, 这就是为什么大多数人至少使用一个监控工具的原因。
如果你想在性能监控市场上寻找一些不同的东西,选择一款开源工具是不错的选择之一。 在下面的博文中,我们收集了一些开源的APM工具,这些工具目前已经可以替代付费工具,大家可以看看它是否是你的最佳选择。
拥抱开源
APM市场是一个拥挤的市场。 既有许多大的和知名的名字,如New Relic,AppDynamics(查看这篇文章,以了解他们的概述),以及Dynatrace(我们在之前的帖子中进行过比较),也有一些较小或较不知名的工具。 由于游戏中有这么多玩家竞争,他们都知道监控你的应用程序的价值,所以他们私有化他们的代码。
然而,市场上有一个替代品,那就是开源工具。 如果你想要一种简单的方法来获得应用程序在生产环境中的可视化,以及如果你想知道你的代码实际上是如何被监控的,这些工具就是一个很好的选择。
开源社区还有一些关键的APM工具,每个都有自己的产品和特性, 如果你感兴趣的话,请继续移步往下看哈。下面简单介绍5个可用的工具:
- Stagemonitor
- Pinpoint
- MoSKito
- Glowroot
- Kamon
1 Stagemonitor
Stagemonitor 提供了一个Java监视代理程序,它是使用集群应用程序堆栈构建的。 意思是它的目的是监视在多个服务器上运行的应用程序。 该工具与时间序列数据库(TSDB)集成。 此工具已针对处理时间序列数据以及按时间索引的数字数组进行了优化。 这些数据库包括Elasticsearch,Graphite和InfluxDB。
它是如何工作的呢?
Stagemonitor包含一个位于Java应用程序中的代理,可将度量标准和请求跟踪发送到中央数据库。 该工具只需要一个实例来监视所有应用程序,实例和主机,并且可以部署在您自己的数据中心内。
在监控方面,你可以从集群或直接从开发人员服务器查看历史或实时数据,创建自定义警报,并为每个指标定义阈值。
Stagemonitor包含一个仪表板,因此你可以可视化并且分析您感兴趣的不同指标和请求。您可以创建自定义仪表板,编写自定义插件,甚至使用第三方插件。 它提供了一个无需后端的浏览器窗口小部件,它会自动注入受监控的网页。 您可以在以下链接中查看现场演示。
在官方文档中,Stagemonitor声明它还支持非基于servlet的应用程序,您可以点击这里查看完整的要求。
Stagemonitor’s Widget Metrics
底线:如果你已经熟悉ELK堆栈,它绝对值得你尝试快速测试运行。
2 Pinpoint
Pinpoint是用于大规模分布式系统的APM工具。 它是在Dapper(一个由Google构建的分布式系统跟踪基础架构)之后建模的,为其开发人员提供有关复杂分布式系统行为的更多信息。
它是如何工作的?
这个工具可以通过跟踪分布式应用之间的交易数据,从而分析系统的整体结构以及其中的组件是如何交互的。这意味着它的目标是解释每个交易是如何执行的,跟踪组件之间的流程以及确定有问题的地方和潜在的瓶颈。
仪表板能够可视化的展示出各个组件的关联性,并使得你能够实时监控应用程序中活跃的线程。 而且Pinpoint可以让你看到请求的数量和响应的模式,这样你能够识别潜在的问题。你可以查看一些关键的详情,包括CPU使用率,内存/垃圾收集,以及JVM的参数。
Pinpoint使用了一个代理,安装时无需修改任何代码,而且你可以在你自己的机器上运行一个简单的实例,为这四个组件运行四个简单的脚本:Collector, Web, Sample TestApp, 以及HBase.
Pinpoint的 服务器映射
小结:如果你听说过Dapper,或者你想要监控和分析复杂的分布式系统, 你就一定得看看这个工具。
3 MoSKito
MoSKito 提供三种工具:
- MoSKito-Essential: 基本的独立项目。它是MoSKito功能的核心,可以让你监控你的应用。
- MoSKito-Central: 集中式的存储服务器,用于保存性能数据。
- MoSKito-Control: 用于监控多节点Web应用程序的性能。
那怎么使用呢?
想要开始使用的话,你需要将提供的.jar文件放在WEB-INF/lib目录下,或者在web.xml文件里加入一小段新的部分。一旦这个工具运行起来,它就会收集性能数据,实时分析并存储起来便于历史分析使用。
这个工具收集所有的性能指标,比如线程数、内存、缓存、存储、服务、注册、支付、转换、SQL、载荷分布等。它不需要对代码进行修改,并支持所有的主流应用服务器(Tomcat, Jetty, JBoss, WebLogic),而且会将数据保存在本地。
你还可以因此得到一个通知系统,能够知道何时达到设定的阈值,以及你想监控的用户行为的记录。除了基于Web的仪表板,这个工具还提供了一个移动应用,可以随时监控你的应用。
MoSKito’s Essential
小结:MoSKito在2007年首次推出,而且至今为止,它是一个著名而且稳定的工具,并且有团队和社区所支持,包括付费支持选项。对任何开源工具来说,这也是一个很大的加分项。
4 Glowroot
Glowroot 是一个快速,整洁且简单的APM工具,并以此为自豪。你可以对缓慢的请求和错误进行跟踪捕获,然后你就可以对每一个用户行为、SQL捕获和聚合进行长时间的跟踪。该工具还对所有数据进行历史记录,并可以根据配置选取保留。
它提供了图表来可视化展示响应时间的分解和百分位占比情况,而且它的响应式UI可以使你通过桌面或者移动设备来监控你的应用。
Architecture
Glowroot 体系结构
如何使用呢?
要开始使用Glowroot的话,首先你需要下载并解压主要的安装文件,并将-javaagent:path/to/glowroot.jar 加入到你的应用的JVM参数中。在你开始了你的应用之后,剩下的就是通过浏览器来访问http://localhost:4000。
一旦工具启动起来,你就会得到源源不断的分析结果(可以设置过滤选项),同时也可以设置响应时间百分比和MBean属性的警报。Glowroot 提供对跨多个线程的异步请求的完整支持,而且它还支持Tomcat, TomEE, JBoss EAP, Wildfly, Jetty, 以及Glassfish。
Glowroot的仪表板
小结: 如果你追求的是简单且整洁,那毫无疑问你应该首先优先考虑Glowroot这个工具,而不是其他工具。
5 Kamon
Kamon是为运行在JVM上的应用所构建的支持反应式交互的一个工具集。更具体的来说,它是为使用类型安全的反应式平台(Typesafe Reactive Platform,即使用Scala、Akka、Spray 或者Play!)所构建的应用所量身定做的,而且它也提供对其他任何JVM平台和语言的支持。
体系结构
该如何使用呢?
Kamon由两部分组成,一部分是进行指标录制和提供跟踪操作APIs的核心模块,另一部分则是给应用提供字节码插装和/或报告功能的可选模块。或者换言之,它提供了一个简单的API用于对JVM应用进行各种指标以及跟踪信息的录制。
Kamon的所有模块都可以从Maven中央库获取到,你只需要将它们作为编译的依赖加入你的项目中即可使用。一旦你将你感兴趣的模块加入进来之后,只需要简单的启动Kamon,那么所有可用的模块也就会自动启动起来了,你都不需要显示的去激活或者启动它们。
跟踪模块可以使你记录你的应用中所执行的功能的数据,而指标模块则使你能够通过用户代码或者由其他Kamon模块提供的工具来控制实体的注册登记。它还拥有其它的功能,比如过滤、配置工具工厂以及调度指标的订阅。
小结: 如果你在使用很多JVM语言,或者主要是Scala / Akka,并且想要“一个工具把它们都监控起来”,那么Kamon可能是最友好的选择了。
最后的思考
这些都是一些不错的选择,可以用来替代那些付费的APM工具。但是有些人可能会认为使用开源工具只是为了节约一些成本。同样重要的是,当你不需要为你所使用的工具掏钱的时候,它也并不一定就意味着是更便宜了。
APM 工具最擅长给你提供关于你的应用是否正在运行或有什么东西在拖慢它的信息。唯一的问题在于一旦你知道了问题被发现时所在的那个干草堆,你就需要开始深入挖掘寻找真正导致问题产生的那根针。
使用开源工具是要付出代价的:安装,故障排除,当然还有维护,它们都需要你们自己的工程师,甚至是你自己来完成 。而且更甭提,当你遇到一个只有你自己才遇到的问题时,你去寻求支持而社区里的其他人却从没听说过,这个时候你浪费了不少时间。.
我的拙见是,开源可以很不错,但是你应该也要记住会有其他一些成本是必须要付出的,只有明白了这一点之后再去做决定。
你认为还有其它哪些开源的APM工具是值得关注的?大家一起探讨吧。