Archer基于inception的自动化SQL操作平台
项目地址:https://github.com/jly8866/archer
基于inception的自动化SQL操作平台,支持工单、审核、定时任务、邮件、OSC等功能,还可配置MySQL查询、慢查询管理、会话管理等。
开发语言和推荐环境
python3.4及以上
django1.8.17
mysql : 5.6及以上
linux : 64位linux操作系统均可
主要功能
自动审核
发起SQL上线,工单提交,由inception自动审核,审核通过后需要由审核人进行人工审核
人工审核
inception自动审核通过的工单,由其他研发工程师或研发经理来审核,DBA操作执行SQL
为什么要有人工审核?
这是遵循运维领域线上操作的流程意识,一个工程师要进行线上数据库SQL更新,最好由另外一个工程师来把关
很多时候DBA并不知道SQL的业务含义,所以人工审核最好由其他研发工程师或研发经理来审核. 这是archer的设计理念
回滚数据展示
工单内可展示回滚语句,支持一键提交回滚工单
定时执行SQL
审核通过的工单可由DBA选择定时执行,执行前可修改执行时间,可随时终止
pt-osc执行
支持pt-osc执行进度展示,并且可以点击中止pt-osc进程
MySQL查询
库、表、关键字自动补全
查询结果集限制、查询结果导出、表结构展示、多结果集展示
MySQL查询权限管理
基于inception解析查询语句,查询权限支持限制到表级
查询权限申请、审核和管理,支持审核流程配置,多级审核
MySQL查询动态脱敏
基于inception解析查询语句,配合脱敏字段配置、脱敏规则(正则表达式)实现敏感数据动态脱敏
慢日志管理
基于percona-toolkit的pt_query_digest分析和存储慢日志,并在web端展现
邮件通知
可配置邮件提醒,对上线申请、权限申请、审核结果等进行通知
对异常登录进行通知
设计规范
合理的数据库设计和规范很有必要,尤其是MySQL数据库,内核没有oracle、db2、SQL Server等数据库这么强大,需要合理设计,扬长避短。互联网业界有成熟的MySQL设计规范,特此撰写如下。请读者在公司上线使用archer系统之前由专业DBA给所有后端开发人员培训一下此规范,做到知其然且知其所以然。
下载链接 https://github.com/jly8866/archer/blob/master/src/docs/mysql_db_design_guide.md
主要配置文件
archer/archer/settings.py
采取docker部署
docker镜像,参考wiki
inception镜像: https://dev.aliyun.com/detail.html?spm=5176.1972343.2.12.7b475aaaLiCfMf&repoId=142093
archer镜像: https://dev.aliyun.com/detail.html?spm=5176.1972343.2.38.XtXtLh&repoId=142147
docker镜像制作感谢@小圈圈 提供
手动安装步骤
环境准备
克隆代码到本地或者下载zip包
git clone https://github.com/jly8866/archer.git
安装inception
项目地址
安装python3,版本号>=3.4(由于需要修改官方模块,请使用virtualenv或venv等单独隔离环境!)
pip3 install virtualenv
virtualenv venv4archer –python=python3.4
安装所需相关模块
source venv4archer/bin/activate
pip3 install -r requirements.txt
pymysql模块兼容inception版本信息
使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/对应文件
启动前准备
创建archer本身的数据库表
修改archer/archer/settings.py所有的地址信息,包括DATABASES和INCEPTION_XXX部分
通过model创建archer本身的数据库表,如果是现有版本升级请使用src/init_sql内的变更脚本变更数据库
原v1.1.1分支请使用v1.1.1->v2.0.sql变更
原master分支请使用master->v2.0.sql变更
全新安装请使用如下方式初始化
python3 manage.py makemigrations sql
python3 manage.py migrate
创建admin系统root用户(该用户可以登录django admin来管理model)
python3 manage.py createsuperuser
启动,有两种方式
(1)用django内置runserver启动服务,建议不要在生产环境使用
bash debug.sh
(2)用gunicorn+nginx启动服务
安装模块pip3 install gunicorn==19.7.1
nginx配置示例
server{
listen 9123; #监听的端口
server_name archer;
proxy_read_timeout 600s; #超时时间与gunicorn超时时间设置一致,主要用于在线查询
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host:9123; #解决重定向404的问题
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /archer/static; #此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
启动 bash startup.sh
正式访问
使用上面创建的管理员账号登录http://X.X.X.X:port/login/
其他功能集成
在线查询
settings中QUERY改为True
到【后台数据管理】-【从库地址配置】页面添加从库信息
到【后台数据管理】-【工作流配置】页面配置审核流程
用户申请权限、审核通过后即可进行在线查询
如需要使用动态脱敏,请将settings中DATA_MASKING_ON_OFF改为True,并且到【后台数据管理】-【脱敏配置】页面配置脱敏规则和字段
慢日志管理
settings中SLOWQUERY改为True
安装percona-toolkit(版本>3.0),以centos为例
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum -y install percona-toolkit.x86_64
使用src/script/mysql_slow_query_review.sql创建慢日志收集表到archer数据库
将src/script/analysis_slow_query.sh部署到各个监控机器,注意修改脚本里面的 hostname=”${mysql_host}:${mysql_port}”与archer主库配置信息一致,否则将无法筛选到相关记录
SQLAdvisor优化工具
安装SQLAdvisor,项目地址
修改配置文件SQLADVISOR为程序路径,路径需要完整,如’/opt/SQLAdvisor/sqladvisor/sqladvisor’
阿里云rds管理
修改配置文件ALIYUN_RDS_MANAGE=True
安装模块
pip3 install aliyun-python-sdk-core==2.3.5
pip3 install aliyun-python-sdk-core-v3==2.5.3
pip3 install aliyun-python-sdk-rds==2.1.1
在【后台数据管理】-【阿里云认证信息】页面,添加阿里云账号的accesskey信息,重新启动服务
在【后台数据管理】-【阿里云rds配置】页面,添加实例信息,即可实现对阿里云rds的进程管理、慢日志管理
admin后台加固,防暴力破解
patch目录下,名称为django_1.8.17_admin_secure_archer.patch
使用命令
patch python/site-packages/django/contrib/auth/views.py django_1.8.17_admin_secure_archer.patch
集成ldap
修改配置文件ENABLE_LDAP=True,安装相关模块,可以启用ldap账号登录,以centos为例
yum install openldap-devel
pip install django-auth-ldap==1.3.0
如果使用了ldaps,并且是自签名证书,需要打开settings中AUTH_LDAP_GLOBAL_OPTIONS的注释
settings中以AUTH_LDAP开头的配置,需要根据自己的ldap对应修改