APM(Application Performance Management & Monitoring)一种基于云的性能监控服务(SaaS),以非侵入式监听探针,收集应用关键指标,生成分析报表展现,并且提供监控告警服务等。支持移动端、浏览器、服务器等多角度监控。提供了最终用户体验监控,应用拓扑的发现与可视化,用户自定义业务分析,应用组件深度监控,IT运营分析等五个功能维度提供服务。相较于传统的zabbix、nagios等运维监控工具,更专业、更深入应用细节、更方便定位问题细节、更精确洞悉故障代价。

国外比较知名的公司有new relice,国内有OneAPM、听云、透视宝、云智慧、监控宝等。各家所提供服务同质化严重、差异不大,整个市场可谓是群魔乱舞、多方角逐。其中以new relice作为行业领军,创立于2008年,于2014年顺利IPO,管理层12人拥有70%的投票权,创始人Cirne持有24.2%的股份,也是最大股东。并由此开创了APM这一行业。

APM核心功能

最终用户体验监控:测量应用和终端用户之间所有交互方式的响应时间、健康状况。

应用拓扑映射:自动检测和展示所有应用集群所涉及的组件。需要知道在任意指定时间内使用了哪些应用组件,特别是当某个问题对用户造成影响的时候。

业务事务分析:检测和测量由单个用户发起的请求所涉及的所有应用组件活动中的响应时间。提供分析仪表板很容易地看出哪一个交易失败的受到影响的用户是谁。这与测量单个web页面的响应时间是不同的维度。

应用组件深度监控:检测和测量代码在应用容器中执行耗时,离线转储分析,自动检测线程死锁,线程状态,资源等待,线程堆栈内容和代码分析等。

IT运营分析:预测分析和容量规划,以实现积极主动的管理。面向APM的生命周期管理,经验上技术运行团队总是疲于应对生产故障。支持性能预测,趋势和容量的分析,当前阶段的APM解决方案帮助技术运行团队,及早进行性能分析,在应用性能出现瓶颈实现解决问题,减少停机、提高性能和优化利用资源。

性能衰减

当然做到如此细致入微的监控,其本身也带来了一定幅度的性能衰减。笔者在云服务平台执行对比测试,采用如下配置:

类型 硬件 软件&配置
应用服务 8核8G

java1.866 JAVA_OPTS="$JAVA_OPTS -Xms3200m -Xmx3200m -XX:NewRatio=3  -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=82 -XX:+CMSClassUnloadingEnabled"

tomcat7.0.67 protocol="org.apache.coyote.http11.Http11NioProtocol"

缓存服务 4G Redis2.8.17
数据库 8核16G MySQL-5.5

测试场景:以查询为主,查询缓存与查询数据频率为1:1。

测试策略:利用jmeter作为测试工具。

以下为是否启用监控探针对比结果图:

笔者只使用过听云所提供的服务,以下为通过官网描述收集到的对比结果:

指标 New Relic 听云 OneAPM 云智慧 监控宝 透视宝
Ruby O X O O O O
Python O O O O O O
Java O O O O O O
.Net O O O O O O
PHP O O O O O O
Node.js O O O O O O
Android O O O O O O
IOS O O O O O O
win Phone X X X X X X
Browser O O O O O O
Apache X X O O O O
NGINX X X O O O O
Lighttpd X X X O O O
Resin X X X O X X
IIS X X X O O X
Tomcat X X O X O O
WebLogic X X O O O O
WebSphere X X O O O X
JBOSS X X X O O O
Exchange-Server X X X O O X
EQMail-Server X X X O O X
标准Email X X X O O X
Tuxedo X X X O O X
MSMQ X X X O X X
IBM MQ X X X O X X
FioranoMQ   server X X X O X X
RabbitMQ O X X X X X
Redis O O O O O O
Memcached X X O O O O
MySQL O O O O O O
Postgres O X X O X O
MongoDB O X O O O O
ORACLE X O X O O O
MS   SQL Server X O X O O O
DB2 X X X O X X
Backup SQL X X X O X X
Informix X X X O X O
SQLite X X X O X X
Docker X X X X X O

整体来说虽然New Relic作为行业领军,但是国外的网站有被墙的风险。国内多家公司群雄逐鹿,俨然已是一片红海。既然是卖服务,国内的公司相对而言更接地气一点。相比较而言,云智慧所提供的监听指标更多,

但同时适合企业自身的才是最好的。接触过听云的销售人员,个人感觉对于自身产品的了解程度都不够深入,给予我们的产品讲解也没有说明白。卖服务整体市场要能给予良好的服务体验,明确的指导用户使用。

总结

New Relic的创业故事里提到,他凑够10万美元启动资金,独自耗时1年开发出产品雏形。换算为人民币则大致为60万,在此简单推算作为国内企业而言,如果购买APM服务一年花费30万,其实就可以考虑自主开发。适合企业自身需求定制,同时为大数据驱动的企业商业智能提供了庞大的数据支持。

APM浅析的更多相关文章

  1. 老生常谈系列之Aop--Spring Aop原理浅析

    老生常谈系列之Aop--Spring Aop原理浅析 概述 上一篇介绍了AspectJ的编译时织入(Complier Time Weaver),其实AspectJ也支持Load Time Weaver ...

  2. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  3. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  4. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  5. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

  6. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  7. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  8. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

随机推荐

  1. php常见排序

    public function actionQuickSort(){ $arr = ['5', '4', '3', '2', '1', '0']; $quickRes = $this->quic ...

  2. mysql执行流程

      https://www.jianshu.com/p/71a98f1347b9 image   image SQL示例: SELECT DISTINCT < select_list > ...

  3. node.js fs、http使用

    学习node核心模块http.fs;的使用 首先在server.js文件中require两个模块http.fs; let fs = require('fs')let http = require (' ...

  4. 2017面向对象程序设计(JAVA)课程总结

    以下就课程结束之后的问题进行简单小结:1. 关于课程教学方法       课程在部分章节的学习中采用了翻转课堂教学,目的是促进同学们借助方便获取的线上线下学习资源进行课前自学,以便于老师留出课堂时间进 ...

  5. centos7里面docker不能下载本地源

    报这种错的 编辑这个文件 加上这一段内容 rstart重启,搞定.

  6. 【翻译】 View Frustum Culling --1 View Frustum’s Shape

    这是一些列来自lighthouse3d的视锥体裁剪教程.旨在学习总结,及便于查阅. 1.视锥体的形状 在OpenGL中,透视投影是由两个函数定义的gluPerspective和gluLookAt.我们 ...

  7. 【Spider】使用命令行启动时,能正常抓取,但是在pycharm直接运行不能保存数据

    通过cmd 运行命令scrapy crawl [爬虫名称]可以正常运行,并把数据保存到json文件和下载爬取的图片 但是在项目的spiders目录下的 firstTestSpider.py文件里添加: ...

  8. NIO简单理解

    NIO:新IO,同步的非阻塞IO. 1.Java NIO 由以下几个核心部分组成:Channels(通道).Buffers(缓冲区).Selectors(选择器) Channels(通道) 1.所有的 ...

  9. 利用MATLAB截取一张复杂图片中想要的区域

    A = imread('1.jpg'); imshow(A); [x,y] = ginput(2);    %确定图像上的两点利用ginput函数,返回值是两点的坐标 pic_1 = imcrop(A ...

  10. 二分 poj 3273

    题目链接:https://vjudge.net/problem/POJ-3273 把n个连续的数字划分成m个连续的部分,每个部分都有一个部分和(这个部分所有值加起来),现在要使划分里最大的那个部分和最 ...