Archery:数据库工单平台
需求
在生产环境你是否或多或少遇到过以下问题:
应用突发访问数据库慢,因排查时间过长,导致业务投诉;
数据库某条sql执行时间超长;
数据库被研发误删数据表或某条数据;
数据库访问混乱,研发、DBA、测试、运维权限混乱;
......
无论何时只要出现过以上问题,这就可能意味着数据库规范化管理要提上日程了,因此今天就要轮到我们的主角隆重登场了。
Archery是archer的分支项目,定位于SQL审核查询平台,旨在提升DBA的工作效率,支持多数据库的SQL上线和查询,同时支持丰富的MySQL运维功能,所有功能都兼容手机端操作。
名字论:Archery官方将自己定位为SQL审核查询平台,其实我觉得这个名字其实是有点低调的,而我认为称其为“数据库工单平台”则更为恰当。
DBA可以将Archery接入LDAP,以工单的形式审核各部门研发提出的查询、执行命令,还可配合自动审批、SQL优化等其他形式来进行合规管理。
功能清单
查询 | 审核 | 执行 | 备份 | 数据字典 | 慢日志 | 会话管理 | 账号管理 | 参数管理 | 数据归档 | |
---|---|---|---|---|---|---|---|---|---|---|
MySQL | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
MsSQL | √ | × | √ | × | × | × | × | × | × | × |
Redis | √ | × | √ | × | × | × | × | × | × | × |
PgSQL | √ | × | √ | × | × | × | × | × | × | × |
Oracle | √ | × | √ | ✔️ | × | × | × | × | × | × |
MongDB | √ | √ | √ | × | × | × | × | × | × | × |
运行环境
python3.4及以上
django1.8.17
mysql : 5.6及以上
linux : 64位linux操作系统
功能依赖组件
可视化 | pyecharts |
MySQL审核/执行/备份 | goInception|inception |
MySQL索引优化 | SQLAdvisor |
SQL优化/压缩 | SOAR |
Binlog2SQL | binlog2sql |
表结构同步 | SchemaSync |
慢日志解析展示 | pt-query-digest|aquila_v2 |
大表DDL | gh-ost|pt-online-schema-change |
MyBatis | mybatis-mapper2sql |
RDS管理 | aliyun-openapi-python-sdk |
数据加密 | django-mirage-field |
功能说明
1.SQL审核
(1)MySQL实例
基于Inception/goInception实现,集成审核、执行、备份
(2)非MySQL实例
支持提交和执行工单,依托工作流实现流程化管理
(3)审核执行分离
审批和执行可以分配给不同的用户进行操作
(4)SQL工单自动审批、高危语句驳回
支持正则判断工单是否需要人工审批,开启自动审批后,不在正则范围内的SQL语句无需审批,系统自动审核 自主控制SQL是否自动驳回,可自主配置对inception审核驳回的场景,支持警告驳回和异常驳回
(5)快速上线其他实例
在工单详情可快速提交相同SQL内容到其他实例,可适用于test>beta>ga等多套环境维护的需求
(6)定时执行
工单审核通过后可以选择定时执行或者立即执行
2.SQL查询
(1)多类型数据库支持
MySQL 表级授权、脱敏查询 MsSQL 库级授权、脱敏查询 Redis 库级授权 PostgreSQL 库级授权、脱敏查询 Oracle 库级授权、脱敏查询 MongoDB 库级授权 Phoenix 库级授权 ODPS 库级授权 ClickHouse 库级授权
(2)授权管理
工作流控制SQL查询授权,支持库表级别的权限限制,以及授权时间,查询结果集的限制 支持部分语句的动态查询脱敏(有限的功能) 支持前台管理用户权限,对用户权限进行修改和维护 支持查询导出、查询日志审计
(3)页面体验
库、表、字段补全提示 多结果级展示 表结构查看
3.SQL优化
(1)慢日志管理
基于PT收集慢日志,需要单独部署
(2)SQL语句优化
基于SQLAdvisor|SOAR|SQLTuning的全方位优化建议
4.实例管理
(1)会话管理
支持查看和批量终止会话 支持查看事物、锁信息
(2)数据库管理
管理实例数据库,支持添加
(3)账号管理
管理实例账号,支持增加、授权、删除
(4)参数配置
可修改实例动态参数并记录修改历史
5.工具插件
PTArchiver
支持使用pt-archiver归档MySQL数据,支持直接添加配置和由用户申请归档
Binlog2SQL
将Binlog2SQL模块可视化,从MySQL binlog解析出你要的SQL
My2SQL
My2SQL可视化,更高效地解析MySQL binlog,快速回滚
SchemaSync
对比不同数据库的Schema信息,输出修改语句和回滚语句,SchemaSync不仅限于表结构,它可以处理的对象还有:视图、事件、存储过程、函数、触发器、外键
6.资源(项目)组
支持自定义资源(项目)组,管理资源组和关联对象,资源组成员之间审批流程、实例配置、消息通知等资源隔离
7.权限(角色)组
权限可以分配给用户,也可以分配给权限组,支持对大多数操作进行限制,独立控制用户的审核、执行等操作权限
8.工作流
工作流审批流程支持多层级多用户,并且隔离资源组,不同资源组不同的工单类型可以配置不同的审批层级
9.配置管理
系统配置项、工作流审批流程可在前端页面动态修改,无需重启服务实时生效
10.消息通知
支持钉钉、企业微信、邮件通知,及时知晓工单状态变化
11.可视化
使用pyecharts实现工单、查询维度的可视化统计
可参考以下功能导图:
总结
其实工具的选型只是数据库规范化管理工作的一部分,更重要是原始数据的收集整理与录入、平台使用规范、研发人员的宣贯等等。正所谓“万事俱备,只欠东风”,剩下的在等待和希望中会慢慢到来。
Python+Celery实现基于Fastnetmon异常流量清洗
札记:对的那条路,往往不是最好走的!