前方高能!非技术宅慎入!—联通大数据应用性能监控(APM)实践

联通大数据应用性能监控(APM)实践

背景

联通大数据有限公司作为联通集团对外大数据服务运营主体,通过大数据、云计算技术整合全集团数据资源、平台资源、渠道资源,深耕行业化专业化大数据应用,面向银行、金融、保险、旅游、政务、交通、城市规划、警务、舆情等领域推出标签、能力开放、风控、数字营销、旅游、智慧足迹、政务、指数八大类产品体系。

      随着公司业务井喷式增长,提供服务的应用也越来越多,平台规模越来越庞大,架构也越来越复杂,为提高资源利用率、提升交付质量和速度,应用承载方式正在向容器化、微服务方向演进,并采用DevOps理念实现软件开发、测试、集成的全生命周期管理。

应用微服务和容器化后,服务进程由上百台机器的数千个微服务承载,前端一个资源请求,往往需要关联数十个网络调用和服务。微服务对应用的解耦特性决定了其调用关系错综复杂度,服务质量一旦不达标,它的黑箱特征使我们很难探究内部到底发生了什么事情。

跟踪一个响应延迟的来源可能非常具有挑战性,因为缓慢可能是由任何一个后端服务引起的。我们的监控(Zabbix)和日志分析(ELK)等基础组件提供了在硬件、网络基础设施和应用日志级别粗粒度视图,但很难确定某个请求为什么缓慢。为了应对这个挑战,我们构建了基于Pinpoint分布式跟踪应用性能管理(APM)平台来分析性能问题,它是一个从问题发现、问题界定、问题定位、弹性伸缩的端到端的管理平台。

APM实践

联通大数据应用性能管理平台是基于开源的APM (Application Performance Management)工具Pinpoint相关技术,结合特定业务场景,定制开发的一套问题跟踪和性能分析系统。实现了采集器与容器集成、多租户、ServerMap、调用栈,慢事务、慢SQL统计报表、异常告警等功能。

APM功能架构图

APM采集层(Agent)

基于容器的无侵入埋点,让应用开发人员感知不到有APM的存在。PinpointAgent作为一个javaagent附加到需要采集的应用程序里,为了让agent生效,在运行时需要设置-javaagent JVM参数,另外Pinpoint需要两个命令行参数来在分布式系统中标记自身:

  • Dpinpoint.agentId – 唯一标记agent运行所在的应用
  • Dpinpoint.applicationName – 将许多的同样的应用实例分组为单一服务

为了避免开发人员手动配置Agent,而且有时候容易配置错误,导致应用程序启动失败,我们把Pinpoint Agent作为基础镜像做到容器里。在容器启动的时候,根据租户名称和应用名称自动生成agentId和applicationName,通过脚本实现agent埋点。开发人员部署应用时只需要在dockerfile文件里选择带有APM的基础镜像即可,其他一切都无需修改,对开发者来说一切都是透明化的,甚至感觉不到APM的存在。

    同时,有的应用程序在上线一段时间后发现很稳定,不需要APM监控了,需要去掉APM监控,为了不让开发者重新构建镜像,我们在容器控制台里做了开关控制,只需要关掉开关,重新启动容器就可以实现。

APM数据汇聚层(Collector)

    Pinpoint通过Agent将采集数据发送给Collector,Collector接收到数据后存储到Hbase集群和ElasticSearch集群,Hbase是一个分布式的、面向列的Key-Value数据库,特点是海量数据快速查询,原生的pinpoint-web采用Hbase作为数据源,实时统计报表部分通过ElasticSearch实现, ElasticSearch是一个准实时的全文检索引擎,有非常强大的实时聚合能力。

APM架构图

           Pinpoint的核心数据结构由Span, Trace, 和 TraceId组成。

  • Span: 请求链中的每一个环节为一个Span,每一个Span有一个SpanId来标识,前后Span间形成父子关系。
  • Trace: 多个Span的集合;在同一个trace中的span共享相同的TransactionId。
  • TraceId: 用来标识每一条业务请求链的唯一ID,TraceID需要在整个调用链路上传递。

研究Pinpoint数据结构后,为了兼容Hbase和ElasticSearch同时入库,我们延用了Hbase的表结构,将Hbase表名映射成ES的索引(index),将Hbase 的Row key 映射成ES的索引类型(type),通过Collector的反序列化对象动态生成ES的Mapping。

同时为了保证紧跟社区版本,我们并没有对Collector进行代码重构,而是通过扩展软件实体的行为来实现变化,使用代理模式对Collector 里的DAO进行了扩展。

APM应用层(web)

Pinpoint的原生 web 已经提供了应用调用链、调用栈(CallStack)等功能,这些功能已经很好的满足了开发、运维人员查找和定位问题,但联通大数据平台是一个面向多租户的服务平台,需要以管理者、租户人员的视角去查看系统的稳定性,并且要能实时预警,将预警消息通过邮件、短信、微信的方式推送给运维人员。因此根据能力开放平台的特定业务场景,我们定制开发了APM应用层。

  • 多租户访问控制

由于Pinpoint web 没有基于多租户权限限制,我们通过租户标识生成Pinpoint agent所需要的agentId,从数据层面按租户进行了打标,这样当租户登录web系统时,会根据租户的登录信息查询租户下监控的应用,数据阅读权限控制到租户级别。

  • 系统总览

系统总览实现了微服务的实时状态,服务依赖数、平均响应时间、访问总次数等指标,可一目了然看到整个微服务系统的整体情况。当需要查询某些微服务的运行日志,点击运行日志查看可跳转到日志系统,可自动检索出该微服务的运行日志。

系统总览

  • 慢SQL报表

选择时间段统计应用的慢SQL排行,点击可以跳转到执行SQL的堆栈信息里。

慢SQL排行

  • 慢事务报表

选择时间段统计应用的慢事务排行,点击可以跳转到事务执行的堆栈信息里。

慢事务排行

  • 错误事务报表

选择时间段统计应用的错误事务,点击可以跳转到事务执行的堆栈信息里。并可以查看到错误的详细信息以及出错的具体类的位置。

错误事务报表

  • 关键事务执行链路分析

可以定义关键事务,类分析事务的执行链路,以及调用了哪些数据库,执行时间是多少等。

关键事务执行链路分析表

  • 预警

实现了服务健康状态告警 、慢SQL告警、慢事务告警 、错误事务告警 、CPU内存使用率告警 、日志报错告警 。可以对核心业务系统超时事件进行告警; 

对核心系统异常错误进行告警;对CPU、内存使用率阈值进行告警。

预警规则

应用场景

  • 绘制应用拓扑关系

Apm平台自动检测整个应用系统环境,发现整个技术层级的所有组件和依赖关系数分钟内检测网站、应用、服务、线程、主机、网络及云基础设施之间数以亿计的因果依赖关系。

    应用拓扑

  • 定位系统性能瓶颈

性能问题很少是孤立的一次性事件, APM可对数十亿个事件进行分析,迅速定位出瓶颈根源,通过对源代码和数据库语句的深度剖析来为及时修复系统缺陷抢得先机。

性能分析

未来发展

伴随着物联网的兴起,技术领域也在定义即将到来的APM3.0的时代,在未来,有巨量的设备被连入网络,网络构成也会更加的复杂,单一工具的监控模式会被以套件为基础的多维度综合监控模式所取代,人工智能和深度学习也将在应用性能的分析领域扮演更加重要的角色。未来重点在支持联通大数据平台健康稳定运行的同时,向以下方向倾斜:

  • 将APM作为软件上云的标准配置体系,所有业务系统上线都需要增加APM监控能力;
  • 实现基础设施监测数据和应用监测数据关联分析; 
  • 采用智能聚合技术和自动化技术打造端到端的性能分析系统,获得应用、数据库、中间件、网络、服务器等可见性;
  • 使用机器学习算法实现异常检测、异常定位、根因分析、未来预测等,真正的实现数字化触点分析和智能运维。

文章转载自公众号 中国联通大数据,作者 李大中

发表评论