写点什么

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

  • 2020-02-11
  • 本文字数:2578 字

    阅读完需:约 8 分钟

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

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


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/228


2020-02-11 20:22747

评论

发布
暂无评论
发现更多内容

如何用建木CI构建前端E2E质量自查

Jianmu

DevOps 前端 持续集成 代码质量 自动化测试

分分钟快速定制您的专属个性化软件应用——BizTool自动化工具简介

BizFree

软件开发 快速开发 低代码开发 个性化 应用开发

5S软件就是将软件应用全维度简单化的软件系统

BizFree

k8s 敏捷开发 软件架构 高性能 快捷调试

易周金融分析 | 互联网系小贷平台密集增资;上半年银行理财子公司综合评价指数发布

易观分析

金融 分析 易周金融

STM32的内存管理相关(内存架构,内存管理,map文件分析)

矜辰所致

内存 stm32 Flash 8月月更

RT-Thread记录(三、RT-Thread 线程操作函数及线程管理与FreeRTOS的比较)

矜辰所致

RTT RT-Thread 8月月更 线程操作

看到这个应用上下线方式,不禁感叹:优雅,太优雅了!

华为云开发者联盟

云计算 开发 CCE

Spring(五、注解开发)

开源 8月月更

C++面向对象友元,全局函数、类、成员函数做友元

CtrlX

8月月更

一文读懂配置管理(CM)

SEAL安全

企业安全 企业it安全 代码安全

Dapr在Java中的实践 之 环境准备

万猫学社

微服务 dapr Sidecar

开源一夏 | 使用 JavaScript 和 CSS 做一个图片转 PDF 的转换器

海拥(haiyong.site)

JavaScript 开源 前端 8月月更

游戏开发常遇到数据一致性BUG,怎么解?

华为云开发者联盟

数据库 后端 游戏开发

在SAP分析云里根据业务数据绘制词云(Word Cloud)

汪子熙

SaaS SAP 词云 8月月更 word-cloud

写给 Java 程序员的前端 Promise 教程

江南一点雨

Java spring 前端 springboot Promise

转转商品系统高并发实战(数据篇)

转转技术团队

分布式 高并发

Dapr在Java中的实践 之 服务调用

万猫学社

微服务 dapr Sidecar

Java 在Word中合并单元格时删除重复值

在下毛毛雨

java; 合并单元格 删除重复值

业务缓存之体系化设计与开发

Qunar技术沙龙

系统开发

海外邮件发送指南(一)

极光JIGUANG

消息推送 邮件 SendCloud

结合“xPlus”探讨软件架构的创新与变革

BizFree

敏捷开发 软件架构 数字化 信息化 软件定制

Dapr在Java中的实践 之 状态管理

万猫学社

Java 微服务 dapr Sidecar

PWA 应用 Service Worker 缓存的一些可选策略和使用场景

汪子熙

typescript 前端开发 angular Service Worker 8月月更

使用类似搭积木的低代码开发方式进行 SAP API 开发

汪子熙

低代码 云平台 SAP 8月月更 low-code

K8S之Flannel的vxlan网络模式初步源码解析

k8s flannel 签约计划第三季

Kubernetes资源编排系列之四: CRD+Operator篇

阿里云大数据AI技术

大数据 运维

自动驾驶中的SLAM

博文视点Broadview

鲲鹏开发者创享日2022:鲲鹏全栈创新 与开发者共建数字湖南

科技热闻

云原生系列五:Kafka 集群数据迁移基于Kubernetes的内部

叶秋学长

kafka 开源 Kubernetes 8月月更

一名合格的程序员是如何优雅地解决线上问题的?

程序员小毕

Java 程序员 架构 程序人生 后端

以技术御风险,护航云原生 | 同创永益 X 博云举办产品联合发布会

BoCloud博云

云计算 容器 云原生

UAVStack的慢SQL数据库监控功能及其实现_数据库_王林林_InfoQ精选文章