运维监控

摘抄自:http://m.sohu.com/a/118286560_487514

第三级:代码级问题诊断

无论是业务体验监控,还是应用端到端监控,都是粗粒度监控,在很多情况下,如出现应用性能等,尽管能及时发现问题,但是如何解决定位,还需要更加细粒度的诊断手段。为此,我们引入基于代码级的业务监控手段,用于解决应用云化后复杂的环境下的问题定位诊断场景。

1、整体架构

代码级监控系统基于JVMTI(虚拟机工具接口)技术实现,整体架构如下图所示,JVM是目前为止使用最多的跨平台运行环境,在此基础上构建JVMTI接口具有较好的底层植入能力,针对不同业务将JVMTI的接口封装成传感器,并由代理插件调用来捕获代码级数据。

运维监控

2、用于故障诊断及性能剖析

基于JVMTI的监控工具可以追踪和监控任何一笔用户请求在服务器端的代码轨迹,通过对比堆栈上各层函数耗时,可以迅速找出执行热点,并定位到性能问题的根因。同时,对调用的函数启用出入参数捕获,可以详细了解业务执行时的快照,帮助定位业务层面的问题。下图为我们JVMTI代理插件部署逻辑图。

运维监控

应用场景举例一:

在6月份通过代码级监控定位到智能营销平台性能问题,通过便利店调用营销平台交易通常在1~2分钟时间,消耗服务器大量线程池资源,同时在营业系统调用便利店过程中,采用了同步阻塞式调用,多次对用户体验造成影响。CPU采样分析发现91.6%的性能损耗发生在应用服务器层,进一步深入到最底层调用找到程序试图对一个超大的ArrayList进行遍历导致执行效率低下,解决方案是:采用更高效的哈希集合取代ArrayList,如下图:

运维监控

应用场景举例二:

通过代码级监控发现低版本的log4j组件引发的线程死锁,导致青岛自助终端短时间无法登录,如下图:

运维监控

第四级:集群式平台性能监控

除了上述业务和应用监控手段外,为了对各集群中成百上千台机器和分区进行直观高效的集中监控并告警,我们引入开源软件Ganglia和Nagios并进行定制,构建了一套适合云化的集群式平台性能监控系统。目前已经实现了对大数据集群、BDS集群、CRM共约520个节点的集中监控和告警,内容包括节点和服务状态、资源利用率、网络、IO流量等指标,以及Hadoop和HBase的各项性能指标。通过个性化定制,还可以方便地增加其他需要关注的指标项。