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

一、背景

作为一个工作多年的程序员或运维人员,相信你一定遇到过以下情况:

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

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

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

今天小编就向大家介绍一下数据库监控的具体实现。文章中出现的以下关键字全部用简称代替:

  • 中间件增强框架:英文MonitorFramework,简称MOF

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

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

二、关键技术&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,最后实现数据落地。

三、组成部分

慢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的接口获取。

四、功能展示

数据库监控目前已实现的功能有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追踪-日志关联:

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

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

五、总结

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

作者:王林林

原文发布于UAVStack智能运维

来源:宜信技术学院

UAVStack的慢SQL数据库监控功能及其实现的更多相关文章

  1. Spring Boot开启Druid数据库监控功能

    Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容的数据库,包括Oracle.MySQL.Derby.PostgreSQL.SQL Server.H2等.D ...

  2. 通过白码SQL数据库对接功能改进原系统

    前言: 之前提到过之所以要使用数据库对接功能,就是因为原有系统上有些功能存在不完善甚至不好用的情况,需要二次开发来优化业务流程或是直接用白码用户端上的通用功能.对接了之后就不需要再写代码来搭建或者优化 ...

  3. sql数据库监控语句

    --查找被阻塞进程 --查找阻塞头进程 and exists ( from master..sysprocesses where blocked =p.spid) --查找等待时间长的进程 order ...

  4. SQLSERVER监控复制并使用数据库邮件功能发告警邮件

    SQLSERVER监控复制并使用数据库邮件功能发告警邮件 最近熬出病来了,都说IT行业伤不起,不说了,说回今天的正题 正题 上个月月底的时候因为要搬迁机房,需要将一个数据信息数据库先搬到我们的机房,然 ...

  5. SQL Server2014 SP2新增的数据库克隆功能

    SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建测试数据库 create database testtest use testtest go --创建表 )) --插入数 ...

  6. 6. SQL Server数据库监控 - 如何告警

    原文:6. SQL Server数据库监控 - 如何告警 常用的告警方式大致有:短信.邮件.应用程序 (beep提示,图标提示,升窗提示等),可是不能一直坐在电脑前看着应用程序,或者用脚本部署监控,根 ...

  7. 腾讯云数据库团队:SQL Server 数据加密功能解析

    数据加密是数据库被破解.物理介质被盗.备份被窃取的最后一道防线:数据加密,一方面解决数据被窃取安全问题,另一方面有关法律要求强制加密数据:SQL Server 的数据加密相较于其他数据库,功能相对完善 ...

  8. 数据库SQL Server 2016“功能选择”详细说明及精简安装选择

    前言 在平时大家安装数据库的时候,一般默认功能选择都会选择全选.但是前两天公司同事问我:"那么多功能为什么都能用到嘛?"顿时,我思考了一下确实没有详细了解每个功能的详细作用,于是花 ...

  9. SQL Server 监控系列(文章索引)

    一.前言(Introduction) SQL Server监控在很多时候可以帮助我们了解数据库做了些什么,比如谁谁在什么时候修改了表结构,谁谁在删除了某个对象,当这些事情发生了,老板在后面追着说这是谁 ...

随机推荐

  1. ASP .NET Model

    Model是全局变量,一个页面一个 前台 @ModelWebApplication1.Models.Movie; @{ ViewBag.Title = "ModelTest"; } ...

  2. Expression Blend实例动画-大坝水位升高演示

    原文:Expression Blend实例动画-大坝水位升高演示 Expression Blend是个很强大的东西,用它可以完成很多不好做的动画效果. 动画的主要元素: 时间线(Timeline) : ...

  3. php判断是否是移动设备

    function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) { ...

  4. xadmin下设置“use_bootswatch = True”无效解决方法

    from xadmin import viewsimport xadmin class BaseSetting(object): enable_themes=True use_bootswatch=T ...

  5. Dynamic proxy (good-原创)

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...

  6. C#如何使用PythonTuple类型

    示例代码: new PythonTuple(new[] { 1, 2, 3 }); PythonTuple myTuple = PythonOps.MakeTuple(new object[] { 1 ...

  7. 在SYSTEM权限下以当前用户权限运行程序

    http://download.csdn.net/download/lai444132348/9730266 using System; using System.Runtime.InteropSer ...

  8. Qt在Windows上的调试器安装与配置

    如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...

  9. 遗漏的SQL语句

    一.简单查询 1.限制返回行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之 ...

  10. SQL基础复习2

    一.视图 1.创建视图      创建视图后加 WITH CHECK OPTION 2.视图查询 数据库系统的处理方法: 视图消解法(View Resolution) 步骤: 进行有效性检查-> ...