文档章节

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

p
 phpfans15
发布于 2015/04/01 22:58
字数 3488
阅读 6519
收藏 75

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

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

响应时间图表的对比

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

响应性能指标

OneAPM

听云

New Relic

PHP代码

支持

支持

支持

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值,其他的选项只能在配置文件中修改,配置文件中说明比较详细,但是同样的问题是修改完需要重启服务,实用性略显不足。

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


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

© 著作权归作者所有

共有 人打赏支持
p
粉丝 5
博文 2
码字总数 4935
作品 0
海淀
私信 提问
加载中

评论(11)

ds001
ds001
我以前以为天下文章一大抄,现在发现天下代码一大抄啊
p
phpfans15

引用来自“zhangtl”的评论

“粗看起来,发现从产品设计到界面上,这三家公司的产品都太像了,很明显国内两家公司的产品是在“学习”New Relic的产品,希望两家国内厂商不只是简单的拷贝国外的产品”,事实上他们不仅仅是“学习”,而是赤裸裸的剽窃代码:https://www.v2ex.com/t/125736
您这帖子好老了吧?而且是Python和Java的,从上面页看不出任何证据表明PHP探针是抄袭的。
p
phpfans15

引用来自“听云平台”的评论

谢谢您的评测文章!花了心思仔细对比,有您这样的用户是我们的幸运=)

您文章里说的问题我们正在研究,组里有研发、统计师和设计师等成员在着手改善这些问题。用户体验永远是第一。

New Relic是APM界全球领军厂商,我们看完财报也为它业务线之广而感叹。在国内技术服务方面,我们是更胜一筹的,出现任何问题,我们技术支持第一时间响应,在这项上我们已经收到很多表扬邮件和反馈了。我们希望能凭自己八年做性能监测的经验来先占住中国市场,满足中国用户的需求,然后再进一步拓展。在我们前面已经有很多中国厂商逆袭的案例了,我们相信自己会是下一个。也希望广大的中国用户多多支持我们,有了你们的体验和反馈我们才能打造出最适合中国用户的APM产品!

您有空可以回下我们的留言吗?我们想跟您聊聊。您可以开个你喜欢的技术书单,我们送您书吧!
您这有点王婆卖瓜了吧?虽然从这次测试来看,听云的产品功能还不错,可以看出来是用心在做产品,但这也只是暂时的,谁能最后赢得用户还得看多方面的投入。产品只是一方面,客观地说,就市场宣传上,OneAPM做得还是比听云好得多,要不是有人给我评论,我还真不知道听云也是做APM的... 最后,感谢大家的好意,吉祥物欧拉和书我都不能要,我希望客观的评价,不想再为厂商写软文了。
z
zhangtl
“粗看起来,发现从产品设计到界面上,这三家公司的产品都太像了,很明显国内两家公司的产品是在“学习”New Relic的产品,希望两家国内厂商不只是简单的拷贝国外的产品”,事实上他们不仅仅是“学习”,而是赤裸裸的剽窃代码:https://www.v2ex.com/t/125736
听云APM
听云APM
谢谢您的评测文章!花了心思仔细对比,有您这样的用户是我们的幸运=)

您文章里说的问题我们正在研究,组里有研发、统计师和设计师等成员在着手改善这些问题。用户体验永远是第一。

New Relic是APM界全球领军厂商,我们看完财报也为它业务线之广而感叹。在国内技术服务方面,我们是更胜一筹的,出现任何问题,我们技术支持第一时间响应,在这项上我们已经收到很多表扬邮件和反馈了。我们希望能凭自己八年做性能监测的经验来先占住中国市场,满足中国用户的需求,然后再进一步拓展。在我们前面已经有很多中国厂商逆袭的案例了,我们相信自己会是下一个。也希望广大的中国用户多多支持我们,有了你们的体验和反馈我们才能打造出最适合中国用户的APM产品!

您有空可以回下我们的留言吗?我们想跟您聊聊。您可以开个你喜欢的技术书单,我们送您书吧!
p
phpfans15

引用来自“OneAPM”的评论

hi,我是OneAPM的产品经理陶炳哲,您的测评非常的棒,很多点都是我们正在优化的地方,不知道是否能有机会和您在深入聊聊对我们产品的看法,我的邮箱是taobingzhe@oneapm.com,还想送给您一个我们的吉祥物欧拉抱枕哦!
已回留言,私聊吧。
p
phpfans15

引用来自“陈为迪”的评论

怎么感觉这是广告贴
哈哈,上一篇算是广告贴,当时写评测就是为了参加OneAPM的活动拿奖的,这一篇还真不是。
OneAPM
OneAPM
hi,我是OneAPM的产品经理陶炳哲,您的测评非常的棒,很多点都是我们正在优化的地方,不知道是否能有机会和您在深入聊聊对我们产品的看法,我的邮箱是taobingzhe@oneapm.com,还想送给您一个我们的吉祥物欧拉抱枕哦!
马博文
马博文
我们在用newrelic,还不错
深爱着你们
深爱着你们
怎么感觉这是广告贴
OSChina 技术周刊第二十八期 —— 用 React 编写移动应用

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】iOS 越狱开发——如何将应...

OSC编辑部
2015/04/05
1K
0
OSChina 技术周刊第二十八期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】【iOS越狱开发】如何将应...

OSC编辑部
2015/04/05
0
0
关注服务端性能问题�C听云Server试用

  【IT168 技术】很早就在用国外的NewRelic(http://www.newrelic.com/)的APM产品来监测自己网站的PHP应用性能了。无奈国外的服务从国内访问起来实在是太慢了,虽然New Relic已经上市了,但...

imsiren.com
2015/03/05
0
0
国内最大的 Node.js 社区将 New Relic 的监控产品换成了 OneAPM

国内最知名的 CNode 社区把 New Relic 的监控产品换成了 OneAPM 。难道 APM 的老大 New Relic 已经被 OneAPM 超越? 毋庸置疑,在全球应用性能管理 SaaS 领域,New Relic 是当之无愧的老大。...

OneAPM蓝海讯通
2015/09/16
249
0
PHPer都应该关注的服务端性能问题–听云Server试用笔记

很早就在用国外的NewRelic(http://www.newrelic.com/)的APM产品来监测自己网站的PHP应用性能了。无奈国外的服务从国内访问起来实在是太慢了,虽然New Relic已经上市了,但是这访问慢的问题...

斯人PHP
2015/02/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java单例模式学习记录

在项目开发中经常能遇见的设计模式就是单例模式了,而实现的方式最常见的有两种:饿汉和饱汉(懒汉)。由于日常接触较多而研究的不够深入,导致面试的时候被询问到后有点没底,这里记录一下学习...

JerryLin123
昨天
1
0
VSCODE 无法调试

VSCODE 无法调试 可以运行 可能的原因: GCC 的参数忘了加 -g

shzwork
昨天
3
0
理解去中心化 稳定币 DAI

随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器。 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机制,真的有一点复杂。耐心看完...

Tiny熊
昨天
4
0
5.线程实现

用于线程实现的Python模块 Python线程有时称为轻量级进程,因为线程比进程占用的内存少得多。 线程允许一次执行多个任务。 在Python中,以下两个模块在一个程序中实现线程 - _thread 模块 th...

Eappo_Geng
昨天
3
0
ServiceLoader

创建一个接口文件在resources资源目录下创建META-INF/services文件夹在services文件夹中创建文件,以接口全名命名创建接口实现类 内容me.zzp.ar.d.PostgreSQLDialectme.zzp.ar.d.Hype...

Cobbage
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部