感谢@penguinz 的推荐,又发现了一家提供应用性能管理服务的国内厂商:“听云”,看了斯人-吴帅写的试用笔记,才了解到国外的应用性能管理厂商New Relic才是真正APM大牛,产品线覆盖很是全面,功能也很是强大,不过确实像斯人所说的,访问太慢了。粗看起来,发现从产品设计到界面上,这三家公司的产品都太像了,很明显国内两家公司的产品是在“学习”New Relic的产品,但愿两家国内厂商不仅是简单的拷贝国外的产品,而是可以作出符合国内用户需求的产品。 数据库
上次写过一篇OneAPM的评测,关于听云的产品测试我就再也不多写了,斯人的博客已经提供了很是详细的试用报告,你们能够去看看。http://www.imsiren.com/archives/1192。正好春节以后有点时间,就把3个产品都装了一遍,分别仔细用了一段时间,来讲一下几个产品的对比感觉。 后端
看了斯人的试用报告,发现听云的产品能够监测NoSQL的访问性能,所以此次测试在原有WordPress应用的基础上,增长了几个PHP脚本,应用中除了MySQL数据库以外,还引入了对MongoDB, Redis和Memcached的访问。从响应时间的对比来看,听云支持性能指标是最多的,详见下表: 服务器
响应性能指标 性能 |
OneAPM 学习 |
听云 测试 |
New Relic ui |
PHP代码 spa |
支持 .net |
支持 命令行 |
支持 |
RDMS数据库 |
支持 |
支持 |
支持 |
Memcache |
不支持 |
支持 |
支持 |
外部服务 |
不支持 |
支持 |
支持 |
Redis |
不支持 |
支持 |
不支持 |
MongoDB |
不支持 |
支持 |
不支持 |
阻塞时间 |
不支持 |
支持 |
不支持 |
此外,后面还会说到听云针对这些经常使用的NoSQL数据库还提供了更深层的分析,而其余两家的产品只对RDMS关系型数据库作了深层分析。
OneAPM的响应时间图,只显示Web事务和数据库的性能分解
听云的响应时间图,显示了包括应用、数据库、非关系型数据库等多个组件的性能分解
New Relic响应时间图,显示了PHP,Database, Memcache, Web external 4种性能分解
从拓扑逻辑图上也能够看出来各家对各种应用后端服务支持的区别,听云和New Relic都支持NoSQL数据库的展现,而OneAPM只有Database服务的展现。OneAPM的拓扑图能够直接在图上向下钻取到Web事务和数据库的分解报表,而听云和New Relic没有提供钻取功能,只提供了对应服务的响应曲线图展现。
OneAPM拓扑图,可拖拽和钻取
听云拓扑逻辑图,识别的服务最多,不可拖拽和钻取
New Relic Map,识别出部分NoSQL,不可拖拽和钻取
OneAPM的事务列表
New Relic的事务列表
听云的事务列表
从事务列表中能够看出来,New Relic对WordPress的支持比其余两家更好,能够根据WordPress收到的不一样参数识别成不一样的事务名称来进行汇总统计,而其余两家只能按URI的方式进行事务的识别和统计。
三个产品在事务性能的汇总分析上功能相差不大,主要的差异表如今对慢事务的Trace上。Trace功能会对很是慢的事务访问保留详细的诊断数据,包括代码段的耗时状况、代码段执行的详细步骤和调用堆栈,相关的SQL语句等等信息。对追踪记录列表的缺省排序,听云使用的是响应时间的倒排序,而New Relic和OneAPM使用的都是采集时间戳倒排序,相比较下来,听云的排序方式更加合理,我确定最优先关注的是最慢的请求。
OneAPM Trace概要
听云应用过程追踪摘要
New Relic Transaction Trace Summary
Trace的概要信息展现里,New Relic展现性能组件相对比较简洁,而且含义明确,很是容易阅读和粗略定位问题。听云的组件展现分解最细,可是因为分解太细的缘由,反而不容易阅读,也不够简介。而OneAPM的虽然组件展现得也比较少,可是分解比较乱,彻底不知所云。
事务Trace的第二部分Trace详情展现的是记录的慢事务处理中代码的完整执行过程,包括代码的嵌套调用,代码堆栈等等。听云和New Relic都提供了比较准确易读的代码调用详情和代码堆栈,OneAPM的详情中的代码段展现得有问题,有时候会出现非PHP的C代码,而且没有提供代码堆栈的展现。
听云的追踪详情
New Relic的Trace Detail
OneAPM的Trace详情
OneAPM的Trace信息中比其余两家多了用户自定义参数部分,应该指的是请求中提交的表单参数吧。其余两家都只有HTTP头里的部分参数信息。
慢SQL日志的分析相似于MySQL里的慢查询日志(MySQL slow query log),能够记录查询时间比较慢的SQL语句。从功能对比上来看,OneAPM只记录了详细的SQL语句和查询时间,而New Relic和听云除了记录查询时间和SQL语句以外,还会记录该SQL语句的执行计划以及调用该SQL语句的应用代码调用堆栈。此外,听云还展现了对应SQL语句查询时间分布的散点图,对查看慢SQL记录更加直观易用。
听云的慢SQL追踪数据最为详细,包括散点图,SQL语句,查询时间、执行计划和代码调用堆栈
New Relic的Slow query trace,包括查询时间,SQL语句和代码调用堆栈。
OneAPM的慢SQL记录,只有查询时间和SQL语句。
目前在三家的产品中,只有听云一家提供了对NoSQL服务性能的分析,听云提供了包括MongoDB, Redis和Memcached在内的三个NoSQL服务的分析,能够看到各种操做的响应时间和吞吐率,对MongoDB还能够按Collection查看不一样操做的性能。虽然New Relic在前面的响应时间中有Memcached的性能数据,可是没有单独提供针对这种NoSQL服务更细致的分析数据。而OneAPM目前还不支持任何一种NoSQL数据库性能分析。
听云的NoSQL性能分析功能模块
听云的 Redis 分析
听云的 Memcached 分析
三家的产品都支持对外部服务(即应用经过Web Service方式调用的外部的API)的性能分析。New Relic和OneAPM的产品会展现各主机的平均响应性能,可是OneAPM的好像存在Bug,致使列表中同一个主机重复出现而且性能值不一致。听云的外部服务性能分析除了主机一级的数据以外,还能够向下按该主机下每一个不一样的URI来汇总性能数据,能够了解不一样的API接口的性能差别,实用价值更高。
OneAPM的外部服务,展现到主机一级,存在Bug致使同一主机重复出现
New Relic的外部服务,展现到主机一级
听云的外部服务,展现到主机和具体的URI一级
对于不经过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 Relic和OneAPM都记录了大量的错误信息,大概百分之十几的错误率,而听云却一个错误信息也没有记录。
后来仔细看了数据才发现,New Relic和OneAPM记录的错误实际上都是警告级别(E_USER_WARNING)的不严重的错误,实际上个人测试应用一直正常访问,并无出错。而听云则只记录错误基本的错误,因此一条警告级别的错误信息都不会记录。从实用角度来讲,听云的的更加合理,由于这些警告级别的错误确实是我都不须要关心的,不然个人应用错误率有这么高的话,用户早投诉了。
不过若是可能的话,但愿能够提供一个错误级别的设置选项,在须要的时候能够选择采集哪一个级别的错误日志。
OneAPM的错误分析
New Relic的错误分析
New Relic和OneAPM都提供报告功能,就是用一个汇总表格的形式展现一段时间以内Web事务和SQL性能的对比报告。从测试结果来看,New Relic能够正常提供报告数据,OneAPM的报告功能此次好像没法正常使用,表格数据始终是空的,上次测试的时候是好的。而听云则没有这个功能模块。
OneAPM的报告,最近好像没法正常使用,表格始终是空的。
New Relic的报告,显示过去一段时间的性能数据对比
三个产品均可以对监测的PHP应用进行性能和错误率的警报设置,在应用发生性能问题和错误率太高的时候发送警报通知用户。
对比测试中发现OneAPM和New Relic均可以预先设置不一样的报警策略,例如报警的阈值和触发的时间等等策略,而后再把策略分配到须要报警的应用上面,经过策略能够设置比较灵活的报警规则而且容易复制到多个应用上,使用起来比较方便。
而听云的报警设置只能对每一个应用单独设置报警阈值,没法设置触发时间等参数,而且因为没有策略的分配,没法在多个应用上复制一样的报警设置,易用性上较差。
OneAPM的报警策略设置可进行阈值和触发时间等条件设置
New Relic的报警策略设置一样可进行阈值和触发时间设置
听云的报警设置只能进行阈值设置,而且没有警报策略的概念
有许多应用设置项,例如Trace阈值和ApdexT值的设置对监测结果数据影响较大,所以最好能给用户提供自定义的设置功能。特别是ApdexT值,直接影响到Apdex分数的评估和警报的结果,很是须要能够随时动态设置。从测试结果来看,听云的应用设置项最全最方便,而且能够在线修改并实时生效,不须要重启应用服务器。而OneAPM和New Relic在应用设置上功能就没这么完整了。
OneAPM的应用设置页面,实际上没有可设置的项目,只列出的几个选项,多是能够在配置文件中配置,不过没有相应的说明和解释。经过修改配置文件的设置项须要重启应用服务器才能生效,实用性较差。
New Relic的应用设置项,能够修改应用名称和ApdexT值,其余的选项只能在配置文件中修改,配置文件中说明比较详细,可是一样的问题是修改完须要重启服务,实用性略显不足。
听云的应用设置项,能够修改的参数和阈值最多最全,同时提供配置文件和线上设置的功能,设置项有很详细的说明和解释,线上设置无需重启服务便可生效,能够随时调整,易用性很是好。
原创文章,转载请标明出处!