应用性能监控方法一览

  • 张卫滨

2015 年 8 月 26 日

话题:DevOps语言 & 开发架构APM

在基于云的服务中,正常运行时间应该是最为重要的运维指标之一。服务如果频繁地中断,不仅会导致正常使用的中断,还会对品牌带来负面影响。99.9% 或 99.99% 已经算不上高水准的高可用性了,用户期望的是 100% 的可用性。为了达到这一点,我们不仅需要遵循良好的设计模式并保持服务的可扩展性,同时还要保证硬件、应用服务器以及数据库服务器的健康运行。

近日,来自Zephyr的 CTO Shailesh Mangal撰文总结了各种监控类型以及所需的工具。Zephyr 致力于为开发和 QA 团队提供解决方案,帮助交付高质量的软件,他们所提供的企业级测试管理产品能够与各种工具集成,实现测试的实时管理。

在 Shailesh Mangal 的文章中,他总结了核心基础设施监控、应用级别监控、微服务监控以及多租户日志监控的工具以及各自的指标,为我们进行应用的全方位监控提供了指导。

核心基础设施监控(Core Infrastructure Monitoring,CIM

在目前的云基础设施中,出现硬件故障是难以避免的。核心基础设施监控会探测硬件瓶颈相关的早期迹象并捕获硬件故障信号,在出现更大的问题之前对其进行应对。基础设施监控的范围包括机器的健康状况、CPU 使用、内存消耗以及网络带宽,基于这些监控信息,能够判断基础设施的当前状态,从而进行必要的扩展。

有众多的工具都能帮助我们获取硬件的健康状态。在大多数情况下,托管提供商(如Amazon AWSHeroku)的工具基本上就能满足这种监控的需要。

CIM 的指标包括:

  • CPU 的平均使用率
  • CPU 峰值的持续时间
  • 内存的平均使用情况
  • 带宽的输入输出情况

应用级别监控(Application Level Monitoring,ALM

应用级别的监控涉及到监控各种服务器的状态,如数据库服务器、应用服务器、分析服务器以及 Hadoop 集群,而要监控的参数则是与应用或工具相关的。

应用监控方面有不少伟大的工具,如DatadogNew Relic

应用监控的指标包括:

  • JVM 进程的内存
  • 内部线程的数量
  • 磁盘 IO
  • 索引的读取 / 写入操作

微服务监控(Micro Service Monitoring,MSM

微服务是现代云架构的组成部分,是实现水平扩展的关键。不管你运行的是传统的单块系统还是设计良好且组织精密的微服务,这些系统都会有不同的 API 端点,遵循不同的协议,满足不同的 SLA 需求。微服务监控就是要监控每个服务的吞吐量和性能,进而确保在任何时间都能满足 SLA 的需求。这种类型的监控一般都需要对应用进行 instrument 操作,让 instrumentation 是可配置的,通过收集器(collector)收集应用的状态,并阶段性地将这些状态发送到永久存储、分析器和预警系统中。此类监控往往会产生大量的数据,因此有可能会影响到性能,因此需要仔细设计。

微服务监控的工具方面,存储引擎可以选择GraphiteDBInfluxDB,可视化工具可以选择KibanaGrafana

微服务监控的指标包括:

  • 请求所需的最大时间
  • 请求所需的平均时间
  • 每分钟请求的平均速度
  • 每天峰值的请求速度

多租户日志监控(Multitenant Log Monitoring,MLM

对于多租户部署的系统来讲,很大的一个挑战就是监控日志并推断系统的内部情况,或者当出现问题时识别出根本的原因。无数的客户端会产生大量的日志,因此对于日志隔离来说,有唯一的标识(如 tenantId)是第一步。除此之外,日志还需要根据请求分组,如果请求要跨多个服务时,这一点尤为重要,每个服务都产生一些日志信息将会有助于识别问题。

多租户日志监控中有非常经典的工具,也就是 ELK(Elasticsearch, Logstash, Kibana)技术栈。

多租户日志监控的指标包括:

  • 每个租户的日志
  • 每个请求的日志
  • 每天总的错误数量

总而言之,好的监控要涉及到系统各个方面,从硬件、应用再到服务。如果需要构建多租户应用的话,使用配置恰当的 ELK 技术栈也有助于快速诊断问题。

目前,随着云服务和移动应用的发展,在国内外 APM(Application Performance Management)相关的服务得到了空前的关注,希望 Shailesh Mangal 的这篇文章能够帮助读者对该领域有一个宏观的了解和掌握。


感谢徐川对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注 我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

DevOps语言 & 开发架构APM