应用性能监控方法一览

对于基于云的服务,其正常运行时间是最为重要的运维指标之一。服务的中断不仅会影响用户体验,而且对品牌带来负面影响。哪怕99.9%或99.99%的可用性也很难取悦用户,他们总是期望100%的可用性。为了达到这个近乎苛刻的完美要求,我们不仅需要遵循良好的设计模式保持服务的可扩展性,同时还要保证硬件、应用服务器以及数据库服务器的健康运行。

Zephyr的CTO Shailesh Mangal曾经撰文总结了各种监控类型以及所需的工具。(注:Zephyr为开发和QA团队提供解决方案,帮助交付高质量的软件;提供企业级测试管理产品能够与各种工具集成,实现测试的实时管理。)在Shailesh Mangal的文章中,他总结了核心基础设施监控、应用级别监控、微服务监控以及多租户日志监控的工具以及各自的指标,为应用监控提供了比较全面的指导。

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

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

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

CIM的指标包括:

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

Application Level Monitoring:ALM
应用级别监控

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

应用监控方面有不少伟大的工具,如Datadog和New Relic。

应用监控的指标包括:

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

Micro Service Monitoring:MSM
微服务监控

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

微服务监控的工具方面,存储引擎可以选择GraphiteDB或InfluxDB,可视化工具可以选择Kibana或Grafana。

微服务监控的指标包括:

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

Multitenant Log Monitoring:MLM
多租户日志监控

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

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

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

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

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

此外,随着云服务和移动应用的发展,在国内外APM(Application Performance Management)相关的服务得到了空前的关注。

关于作者
张卫滨:
山东出生,天津求学,大连谋生,程序员一枚。熟悉Java和前端开发技术,感兴趣的技术不少,真正精通的不多。业余时间喜欢读书看报,向往有一天去更多的地方旅行,见识人们的不同生活方式。微博@张卫滨1895

InfoQ陪伴技术人,

用优质的技术文章作长情的告白。

技术提升世界的活交给你们了,

高效开发运维在这里给你们提供后勤补给。

应用性能监控方法一览

长按二维码识别关注,领取优质文章补给~