PHP APM对比评测:OneAPM, New Relic, 听云

感谢@penguinz 的推荐,又发现了一家提供应用性能管理服务的国内厂商:“听云”,看了斯人-吴帅写的试用笔记,才了解到国外的应用性能管理厂商New Relic才是真正APM大牛,产品线覆盖很是全面,功能也很是强大,不过确实像斯人所说的,访问太慢了。粗看起来,发现从产品设计到界面上,这三家公司的产品都太像了,很明显国内两家公司的产品是在“学习”New Relic的产品,但愿两家国内厂商不仅是简单的拷贝国外的产品,而是可以作出符合国内用户需求的产品。 数据库

上次写过一篇OneAPM的评测,关于听云的产品测试我就再也不多写了,斯人的博客已经提供了很是详细的试用报告,你们能够去看看。http://www.imsiren.com/archives/1192。正好春节以后有点时间,就把3个产品都装了一遍,分别仔细用了一段时间,来讲一下几个产品的对比感觉。 后端

响应时间图表的对比

看了斯人的试用报告,发现听云的产品能够监测NoSQL的访问性能,所以此次测试在原有WordPress应用的基础上,增长了几个PHP脚本,应用中除了MySQL数据库以外,还引入了对MongoDB, RedisMemcached的访问。从响应时间的对比来看,听云支持性能指标是最多的,详见下表:  服务器

响应性能指标 性能

OneAPM 学习

听云 测试

New Relic ui

PHP代码 spa

支持 .net

支持 命令行

支持

RDMS数据库

支持

支持

支持

Memcache

不支持

支持

支持

外部服务

不支持

支持

支持

Redis

不支持

支持

不支持

MongoDB

不支持

支持

不支持

阻塞时间

不支持

支持

不支持

 此外,后面还会说到听云针对这些经常使用的NoSQL数据库还提供了更深层的分析,而其余两家的产品只对RDMS关系型数据库作了深层分析。


OneAPM的响应时间图,只显示Web事务和数据库的性能分解


听云的响应时间图,显示了包括应用、数据库、非关系型数据库等多个组件的性能分解 


New Relic响应时间图,显示了PHPDatabase, Memcache, Web external 4种性能分解

 

拓扑逻辑图对比

从拓扑逻辑图上也能够看出来各家对各种应用后端服务支持的区别,听云和New Relic都支持NoSQL数据库的展现,而OneAPM只有Database服务的展现。OneAPM的拓扑图能够直接在图上向下钻取到Web事务和数据库的分解报表,而听云和New Relic没有提供钻取功能,只提供了对应服务的响应曲线图展现。

OneAPM拓扑图,可拖拽和钻取

 

听云拓扑逻辑图,识别的服务最多,不可拖拽和钻取


 

New Relic Map,识别出部分NoSQL,不可拖拽和钻取


 

 

 

事务性能分析对比

OneAPM的事务列表

 

New Relic的事务列表 

 

听云的事务列表

从事务列表中能够看出来,New RelicWordPress的支持比其余两家更好,能够根据WordPress收到的不一样参数识别成不一样的事务名称来进行汇总统计,而其余两家只能按URI的方式进行事务的识别和统计。


事务Trace对比

三个产品在事务性能的汇总分析上功能相差不大,主要的差异表如今对慢事务的Trace上。Trace功能会对很是慢的事务访问保留详细的诊断数据,包括代码段的耗时状况、代码段执行的详细步骤和调用堆栈,相关的SQL语句等等信息。对追踪记录列表的缺省排序,听云使用的是响应时间的倒排序,而New RelicOneAPM使用的都是采集时间戳倒排序,相比较下来,听云的排序方式更加合理,我确定最优先关注的是最慢的请求。

 

OneAPM Trace概要

 

听云应用过程追踪摘要

 

New Relic Transaction Trace Summary

Trace的概要信息展现里,New Relic展现性能组件相对比较简洁,而且含义明确,很是容易阅读和粗略定位问题。听云的组件展现分解最细,可是因为分解太细的缘由,反而不容易阅读,也不够简介。而OneAPM的虽然组件展现得也比较少,可是分解比较乱,彻底不知所云。

事务Trace的第二部分Trace详情展现的是记录的慢事务处理中代码的完整执行过程,包括代码的嵌套调用,代码堆栈等等。听云和New Relic都提供了比较准确易读的代码调用详情和代码堆栈,OneAPM的详情中的代码段展现得有问题,有时候会出现非PHPC代码,而且没有提供代码堆栈的展现。


听云的追踪详情

 

New RelicTrace Detail

 

OneAPMTrace详情

OneAPMTrace信息中比其余两家多了用户自定义参数部分,应该指的是请求中提交的表单参数吧。其余两家都只有HTTP头里的部分参数信息。 

 


SQL日志对比

SQL日志的分析相似于MySQL里的慢查询日志(MySQL slow query log),能够记录查询时间比较慢的SQL语句。从功能对比上来看,OneAPM只记录了详细的SQL语句和查询时间,而New Relic和听云除了记录查询时间和SQL语句以外,还会记录该SQL语句的执行计划以及调用该SQL语句的应用代码调用堆栈。此外,听云还展现了对应SQL语句查询时间分布的散点图,对查看慢SQL记录更加直观易用。   

听云的慢SQL追踪数据最为详细,包括散点图,SQL语句,查询时间、执行计划和代码调用堆栈

 New RelicSlow query trace,包括查询时间,SQL语句和代码调用堆栈。

OneAPM的慢SQL记录,只有查询时间和SQL语句。

 

NoSQL性能对比

目前在三家的产品中,只有听云一家提供了对NoSQL服务性能的分析,听云提供了包括MongoDB, RedisMemcached在内的三个NoSQL服务的分析,能够看到各种操做的响应时间和吞吐率,对MongoDB还能够按Collection查看不一样操做的性能。虽然New Relic在前面的响应时间中有Memcached的性能数据,可是没有单独提供针对这种NoSQL服务更细致的分析数据。而OneAPM目前还不支持任何一种NoSQL数据库性能分析。

听云的NoSQL性能分析功能模块

听云的 MongoDB 分析

听云的 Redis 分析

 

听云的 Memcached 分析

 

 外部服务对比

三家的产品都支持对外部服务(即应用经过Web Service方式调用的外部的API)的性能分析。New RelicOneAPM的产品会展现各主机的平均响应性能,可是OneAPM的好像存在Bug,致使列表中同一个主机重复出现而且性能值不一致。听云的外部服务性能分析除了主机一级的数据以外,还能够向下按该主机下每一个不一样的URI来汇总性能数据,能够了解不一样的API接口的性能差别,实用价值更高。

 OneAPM的外部服务,展现到主机一级,存在Bug致使同一主机重复出现


 New Relic的外部服务,展现到主机一级

听云的外部服务,展现到主机和具体的URI一级

 

 

后台任务(CLI模式PHP脚本)性能对比

对于不经过Web方式访问的PHP脚本,即命令行模式(CLI)运行的PHP程序,三个产品都是经过后台任务的方式来展现的。目前OneAPM的产品没法提供CLI模式的PHP应用监控,这部分数据是空的。New Relic和听云均可以对CLI运行的PHP进行监控,而且都提供了性能分解的功能,能够查看后台任务的性能在代码段的消耗比例。可是New Relic的性能分解有Bug,我运行的脚本明明是访问Redis数据库的,它分解出来倒是Memcache的访问,若是是这样,以前几个图表中的Memcache性能数据估计也是错的了...

 OneAPM的后台任务数据为空,没法监测到CLI模式的PHP应用性能


New Relic的后台任务数据,以”Non-Web”的类型来展现CLI模式运行的PHP应用性能


New Relic的后台任务性能分解,能够看到代码时间和NoSQL服务的操做时间,不过把Redis识别成了Memcached

 


听云的后台任务分析

 


听云的后台任务性能分解,正确识别代码执行时间和Redis各种操做的性能。 



错误分析对比

错误分析记录应用中抛出的异常信息和PHP错误代码,计算整个应用的错误率。从本次测试结果来看,听云和其余两家的差异比较大,New RelicOneAPM都记录了大量的错误信息,大概百分之十几的错误率,而听云却一个错误信息也没有记录。

后来仔细看了数据才发现,New RelicOneAPM记录的错误实际上都是警告级别(E_USER_WARNING)的不严重的错误,实际上个人测试应用一直正常访问,并无出错。而听云则只记录错误基本的错误,因此一条警告级别的错误信息都不会记录。从实用角度来讲,听云的的更加合理,由于这些警告级别的错误确实是我都不须要关心的,不然个人应用错误率有这么高的话,用户早投诉了。

不过若是可能的话,但愿能够提供一个错误级别的设置选项,在须要的时候能够选择采集哪一个级别的错误日志。

OneAPM的错误分析

 

New Relic的错误分析

 

报告对比

New RelicOneAPM都提供报告功能,就是用一个汇总表格的形式展现一段时间以内Web事务和SQL性能的对比报告。从测试结果来看,New Relic能够正常提供报告数据,OneAPM的报告功能此次好像没法正常使用,表格数据始终是空的,上次测试的时候是好的。而听云则没有这个功能模块。

OneAPM的报告,最近好像没法正常使用,表格始终是空的。

 


New Relic的报告,显示过去一段时间的性能数据对比

 

 

报警设置对比

三个产品均可以对监测的PHP应用进行性能和错误率的警报设置,在应用发生性能问题和错误率太高的时候发送警报通知用户。

对比测试中发现OneAPMNew Relic均可以预先设置不一样的报警策略,例如报警的阈值和触发的时间等等策略,而后再把策略分配到须要报警的应用上面,经过策略能够设置比较灵活的报警规则而且容易复制到多个应用上,使用起来比较方便。

而听云的报警设置只能对每一个应用单独设置报警阈值,没法设置触发时间等参数,而且因为没有策略的分配,没法在多个应用上复制一样的报警设置,易用性上较差。

 OneAPM的报警策略设置可进行阈值和触发时间等条件设置


New Relic的报警策略设置一样可进行阈值和触发时间设置

 

听云的报警设置只能进行阈值设置,而且没有警报策略的概念

 

 

应用设置对比

有许多应用设置项,例如Trace阈值和ApdexT值的设置对监测结果数据影响较大,所以最好能给用户提供自定义的设置功能。特别是ApdexT值,直接影响到Apdex分数的评估和警报的结果,很是须要能够随时动态设置。从测试结果来看,听云的应用设置项最全最方便,而且能够在线修改并实时生效,不须要重启应用服务器。而OneAPMNew Relic在应用设置上功能就没这么完整了。

OneAPM的应用设置页面,实际上没有可设置的项目,只列出的几个选项,多是能够在配置文件中配置,不过没有相应的说明和解释。经过修改配置文件的设置项须要重启应用服务器才能生效,实用性较差。


New Relic的应用设置项,能够修改应用名称和ApdexT值,其余的选项只能在配置文件中修改,配置文件中说明比较详细,可是一样的问题是修改完须要重启服务,实用性略显不足。

听云的应用设置项,能够修改的参数和阈值最多最全,同时提供配置文件和线上设置的功能,设置项有很详细的说明和解释,线上设置无需重启服务便可生效,能够随时调整,易用性很是好。


原创文章,转载请标明出处!

相关文章
相关标签/搜索