UAVStack的慢SQL数据库监控功能及其实现

做者: 王林林程序员

出处:UAVStack智能运维  数据库

来源:宜信技术学院segmentfault

技术沙龙001期|AI中台:一种敏捷的智能业务支持方案|宜信技术沙龙 3月28日晚8点线上直播,点击报名服务器

UAVStack是一个全维监控与应用运维平台。UAV.Monitor具有监控功能,包含基础监控、应用/服务性能监控、日志监控、业务监控等。在应用监控中,UAV能够根据应用实例画像;其中应用实例组件能够对日志、服务、客户端等进行画像;基于客户端的画像又分为Http、Dubbo、MQ、Kafka、JDBC、Redis、MongoDB等等。数据结构

1、背景框架

做为一个工做多年的程序员或运维人员,相信你必定遇到过如下状况:运维

· 场景一:系统出现异常状况,运维人员没能在第一时间发现,反而是业务方在使用过程当中反馈系统崩溃、页面点不开。查看系统日志,发现一直在报链接数据库异常;性能

· 场景二:新功能上线稳定运行一段时间后,用户反馈页面响应愈来愈慢,打开一个页面要等很久。排查问题,发现是一个慢SQL影响了整个功能的体验。优化

为此,UAVStack开发了数据库监控功能。最初,数据库监控功能只是对数据源、数据库链接池进行了指标采集,经过客户端画像能够查看实时的数据库链接池信息以及操做计数。最近UAVStack又解锁了一项新功能——慢SQL监控,使数据库监控功能更加完善。代理

今天小编就向你们介绍一下数据库监控的具体实现。文章中出现的如下关键字所有用简称代替:

· 中间件加强框架:英文MonitorFramework,简称MOF

· 健康管理服务:英文HealthManager,简称HM

· 监控代理程序:英文MonitorAgent,简称MA

2、关键技术&UAV自研框架

· MOF Agent注入机制:MOF Agent的注入机制以Java agent以及Javaassit技术做为基础支撑。Java agent负责拦截和转换字节码流,转换过程当中使用Javaassist进行解析和修改,在应用服务器生命周期的关键位置注入切点,为MOF框架初始化、应用的画像信息和实时监控数据信息捕获提供基础。

· InterceptFramework框架:在应用启动的特定生命周期内改写字节码,植入特定的逻辑处理代码,即画像数据采集,采集的数据包含服务画像以及客户端画像;客户端画像包含Http、Dubbo、MQ、Kafka、JDBC、Redis、MongoDB等常见的开源组件,系统中调用的第三方服务都会被列为是客户端的对象,好比系统中调用了第三方系统的接口都属于客户端的范畴。

· CaptureFramework框架:经过InterceptFramework框架在特定的生命周期改写字节码植入特定的逻辑代码,在植入的逻辑代码中能够经过CaptureFramework画像的Monitor捕获体系的能力采集数据以及数据存储。具体实现为采用doCapture来实如今特定的捕获点执行抓取数据行为,采用doPreStore来实如今存储数据结构以前的一些捕获动做,对抓取的数据进行特殊数据的处理,获取处处理完成后的数据再经过UAVServer调用具体的Supporter,最后实现数据落地。

3、组成部分

慢SQL监控的实现分为四个组成部分:

· 慢SQL的动态启停:慢SQL的监控启/停依赖于MOF的Global Filter机制。在应用初始化时,UAV对应用的Filter进行了改写,提供了向MOF下发指令的接口。只要调用接口传入规定的参数即可以实现对慢SQL监控的动态启停。UAV系统中并不存在其它服务直接调用MOF的操做,都是经过MA来完成的。你们能够把MA理解为服务请求方与MOF之间的媒介。

· 慢SQL数据采集:依赖InterceptFramework框架在特定的生命周期改写字节码植入特定逻辑,同时采用MOF的CaptureFramework框架进行数据抓取并生成抓取结果。MA会对生成结果的文件进行定时采集并封装成固定的数据结构发送至MQ。

· 数据存储:在HM中建立独立的feature进行数据处理,消费MA推送至MQ中的数据,完成数据清洗再存储至ES。因为数据采集的结果进行了特殊的约定,从MQ拿到的数据并不能直接转换成相应的结果,须要进行相应的解析处理才能进行存储(因为采集的数据中字段较多、可能含有特殊的字符会影响对数据的解析,在生成数据结果时有规则约束才能实现数据的正确解析)。数据库监控的feature还提供了查询、统计慢SQL操做的相关接口。

· 页面展现:操做页面可自主启停数据库监控,设置慢SQL的时间阈值。启停以及时间阈值的设置依赖于MA向MOF发送指令。页面展现的SQL统计、追踪等信息则经过HM的接口获取;

4、功能展现

数据库监控目前已实现的功能有SQL分类统计、数据库链接池监控、慢SQL耗时分布统计、慢SQL统计、慢SQL追踪以及调用链/日志关联功能。

SQL分类统计:

· 数据来源:OpenTSDB(经过画像采集指标)

· 针对插入、删除、更新、查询、批量操做进行分类统计

· 根据时间分布展现数据库的访问状况,根据时间分布展现数据库的访问状况,展现所选时间段的总访问计数(累计值)

· 能够自定义时间条件查询历史数据

数据库链接池监控:

· 数据来源:OpenTSDB(经过画像采集指标)

· 能够查看链接池总链接数、活动链接数、空闲链接数的变化曲线

慢SQL耗时分布统计:

· 数据来源:ES

· 慢SQL统计可根据分类进行展现统计

· 针对慢SQL的耗时分布统计,最多查询100条

· 根据时间分布展现数据库慢SQL的访问状况,展现当前时间点的慢SQL访问时间、SQL、耗时

· 能够根据设置查询历史数据

慢SQL统计:

· 数据来源:ES

· 针对全部类型的SQL

· 根据时间分布展现数据库某时间段的慢SQL统计

· 能够根据设置查询历史数据

慢SQL追踪:

· 数据来源:ES

· 查询条件为:关键字、是否慢SQL追踪、时间范围

· 根据搜索条件查询SQL追踪列表,列表展现内容为:SQL语句、总执行次数、执行总时间、平均执行时间、操做-可查看详情


 

慢SQL追踪-详情查看:

· 数据来源:ES

· 慢SQL详情:点击某一条慢SQL统计可查看详情:包含开始执行时间、执行时长、入参、执行结果、影响条数

慢SQL追踪-调用链关联:

· 应用监控中需开启轻度调用链

· 点击某一行详细的执行时间,能够跳转至调用链页面,查看调用链的详细内容(相关的调用链高亮显示)

慢SQL追踪-日志关联:

· 应用监控中需开启日志归集

· 点击某一行详细的调用链内容的日志关联,可查看相应的日志信息,相关的日志行数高亮显示

5、总结

数据库监控是不容忽视的,好的数据库监控能够帮助优化系统并进行实时预警。经过文中介绍的数据库链接池监控,运维人员能够随时关注数据库链接池的状态,有效防止系统出现链接池活动链接数占满没法链接数据库的状况;而慢SQL监控功能能够动态展现一个系统的SQL状况,帮助优化SQL语句,让系统更稳定。

相关文章
相关标签/搜索