【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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:22579

评论

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

2022最新Java面试突击手册,1000道面试题+优质面经

Java全栈架构师

Java 程序员 面试 算法 计算机网络

wrk压力测试工具介绍

乌龟哥哥

6月月更

Zadig 面向开发者的自测联调子环境技术方案详解

Zadig

DevOps Service Mesh CI/CD 测试环境治理

如何设计业务高性能高可用计算架构 - 作业

阿拉阿拉幽幽

Mac中Git如何忽略.DS_Store文件

坚果

git git 规范 6月月更

Java Core「19」使用 Java IO API 创建 C/S 程序的方法

Samson

学习笔记 Java core 6月月更

基于管线的混合渲染

Finovy Cloud

gpu 渲染器 GPU服务器 显卡、gpu

构建实战化防御体系之立体防渗透

穿过生命散发芬芳

6月月更 攻防演练

这个简单的小功能,半年为我们产研团队省下213个小时

阿里云云效

云计算 阿里云 云原生 产品开发 研发

终于有人用7部分讲明白了Spring Security OAuth2.0认证授权全过程

Java全栈架构师

Java spring 程序员 面试 springsecurity

TDengine ×英特尔®边缘洞见软件包 加速传统行业的数字化转型

TDengine

数据库 tdengine 时序数据库

奇怪,为什么ArrayList初始化容量大小为10?HashMap的初始化容量为16?

Java全栈架构师

Java 源码 程序员 面试 程序人生

十大靠谱“计算机视觉数据集”榜单

澳鹏Appen

人工智能 机器学习 计算机视觉 数据集 训练数据

华为云的AI深潜之旅

脑极体

Zadig 构建究竟何强大?一起来实践

Zadig

gitlab 云原生 jenkins Zadig

Curve 替换 Ceph 在网易云音乐的实践

网易数帆

分布式 云原生 存储 Ceph curve

IDC:阿里云获2021中国数据治理平台市场份额第一

阿里云大数据AI技术

数据挖掘 大数据 数据采集

如何高效优雅地管理接口文档

Liam

测试 开发工具 API接口管理 API文档 免费API接口

OUT了吧,Kafka能实现消息延时了

华为云开发者联盟

云计算 开发

电商秒杀系统架构设计

哈喽

「架构实战营」

安全 创新 实践|海泰方圆受邀参加“数字时代的网信创新与价值共创”技术交流研讨会

电子信息发烧客

软件测试的三个沟通技巧

FunTester

Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路

阿里巴巴终端技术

android App target

OneFlow源码解析:算子签名的自动推断

OneFlow

源码解析 算子 Relu

微博评论的高性能高可用计算架构方案

joak

为什么要使用 Rust 语言?

面向加薪学习

rust

应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进(附 PPT 下载)

SelectDB

数据库 flink OLAP Doris 数仓建设

Zadig 正式推出 VS Code 插件,本地开发更高效

Zadig

vscode 插件 热部署 本地化开发 Zadig

直播预告|大咖共话:汽车行业数字化转型趋势与对策

3DCAT实时渲染

提升可观测性 - 业务指标监控实践

bilibili游戏技术

直播预告|SQL也能玩转工业级机器学习?MLOps meetup V3带你一探究竟!

星策开源社区

人工智能 机器学习 sql 特征平台 MLOps

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