UAVStack的慢SQL数据库监控功能及其实现
转载自:UAVStack智能运维
来源:宜信技术学院
技术沙龙001期|AI中台:一种敏捷的智能业务支持方案|宜信技术沙龙 3月28日晚8点线上直播,点击报名
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语句,让系统更稳定。
转载于:https://juejin.im/post/5c985c57f265da60f85fff1a
UAVStack的慢SQL数据库监控功能及其实现相关推荐
- Druid连接池开启数据库监控功能
web程序普遍的都会涉及到数据库的操作,为了提高系统的性能,在数据库操作上,几乎千篇一律的使用了数据库连接池技术,数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀 ...
- sql数据库监控语句
--查找被阻塞进程 Select * from master..sysprocesses where dbid=9 and blocked > 0--查找阻塞头进程 select * from ...
- azure云数据库_使用Azure SQL数据库构建ASP.NET应用
azure云数据库 In this article, you will learn about Azure SQL Database and its uses. Then the article sp ...
- 全自动备份vss和sql数据库(含源码下载)
前言 visual source safe 里有代码,sql server 里有数据,这就是项目的全部. 拥有他们就拥有了全部,所以这些东西的安全实在是重要. 本文以批处理的方式,实现了全自动备份vs ...
- MySQL监控,MySQL数据库监控软件简介
MySQL监控,MySQL数据库监控软件 Mysql数据库监控软件(简称:MySQL数据库监控或MySQL监控)是对Mysql运行时性能.连接数.线程.查询速度.吞吐量.锁等MySQL运行状态进行全面 ...
- mysql数据库,mysql数据库监控介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...
- Druid学习笔记(一) - 监控功能的开启
现在基于springBoot的项目的数据库连接池一般都是采用阿里提供开源的druid,作为开发人员来说,学习druid就是基础,毕竟天天都在用.如果还不懂druid,那么要是被别人问到了.那就尬尴了, ...
- mysql数据库监控
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...
- SQLSERVER监控复制并使用数据库邮件功能发告警邮件
原文:SQLSERVER监控复制并使用数据库邮件功能发告警邮件 SQLSERVER监控复制并使用数据库邮件功能发告警邮件 最近熬出病来了,都说IT行业伤不起,不说了,说回今天的正题 正题 上个月月底的 ...
最新文章
- AMS重要的数据结构解析(二):TaskRecord
- 本科生学习fpga,dsp,嵌入式操作系统哪个好
- php js 图片旋转,jQuery实现可以控制图片旋转角度效果
- Oracle 创建表空间与用户
- OpenCV尽量不要打开CUDA参数编译,否则太慢了
- 【图像隐写】基于matlab GUI DWT与SVD数字水印 【含Matlab源码 253期】
- VOC 2007数据集结构
- PTA-1016——Phone Bills
- 牛客练习赛53 (E 老瞎眼 pk 小鲜肉) 线段树+离线
- 关于web前端大作业的HTML网页设计——我的班级网页HTML+CSS+JavaScript
- 裸写http body服务报body Unexpected end of multipart data的解决办法
- 计算机发展历程结绳记事,从结绳记事到竹简纸张,从计算机存储到光盘刻录,人类从未停止______...
- Docker之API操作
- 在线测试视频地址(flv,m3u8,rtsp)
- JS sort函数(按照首字母字符排序)
- Combining Compositional Models and Deep Networks For Robust Object Classification under Occlusion阅读
- 威纶通触摸屏报错问题汇总
- 东北大学20级计算机C语言课设-航空订票系统
- STM32学习心得:SPI-Flash-W25Q16DV
- BGP路由器协议排错教程:BGP 基本配置
热门文章
- centos iptables 防火墙配置
- 一个hadoop hdfs put 文件失败的小情况
- 在Linux中安装SEP Client
- asp.net动态换肤
- 可转债数据一览表集思录_学习先进的可转债投资策略
- bartender的安全策略不允许指定的用户执行此操作_MongoDB用户和角色解释系列(上)...
- pythonopencv算法_python opencv之分水岭算法示例
- C语言数据类型大学霸IT达人
- Kali Linux常用服务配置教程获取IP地址
- XamarinAndroid组件教程设置动画的时长参数