APM Server端Java探针调研

一、需求

Tomcat:
(1)模块启动时间
(2)模块交互耗时

二、现状

现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体系来做的。通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪,关于Dapper的介绍可以看这个链接:http://bigbully.github.io/Dapper-translation/
下面重点选5个比较有名的server端探针进行简单介绍:

2.1 Pinpoint(开源)

github地址:https://github.com/naver/pinpoint
java领域的性能分析的开源项目,这个是一个韩国团队开源出来的,通过JavaAgent的机制来做字节码代码植入,实现加入traceid和抓取性能数据的目的。
NewRelic、Oneapm之类的工具在java平台上的性能分析也是类似的机制。

2.2 Zipkin(开源)

官网:OpenZipkin · http://zipkin.io/
github地址:https://github.com/openzipkin/zipkin
这个是twitter开源出来的,也是参考Dapper的体系来做的。
Zipkin的java应用端是通过一个叫Brave的组件来实现对应用内部的性能分析数据采集。
Brave的github地址:https://github.com/openzipkin/brave
这个组件通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。
然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

2.3 CAT(开源)

github地址:https://github.com/dianping/cat
这个是大众点评开源出来的,实现的功能也还是蛮丰富的,国内也有一些公司在用了。
不过他实现跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。
这样做有利有弊,好处是可以在自己需要的地方加埋点,比较有针对性;坏处是必须改动现有系统,很多开发团队不愿意。

2.4 NewRelic(闭源,代码不混淆)

https://newrelic.com/java

2.5 听云(闭源,代码混淆)

http://www.tingyun.com/tingyun_server.html
探针能力介绍:http://doc.tingyun.com/server/html/phpzhichiliebiao.html

三、探针能力汇总

3.1 支持

(1)应用运行环境:PHP, Java, .NET,Node.js, Python,Ruby等
(2)云:阿里云、腾讯云、AWS、金山云、青云、华为云等
(3)Database:MySQL, Oracle, MS SQL Server, PostgreSQL等
(4)Framework:Spring, Yii,Django,Tomcat,JBoss,WebLogic等
(5)NoSQL:Memcached,MongoDB,Redis等非关系型数据库服务
(6)API:监控HTTP、Dubbo、Thrift协议下当前应用调用的外部服务,如微博、微信第三方API接口等,并支持跨应用分析

3.2 核心功能

(1)web应用过程:分析url调用过程中性能消耗原因,抓取超过阈值url的详细数据
(2)数据库性能:支持多种数据库类型的监测,定位并追踪慢SQL语句问题
(3)错误分析:记录错误发生时的详细信息,统计应用错误率,定位问题具体至代码行
(4)外部API调用:可以监测所有服务端应用外部调用API的耗时,并进行汇总统计
(5)线程剖析:可以实现生产环境下实时在线的线程剖析,可在运行时了解代码性能
(6)NoSQL分析:实时监控Memcache, MongoDB,Redis等NoSQL数据库的性能问题
(7)JVM性能:实时监控 JVM 运行状态,通过图表展示 JVM 内存分配情况、内存使用情况、垃圾收集信息、类加载数量、JVM 线程信息以及会话信息。
(8)HTTP 会话:分析每个应用程序的 HTTP 会话数,包括:活跃、过期、拒绝的会话。

四、详细介绍(只关注能解决需求的部分)

用竞品的server探针监控Tomcat+Spring MVC的demo。在demo里只实现了path=/hello/hello的GET请求。如下:


这里写图片描述

以下是使用听云和NewRelic分别监控到的Tomcat接收GET请求后的调用追踪及其耗时。

4.1 听云

慢事务追踪


这里写图片描述

这里写图片描述

4.2 NewRelic

慢事务追踪


这里写图片描述

这里写图片描述

4.3 监控 Tomcat 中 Java 应用的主要特点

监视分布式应用程序的跨应用程序追踪
将主要业务轨迹的关键业务进行拓扑分析
用性能剖析分析方法调用栈轨迹

五、Server探针Demo SDK

(1)监控功能:模块交互耗时
监测Tomcat + Spring MVC搭建的服务,当后端收到“GET http://localhost:8080/hello/hello”请求时,HelloController模块的printHello的调用耗时。
printHello调用如下,里面人为增加2s延迟。

这里写图片描述

(2)Server探针功能:
监控模块的函数调用耗时
(3)Server探针实现方式:
通过JVM的JavaAgent的机制来做字节码代码,在目标模块的函数调用前后打点。
代码行数:1270行
实现时间:一天
NewRelic代码行数:8w行
(4)实验结果:
这里写图片描述

六、调研结论

目前竞品(NewRelic、听云)的方案能满足需求。
有可参考的竞品:NewRelic,虽然不开源,但代码反编译后未混淆,可以基本读懂。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容