古人学问无遗力,少壮工夫老始成。这篇文章主要讲述应用性能管理(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.监控告警
- 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
文章图片
文章图片
Trace系统设计的核心技术就是拦截每次服务请求,在请求中加入标识符,记录一次完整的Trace各阶段的执行时间。当然也可以侵入式的写监控代码主动向Trace Server发送执行时间。
文章图片
文章图片
2.3 时间序列应用程序向APM发送的采集数据,通常都是格式,为了实现节约存储空间、计时查询,通常使用时间序列数据库存储采集数据。
参考文章:
- 1.时间序列数据库的秘密 http://blog.csdn.net/pkueecser/article/details/50610796
三、开源APM 3.1 ZipKinZipKin是Twitter开源的Trace工具,通过Java程序中引入客户端,可隐式拦截Http、Thrift等形式服务调用。通过Http、Kafka、Scribe等方式同步监控数据到服务端,ZipKin带有Web UI,但没有告警功能。
参考文章:
- 1.分布式跟踪系统:Zipkin的背景和设计 http://blog.csdn.net/manzhizhen/article/details/52811600
参考文章:
- 1.大众点评网监控平台剖析http://www.infoq.com/cn/presentations/public-comments-monitoring-platform-analyse/
- 1.多维度数据模型(由键/值对确定的时间序列数据模型)。
- 2.具有一个灵活的查询语言来利用这些维度。
- 3.不依赖分布式存储;单个服务器节点工作。
- 4.时间序列的采集是通过HTTP pull的形式,解决很多push架构的问题。
- 5.通过中介网关支持短时间序列数据的收集。
- 6.监控目标是通过服务发现或静态配置。
- 7.多种数据展示面板支持,例如Grafana。
- 1.单机缺点,单机下存储量有限,根据你的监控量局限你的存储时间。
- 2.内存占用率大,prometheus集成了leveldb,一个能高效插入数据的数据库,在ssd盘下io占用比较高。同时可能会有大量数据堆积内存。但是这是可以配置的。
3.5 HawkularHawkular是一个功能完备的APM系统,应用程序中嵌入Hawkular客户端,主动将采集数据通过Http或者Kafka传递给Hawkular。Hawkular支持JVM性能数据采集、服务Trace、告警等功能。其中JVM性能数据采集使用JMX,服务Trace使用Zipkin客户端。
3.6 Pinpoint韩国开源的一个功能完备的APM系统,支持JVM性能数据采集、服务Trace、告警等功能。
3.7 AppdashAppdash是sourcegraph开源的一款用Go实现的分布式系统跟踪工具套件,它同样是以google的 dapper为原型设计和实现的,目前用于sourcegraph平台的性能跟踪和监控。
3.8 Apache HTraceApache HTrace是Cloudera开源出来的一个分布式系统跟踪框架,支持HDFS和HBase等系统。该项目目前还在孵化阶段。
3.9 京东Hydra京东开源的基于Dubbo的调用分布跟踪系统,类似ZipKin,功能不够完善。
3.10 Cicada宜人贷开源的类似ZipKin分布式跟踪系统,功能不够完善。
3.11 Spring Boot Admin可视化展示Spring Boot Metrics,监控数据不能持久化存储,没有Trace功能,没有监控告警功能,但可周期性采集metrics,发送给其他监控软件如slack进行告警处理,同时也可以实现监控数据存储。
【应用性能管理(APM, Application Performance Management)】我们希望一个功能完善的APM系统具有JVM性能监控、服务调用追中、监控告警功能,大众点评Cat、PinPoint、Hawkular相对来讲功能更为完备,推荐使用。
附录A 闭源APM
- 1.Google Dapper
- 2.淘宝 鹰眼Tracing
- 3.新浪Watchman
- 4.美团 MTrace
推荐阅读
- 安卓隐藏标题栏方法
- stm32的hall库新建模板编译错误(#error "Please select first the target STM32F1xx device used in your app)
- Jenkins + Gradle + pgyer + Android自动发布
- android之RefBase
- Android 异步下载
- 如何收集制作APP推广中的素材
- Android ANR 分析/data/anr/trace.txt 该文件记录了产生ANR的函数堆栈可以帮助分析
- APP测试点分类
- android webview can‘t getvertx session