作者:王林林

转载自:UAVStack智能运维

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


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

一、背景

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

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

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

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

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

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

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

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

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

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

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

· 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语句,让系统更稳定。

转载于:https://juejin.im/post/5c985c57f265da60f85fff1a

UAVStack的慢SQL数据库监控功能及其实现相关推荐

  1. Druid连接池开启数据库监控功能

    web程序普遍的都会涉及到数据库的操作,为了提高系统的性能,在数据库操作上,几乎千篇一律的使用了数据库连接池技术,数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀 ...

  2. sql数据库监控语句

    --查找被阻塞进程 Select * from master..sysprocesses where dbid=9 and blocked > 0--查找阻塞头进程 select * from ...

  3. azure云数据库_使用Azure SQL数据库构建ASP.NET应用

    azure云数据库 In this article, you will learn about Azure SQL Database and its uses. Then the article sp ...

  4. 全自动备份vss和sql数据库(含源码下载)

    前言 visual source safe 里有代码,sql server 里有数据,这就是项目的全部. 拥有他们就拥有了全部,所以这些东西的安全实在是重要. 本文以批处理的方式,实现了全自动备份vs ...

  5. MySQL监控,MySQL数据库监控软件简介

    MySQL监控,MySQL数据库监控软件 Mysql数据库监控软件(简称:MySQL数据库监控或MySQL监控)是对Mysql运行时性能.连接数.线程.查询速度.吞吐量.锁等MySQL运行状态进行全面 ...

  6. mysql数据库,mysql数据库监控介绍

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...

  7. Druid学习笔记(一) - 监控功能的开启

    现在基于springBoot的项目的数据库连接池一般都是采用阿里提供开源的druid,作为开发人员来说,学习druid就是基础,毕竟天天都在用.如果还不懂druid,那么要是被别人问到了.那就尬尴了, ...

  8. mysql数据库监控

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...

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

    原文:SQLSERVER监控复制并使用数据库邮件功能发告警邮件 SQLSERVER监控复制并使用数据库邮件功能发告警邮件 最近熬出病来了,都说IT行业伤不起,不说了,说回今天的正题 正题 上个月月底的 ...

最新文章

  1. AMS重要的数据结构解析(二):TaskRecord
  2. 本科生学习fpga,dsp,嵌入式操作系统哪个好
  3. php js 图片旋转,jQuery实现可以控制图片旋转角度效果
  4. Oracle 创建表空间与用户
  5. OpenCV尽量不要打开CUDA参数编译,否则太慢了
  6. 【图像隐写】基于matlab GUI DWT与SVD数字水印 【含Matlab源码 253期】
  7. VOC 2007数据集结构
  8. PTA-1016——Phone Bills
  9. 牛客练习赛53 (E 老瞎眼 pk 小鲜肉) 线段树+离线
  10. 关于web前端大作业的HTML网页设计——我的班级网页HTML+CSS+JavaScript
  11. 裸写http body服务报body Unexpected end of multipart data的解决办法
  12. 计算机发展历程结绳记事,从结绳记事到竹简纸张,从计算机存储到光盘刻录,人类从未停止______...
  13. Docker之API操作
  14. 在线测试视频地址(flv,m3u8,rtsp)
  15. JS sort函数(按照首字母字符排序)
  16. Combining Compositional Models and Deep Networks For Robust Object Classification under Occlusion阅读
  17. 威纶通触摸屏报错问题汇总
  18. 东北大学20级计算机C语言课设-航空订票系统
  19. STM32学习心得:SPI-Flash-W25Q16DV
  20. BGP路由器协议排错教程:BGP 基本配置

热门文章

  1. centos iptables 防火墙配置
  2. 一个hadoop hdfs put 文件失败的小情况
  3. 在Linux中安装SEP Client
  4. asp.net动态换肤
  5. 可转债数据一览表集思录_学习先进的可转债投资策略
  6. bartender的安全策略不允许指定的用户执行此操作_MongoDB用户和角色解释系列(上)...
  7. pythonopencv算法_python opencv之分水岭算法示例
  8. C语言数据类型大学霸IT达人
  9. Kali Linux常用服务配置教程获取IP地址
  10. XamarinAndroid组件教程设置动画的时长参数