UAVStack应用数据归集

前言

为了保证应用的可靠运行,需要对系统建立完善的应用监控,实时获取应用信息和运行状态。在之前的文章里,我们通过介绍MOF中的CaptureFramework框架和InterceptFramework框架,分别阐述了应用实时数据和画像数据的采集方法。

然而仅仅采集是不够的,还需要对应用数据进行归集和处理,并提供相应的信息存储和查询能力。

在UAVStack中,应用数据的归集功能通过MA来实现。MA可以定时抓取MOF中的实时信息,自动发现Tomcat、MSCP、JavaSE中的信息,并通过数据分析得出监控信息,通过RocketMQ将归集后的数据发送到HM进行存储,并提供查询功能。

MA架构

在介绍应用数据归集之前,首先介绍监控代理程序MonitorAgent。

MonitorAgent是在应用外独立运行的MSCP程序,提供数据采集功能、节点容器控制功能以及应用数据归集功能。MonitorAgent的架构如图所示:

MonitorAgent具有以下特点:

  • 每个host machine只有一个监控代理程序进程。作为心跳客户端,MA提供host心跳信息和当前节点容器控制功能,归集容器与进程的信息,使得当前host能够被HM发现和控制。
  • MA被设置为守护进程,挂掉后可自重启。
  • MA负责抓取并归集当前host上所有应用的监控数据,包括从MOF定时抓取的数据和第三方推送的数据。

MonitorAgent应用数据归集的启动过程如下:

  • 启动AppServerMonitorDetector实例,查找运行在宿主机系统和容器中所有的JVM进程,调用指定的MonitorDataCatchWork来获取抓取实时数据。
  • 创建AppServerProfileDataCatchWorker实例并开启一个线程采集profile数据。
  • 启动MDFListener来接收第三方推送的应用数据进行归集。
  • 启动MonitorDataProcessor用于计算增量数据。

应用数据归集

MOF里的DataObserver提供了JMX和HTTP两种模式来暴露应用数据,供AppServerMonitorDetector进行采集。AppServerMonitorDetector的层次结构如下图所示:

AppServerMonitorDetector:定时任务,用于注册、管理Detector并定时运行。如果运行时性能损耗过高,AppServerMonitorDetector会进行自杀,然后注册并运行JVMLocalOSDetector和JVMContainerOSDetector。

OSDetector:用于自动发现JVM进程并指定DataCatchWorker归集进程的应用信息,包括JVMLocalOSDetector和JVMContainerOSDetector两种。

JVMLocalOSDetector:用于自动发现运行宿主机系统上的所有JVM进程。首先通过JVM工具扫描本地操作系统上所有JVM进程的信息,根据进程ID判断是否需要指定新的DataCatchWorker。

如果需要,则利用JVM systemProperties中的uav.engine.vendor字段判断当前应用类型,并利用JVM进程信息生成特定的JMXMonitorDataCatchWorker实例,将DataCatchWorker的JVMAccessURL字段设置为JMX_CONNECTOR_ADDRESS。MonitorDataCatchWorker可以利用JVMAccessURL以JMX的方式归集该JVM进程产生的实时数据。

JVMContainerOSDetector:用于自动发现容器(Docker)中的JVM进程。容器通过namespace对运行环境进行了隔离,因此Detector通过Http方式获取容器内部的JVM进程信息。JVMContainerOSDetector首先通过扫描找到所有安装了MOF的Docker进程,通过ping来判断容器是否包含JVM进程。

如果发现JVM进程,则再次通过Http请求JVM进程的SystemProperties信息,生成新的HttpMonitorDataCatchWorker实例,并与进程的url和UAV_MOF_ROOT拼接成JVMAccessURL。MonitorDataCatchWorker可以利用JVMAccessURL以Http方式对该JVM进程的应用数据进行归集。

MonitorDataCatchWorker:用于归集进程内的应用数据。DataCatchWorker会依据不同的服务类型(AppServer、MSCP、JSE)以JMX或Http方式采集应用数据并进行处理。

以归集AppServer和MSCP应用信息的JMXAppServerMonitorDataCatchWorker为例,DataCatchWorker通过JMXConnector和jmxurl连接MOF上的MBeanServer,采集MOF暴露的MBean,创建MonitorDataFrame(MDF)和ProfileMonitorDataFrame(PMDF)用于存储MBean中的实时信息和画像信息,并利用MonitorDataProcessor计算实时信息的增量数据。归集到的应用信息在PublishHandler上通过RocketMQ发送给HM进行存储。

归集的画像数据包含以下信息:

  • 应用服务的基本信息,包括系统信息和所在容器的信息。
  • 应用服务内部的组件,包括服务组件、客户端组件、日志组件等。
  • 应用服务的调用关系(溯源信息)。

归集的实时数据包含以下信息:

  • JEE服务,MSCP服务端采集应用集群、应用实例、以及特定URL的响应时间、加载计数、错误计数等。
  • JSE服务会采集JVM状态,包括Heap使用、GC计数、线程计数、CPU、class计数等数据。
  • 客户端采集客户端的访问计数、响应时间、错误计数等数据。

MDFListenServer的运行机制则较为简单,指定了IP与端口,以Http的形式接收第三方推送的MDF信息,将其发送到MonitorDataPublishHandler进行发送。

应用数据存储

HM包含画像数据服务和实时数据服务,负责消费并存储RocketMQ中的应用数据。HealthManager在启动时注册DataMessageHandler,负责处理MQ收到的信息。MonitorDataMessageHandler会将收到的实时数据存储到Redis中并设置过期时间,历史数据会通过Http方式存储于OpenTSDB中。

同时,实时数据服务还会将监控数据重新发送至RocketMQ中,该数据最终会被实时预警服务进一步消费,用以计算预警信息。ProfileDataMessageHandler会将收到的画像存储到Redis中,并开启定时任务,清理未定时更新的画像信息。历史画像数据过期后会以文档的形式通过MongoDBClient存储于MongoDB中。

整个应用信息采集和存储的流程如图所示:

应用数据的展示

HM对外暴露查询接口,支持对5分钟内的应用数据和历史应用数据进行查询。UAV APPHUB利用查询接口提供以下功能:

1.应用集群信息

通过上帝之眼→应用监控可以了解应用集群及集群下所有应用的相关信息。HM中的定时组件HealthManagerProfileDataLifeKeeper会定时检查应用实例画像数据的状态。

如果画像数据在指定时间内未更新,HM会将应用实例设置为濒死状态;如果超过指定时间两倍后画像数据仍未更新,HM会将应用实例设置为死亡状态;超过指定时间三倍后,HM会在缓存中清除该应用实例的画像信息并不予显示。

2.应用实例信息

应用可以分为JEE应用、MSCP应用和JSE应用。在应用集群中点击应用实例,可以获取实例的详细信息,包括:

  • 应用实例性能:显示应用的实时数据。其中,

    JEE应用和MSCP应用的实时数据包括:

    • 访问计数:总计数、错误计数、警告计数。
    • 响应时间:最长响应时间、最短响应时间、平均响应时间。
    • 响应代码计数:RC+HTTP响应码,如RC200表示HTTP响应码是200。

    JSE应用的实时数据包括:

    • TPM:每分钟新启线程数。
    • HPM:每分钟Heap变化。
  • 应用实例组件(画像信息)包括:

    • 服务信息:包含服务组件、客户端组件、日志组件等。
    • 应用运行环境:包括应用的运行服务器、容器信息、进程信息。
    • 应用实例工具:支持调用链跟踪、浏览器跟踪、线程分析。

3.组件实例信息

点击应用实例的组件,可以获取应用组件的详情信息。服务组件和客户端的指标包括访问计数、响应时间和错误计数。点击日志组件则进入应用日志搜索界面。

4.服务图谱

点击应用集群的详情按钮,可以查看应用实例的服务图谱。服务图谱不仅可以可视化展示应用/服务之间的调用关系,描述服务与服务的静态拓扑和运行时特性的图谱;还能够对存在问题的服务或调用关系进行标注。

在服务图谱中点击各组件,可以获得组件的实例信息。点击组件之间相连的调用关系,可以获得应用服务作为客户端对URL的调用状况,服务图谱会针对存在问题的组件或调用关系(如响应时间过长)进行提示。

5.时空沙盘

通过上帝之眼→时空沙盘可以查询应用实例和容器组件的历史数据。

总结

UAVStack的应用数据归集功能已在宜信公司内部广泛使用,是具备较高可用性和可靠性的分布式服务。运维人员可以通过APPHUB获取应用画像数据和实时数据,了解应用运行状况,定位系统的运行问题,是保障系统可靠运行的强力助手。

官方网站

开源地址

UAVStack已在Github上开放源码,并提供了安装部署、架构说明和用户指南等双语文档,欢迎访问-给星-拉取~~~

扫一扫下方二维码,关注一个不会让你失望的公众号

猜你喜欢

转载自juejin.im/post/5c87771e5188257a323f5a0f