应用性能管理(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(计时器)

参考文章:

2.2 服务调用追踪

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

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

2.3 时间序列

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

参考文章:

2.4 告警

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

三、开源APM

3.1 ZipKin

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

参考文章:

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.8 Apache HTrace

Apache 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系统具有JVM性能监控、服务调用追中、监控告警功能,大众点评Cat、PinPoint、Hawkular相对来讲功能更为完备,推荐使用。

附录A 闭源APM

  • 1.Google Dapper
  • 2.淘宝 鹰眼Tracing
  • 3.新浪Watchman
  • 4.美团 MTrace

原文地址:https://www.cnblogs.com/elixir/p/8886319.html

时间: 2024-10-23 10:07:36

应用性能管理(APM, Application Performance Management)的相关文章

Application Performance Management

Network Performence Management: Application Performence Management: APM Workflow: Monitoring and Alerting Broad visibility Dashboards and dynamic thresholds End-user experience reporting All users, all transactions Triage Localize problem to users/tr

Application Architecture Determines Application Performance

? Application Architecture Determines Application Performance Randy Stafford AppliCATion ARCHiTECTuRE dETERMinES application performance. That might seem rather obvious, but real-world experience shows that it's not. For example, software architects

场景5 Performance Management

性能调优(不能重启数据库) 索引 资源管理器 性能优化 统计分析 SQL性能分析 SPM (SQL执行计划管理) 堆表 :数据存储无序 位图索引 :适合字段重复值高的,数据仓库环境下(适合OLAP/DSS环境),存储占用空间少, DML成本高, WHERE中与或操作效率高 eg : select count(*) from customers where m_status = married and region in (‘central’, ‘west’); eg : su -oracle s

独立安装Oracle Hyperion Enterprise Performance Management 验证过程

在安装EPM的过程中,都是安装既定的操作手册进行,只是一个过程的重复,对自己安装不会留下深刻的印象.根据自己学习体会,制定安装步骤,去验证自己学习过程中的体会,加深学习印象,解决安装中遇到的问题,模仿-学习-验证-学习-总结的知行合一. 一.只安装以下组件 安装 Foundation Services Java Web 应用程序时,会安装 Shared Services 和 EPM Workspace Java Web 应用程序. --来源"帮助(H)" workspace界面 web

开源APM应用性能管理工具调研

近期在设计一个DevOps平台.希望整合一个APM工具进来,由于APM既可用于性能測试也可用于运维性能监控,是典型的Dev+Ops产品. 商业的APM工具国内外已经有不少成熟产品了,而开源的好像不多见.我想APM工具的原理是基于JVM动态注入,从技术角度考虑,必定会有开源的东西出现才对,所以開始了开源APM应用性能管理工具调研之旅! 今天找到一个叫Kieker 的: http://kieker-monitoring.net/download/ Kieker provides complement

[APM] 2个实例+5个维度解读APM技术

为了加深EGO会员之间的相互了解,同时也为大家提供更多线上相互学习交流的机会,EGO正式启动会员群线上分享活动.本文是根据陈靖华分享主题“APM的价值”的内容整理而成. 第二期分享嘉宾:陈靖华,EGO会员.听云CTO.北京基调网络股份有限公司联合创始人之一. 今天我们来聊聊APM技术,首先APM是应用性能监控(Application Performance Monitoring)或应用性能管理(Application Performance Management)的缩写.所谓应用性能管理,就是指

监控宝发布移动应用监控服务 引领移动APM

监控宝发布移动应用监控服务 引领移动APM [2014年4月22日,北京]--国内领先的应用性能管理运营商,云智慧(北京)科技有限公司近日宣布,推出"移动应用监控服务".这项全新的企业级监控服务解决方案,基于应用服务接口监控业务过程,捕捉应用或服务的终端用户体验,跟踪整个应用交互的数据流,发现业务端口可用率和正确性以及业务性能数据分析,在国内尚属首创. 移动社交.移动支付到移动多媒体,移动互联网的兴起,使得移动应用得以更为广泛地渗透到社会经济的各个领域.更多的产品和服务应用通过移动互联

APM简介

1.什么是APM APM (应用性能管理) - Application Performance Management & Monitoring在信息科学和系统控制领域,APM致力于监控和管理应用软件性能和可用性.通过监测和诊断复杂应用程序的性能问题,来保证软件应用程序的良好运行(预期的服务). 应用性能管理主要指对企业的关键业务应用进行监测.优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO). 一个企业的关键业务应用的性能强大,可以提高竞争力,并取得商业成功,

APM-应用性能管理

APM(应用性能管理) 在信息科学和系统控制领域,APM致力于监控和管理应用软件性能和可用性.通过监测和诊断复杂应用程序的性能问题,来保证软件应用程序的良好运行(预期的服务),APM已经商用 基本定义 编辑 APM = Application Performance Management,应用性能管理,对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案. 应用性能管理是一个比较新的网络管理方向,主要指对企业的关键业务应用进行监测.优化,提高企业应用的可靠性和质量,保证用户得到