运维改革探索(一):用多层级监控实现可视化运维(3)
第三级:代码级问题诊断无论是业务体验监控,还是应用端到端监控,都是粗粒度监控,在很多情况下,如出现应用性能等,尽管能及时发现问题,但是如何解决定位,还需要更加细粒度的诊断手段.为此,我们引入基于代码级的业务监控手段,用于解决应用云化后复杂的环境下的问题定位诊断场景. 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的各项性能指标.通过个性化定制,还可以方便地增加其他需要关注的指标项. 1、云化平台性能监控系统的优势 相比传统的网管监控,以及其他诸如nmon等性能监控手段,我们构建的分布式云平台性能监控系统具有以下几大优势:
2、性能监控系统架构 我们构建的云化平台性能监控系统采用开源软件Ganglia(版本3.7.1-2)和Nagios(版本4.1.1).前者主要负责收集、展示性能指标数据,后者则侧重于告警机制. 1)Ganglia系统架构 ganglia主要有三个模块,如下图所示.
2)Nagios系统架构 Nagios主要包括nagios daemon、插件(plugins)和NRPE模块,如下图所示. Nagios按照设置的周期调用插件来检查监控对象状态.执行check_nrpe,并指定参数(检查命令,比如check_disk),告诉远端被监控节点的NRPE daemon需要检查哪些指标.NRPE 运行本地的各种插件进行检测,然后把检测的结果返回给check_nrpe.服务器端维持一个队列,所有返回的状态信息都进入队列.共有4种状态信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/黄色、2(CRITICAL)表示严重错误/红色、3(UNKNOWN)表示未知错误/深黄色.Nagios根据插件返回来的值,判断监控对象的状态,并通过web展示.同时调用告警脚本smswarn,发送告警短信,同时,也可以配置邮件告警通知. 3)已实现的被监控节点列表 目前云化平台性能监控系统共监控如下节点,分为19个集群: 3、云化平台性能监控效果 1)Ganglia效果示例 通过建立基于Ganglia的性能监控平台,改变了对平台性能监控的认识,大大提升了监控水平. 如下:一个界面内可以实现整个集群的运行趋势概况: 下面是云集群内每个机器的运行情况,超过几十种指标可选: 2)Nagios效果示例 (编辑:ASP站长网) |