推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Sumslack团队 > SQL审核监控平台的设计与实现

SQL审核监控平台的设计与实现

Sumslack团队 2018-10-18

在我们开发项目中,经常会用到数据库,等项目上线后,针对数据库的日常维护操作经常会碰到需要ops执行SQL的情况,由于SQL操作不慎引发的生产故障层出不穷,比如前段时间的顺丰删库事件,那么我们有必要建立一套SQL审核监控平台,建议一套SQL提交审核机制,避免误删等引起生产重大事故,并将日常对库的SQL操作进行实时监控,是非常有必要的。


本文将为您呈现SQL审核监控平台的设计与实现,这个平台(以下简称SM平台)主要做以下几件事情:


  1. SQL主机录入,并自动将Agent发往目标MySQL数据库,以便进行目标主机数据库以及其他信息的监控;

  2. SQL审核:工单化审核和执行SQL;

  3. 数据库备份与恢复;

  4. SQL监控:监控目标MySQL执行的所有SQL语句,包含DDL和DML;

  5. 慢SQL监控:超过指定秒数的SQL语句监控;


以下是系统设计架构图:



ü SMAgent通过SM平台的SSH,将SMAgent scp到远程主机,并解压,远程执行SMAgent主程序(主机必须安装JDK8);

ü SMAgent执行后,将相应的MySQL连接情况,主机OS信息收集等通过Netty通道上报给SM平台;


平台的SMAgent组件是通过Sumslack MySQL审核监控平台下发的,用户无需手工操作,远程启动SMAgent后,该主机上的MySQL实例就被纳入到SM审核监控平台了,此时我们会自动启动一个canal client线程,监听该MySQL实例执行的所有SQL语句发往SM平台;

SQL节点录入

SM平台包含的SMAgent程序通过SSH分发到目标MySQL服务器,当SM平台与SMAgent建立长连接后,即表示目标MySQL成功接入SM平台;

  • 节点描述;

  • SSH信息:对应服务的root权限账号的用户名和密码,或执行sudo不需要输入密码的账号;

  • Agent安装目录;

SQL节点录入成功后,会出现在平台的主机列表中,并标记相应的状态信息。

SQL审核与执行

任何SQL的执行都需在该平台上进行,SQL执行系统会生产一张工单,该工单发往审核人员(邮件提醒)进行人工审核,审核通过后下发SQLSMAgent执行,暂不支持回滚,不排除未来在SMAgent加入回滚操作,这样更为便捷,SQL的审核只是纯粹的一个简单工作流,但对SQL的误操作能起到很好的保护作用,一般SQL经过两个开发人员和leader的审核可有效降低SQL的误操作;

SMAgent的实现

基于Netty的一个小程序,主要用于建立与目标主机MySQL的连接以及目标主机OS相关信息采集,Agent作为Netty的客户端程序,与SM平台建立双向的高可用性的数据网络通信,上报MySQL健康状态数据,OS信息等,SM平台也可下发指令到SMAgent,比如执行SQL,备份恢复数据库等,SMAgent是一个轻量级的Netty客户端程序,基于JDK8+

SQL语句监控

利用canal server 1.1.x的最新版,将需要监控的mysql节点加入到canal server中,实现每个数据库的自动SQL监控(根据binlog日志),在SM平台中,每个MySQL节点都会启动一个独立线程以便侦听来自于该MySQL节点SQL语句执行情况监控,同时,在SM平台中用户也可以自定义过滤规则来进行特定表的监控或WebHook通知;
其中需依赖以下中间件:

  • 高性能MQ:Kafka

  • ZK

  • 监控canal server:Prometheus,可配合Grafana做监控图表展现(可选);

SQL慢查询监控的实现

通过配置MySQL的long_query_timeslow_query_log_fileslow_query_log,利用SMAgent监控slow_query_log_file的所在log文件,解析而得具体查询慢的SQL语句,并将该SQL语句发往SM平台;
慢查询日志文件中的信息如下(以下配置的超过2s的SQL执行语句)



感谢阅读!


你可以继续阅读: |  |  |  |  |  |  | 





版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《SQL审核监控平台的设计与实现》的版权归原作者「Sumslack团队」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Sumslack团队微信公众号

Sumslack团队微信公众号:sumscope_nb_it

Sumslack团队

手机扫描上方二维码即可关注Sumslack团队微信公众号

Sumslack团队最新文章

精品公众号随机推荐