应用性能管理(APM, Application Performance Management)总结

当下成熟的互联网公司都建立有从基础设施到应用程序的全方位监控系统,力求及时发现故障进行处理并为优化程序提供性能数据支持,降低整体运维成本。国内外商业的APM有Compuware、iMaster、博睿Bonree、听云、New Relic、云智慧、OneAPM、AppDyn、Amics等。 本文主要针对Java技术体系介绍APM的关键实现技术以及业界主流APM工具的功能特点。

一、APM核心功能#

APM被形象的称为应用程序的私人医生,越来越收到青睐,比起通过日志方式记录关键数据显然要更加实用,APM主要包含如下核心功能:

  1. 应用系统存活检测
  2. 应用程序性能指标检测(CPU利用率、内存利用率等等。。。)
  3. 应用程序关键事件检测
  4. 检测数据持久化存储并能够多维度查询
  5. 服务调用跟踪
  6. 监控告警

二、关键技术#

2.1 获取JVM性能数据##

Java程序运行时性能指标可通过Java.lang.Runtime、java.lang.Management中的方法采集。除此之外,著名的Metrics类库也能够通过这些底层技术获取Java程序性能指标。Cpu利用率等基础数据的采集仅仅是性能监控的一部分,Metrics提供了更为丰富的五个基本度量类型,可在此基础上开发满足需求的监控指标。

  1. Gauges(度量)
  2. Counters(计数器)
  3. Histograms(直方图数据)
  4. Meters(TPS计算器)
  5. Timers(计时器)

参考文章:

  1. 只用五分钟为系统实现基于JMX的监控 https://my.oschina.net/zhongl/blog/29075
  2. 使用Metrics监控应用程序的性能 http://www.cnblogs.com/yangecnu/p/Using-Metrics-to-Profiling-WebService-Performance.html

2.2 服务调用追踪##

大型系统中每次请求往往都由若干个独立的服务调用组成,一次从上游到下游的调用被称为一次Trace,为了监控程序性能,需要知道每个独立服务的执行时间以及网络通信开销时间,Google曾经发表过一个介绍其内部实现Dapper的论文,Twitter参照此论文实现了一个名为Zipkin的服务调用追中系统并已开源。

Trace系统设计的核心技术就是拦截每次服务请求,在请求中加入标识符,记录一次完整的Trace各阶段的执行时间。当然也可以侵入式的写监控代码主动向Trace Server发送执行时间。

2.3 时间序列##

应用程序向APM发送的采集数据,通常都是<Timestamp、Metrics Name、Value>格式,为了实现节约存储空间、计时查询,通常使用时间序列数据库存储采集数据。

参考文章:

  1. 时间序列数据库的秘密 http://blog.csdn.net/pkueecser/article/details/50610796

2.4 告警##

当采集到应用程序的性能数据后,除了人为主动的在系统上查看之外,另一个主要的使用功能点就是,监控系统根据设定的报警规则主动报警。实现触发告警有多种方法,常见的方法有:周期性主动轮询采集到的性能数据,并且根据报警规则,进行报警处理;除此之外,通过流式计算方法也可以进行报警处理,这里推荐使用基于postgresql数据库的pipelinedb,通过sql的方式设定监控规则,当到达报警条件时,通过数据库触发器调用外部函数进行告警处理。

三、开源APM#

3.1 ZipKin##

ZipKin是Twitter开源的Trace工具,通过Java程序中引入客户端,可隐式拦截Http、Thrift等形式服务调用。通过Http、Kafka、Scribe等方式同步监控数据到服务端,ZipKin带有Web UI,但没有告警功能。

参考文章:

  1. 分布式跟踪系统:Zipkin的背景和设计 http://blog.csdn.net/manzhizhen/article/details/52811600

3.2 大众点评网 CAT##

Cat是大众点评开源的功能完备的APM系统,支持JVM性能数据采集、服务Trace、告警等功能,但需要写监控代码。

参考文章:

  1. 大众点评网监控平台剖析http://www.infoq.com/cn/presentations/public-comments-monitoring-platform-analyse/

3.4 Prometheus##

Prometheus从官方介绍来说,他是一个开源的系统监控和报警工具,最初由SoundCloud推出。自2012成立以来,许多公司和组织都采用了Prometheus,项目有一个非常活跃的开发者和用户社区。它现在是一个独立的开源项目,并独立于任何公司。Prometheus具有以下主要特性:

  1. 多维度数据模型(由键/值对确定的时间序列数据模型)。
  2. 具有一个灵活的查询语言来利用这些维度。
  3. 不依赖分布式存储;单个服务器节点工作。
  4. 时间序列的采集是通过HTTP pull的形式,解决很多push架构的问题。
  5. 通过中介网关支持短时间序列数据的收集。
  6. 监控目标是通过服务发现或静态配置。
  7. 多种数据展示面板支持,例如Grafana。

Prometheus主要缺点:

  1. 单机缺点,单机下存储量有限,根据你的监控量局限你的存储时间。
  2. 内存占用率大,prometheus集成了leveldb,一个能高效插入数据的数据库,在ssd盘下io占用比较高。同时可能会有大量数据堆积内存。但是这是可以配置的。

Prometheus既可以使用定时轮询应用程序Http接口获取性能数据,也可以使用嵌入到应用程序中Prometheus client主动收集数据推送给Prometheus Server。除了收集应用程序性能数据外,Prometheus还可以收集主机性能数据,真对不同性能指标Prometheus提供了不同的Exports,也可以自己开发Exports收集数据传递给Prometheus。Prometheus只支持性能采集告警,不支持服务Trace追中。

3.5 Hawkular##

Hawkular是一个功能完备的APM系统,应用程序中嵌入Hawkular客户端,主动将采集数据通过Http或者Kafka传递给Hawkular。Hawkular支持JVM性能数据采集、服务Trace、告警等功能。其中JVM性能数据采集使用JMX,服务Trace使用Zipkin客户端。

3.6 Pinpoint##

韩国开源的一个功能完备的APM系统,支持JVM性能数据采集、服务Trace、告警等功能。

3.7 Appdash##

Appdash是sourcegraph开源的一款用Go实现的分布式系统跟踪工具套件,它同样是以google的 dapper为原型设计和实现的,目前用于sourcegraph平台的性能跟踪和监控。

3.7 Apache HTrace##

Apache HTrace是Cloudera开源出来的一个分布式系统跟踪框架,支持HDFS和HBase等系统。该项目目前还在孵化阶段。

3.9 京东Hydra##

京东开源的基于Dubbo的调用分布跟踪系统,类似ZipKin,功能不够完善。

3.11 Cicada##

宜人贷开源的类似ZipKin分布式跟踪系统,功能不够完善。

3.12 Spring Boot Admin##

可视化展示Spring Boot Metrics,监控数据不能持久化存储,没有Trace功能,没有监控告警功能,但可周期性采集metrics,发送给其他监控软件如slack进行告警处理,同时也可以实现监控数据存储。

3.13 综合评价##

我们希望一个功能完善的APM系统具有JVM性能监控、服务调用追中、监控告警功能,大众点评Cat、PinPoint、Hawkular相对来讲功能更为完备,推荐使用。

附录 A 闭源APM#

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

推荐阅读更多精彩内容