diff --git a/README.md b/README.md index 7d35c55f..f19ccef0 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,46 @@ # archer 基于inception的自动化SQL操作平台,支持工单、审核、定时任务、邮件、OSC等功能,额外可配置功能有MySQL查询、动态脱敏、查询权限管理、慢查询管理、阿里云RDS管理等,页面可自适应小屏设备, +## 2.0更新说明 +### 更新内容 +- 新增 +>增加DBA角色,SQL上线逻辑调整为:工程师提SQL->审核人审核->DBA执行,同时也支持DBA一个角色的审核和执行 +>增加定时执行SQL工单,将审核和执行分离 +>增加SQL在线查询模块,支持查询权限申请、审核、管理,支持查询动态脱敏,保护隐私数据,可配置,默认不展示 +>增加SQL慢日志收集管理模块,可配置,默认不展示 +>增加SQL优化模块,基于SQLadvisor一键优化慢查询,可配置,默认不展示 +>增加阿里云RDS管理模块,管理RDS进程、慢查询、表空间信息,可配置,默认不展示 +>增加工单审核驳回备注,流程沟通更顺畅 +>增加SQL上传功能,提交工单更快速 +>增加全局异常日志捕获,方便定位问题 +>增加Dockerfile信息,自动构建最新docker镜像 +- 优化 +>全局表格样式调整,显著提升显示性能,并且兼容手机等小屏设备 +>工单列表调整,支持工单名称和提交人搜索,列表性能优化 +>工单详情性能优化,解决提交语句过多可能造成服务崩溃的问题 +>图表展示优化,via绝望的生鱼片 +>登录时自动认证管理后台,避免二次登录 +>页面显示用户中文名 +- 修复 +>修复SQL语句执行时间过长造成工单状态持续执行中的问题 +>调整回滚语句为倒序展示,避免提交回滚异常 + +### 升级步骤 +1. 克隆2.0分支代码到本地或者下载zip包 + `git clone -b archer-2.0 https://github.com/jly8866/archer.git` +2. 使用src/init_sql内的变更脚本变更数据库 + v1.1.1分支请使用v1.1.1->v2.0.sql + master分支请使用nowmaster->v2.0.sql +3. 修改相关配置文件,启动 + nginx的static目录配置有调整,具体参考后面的配置 + ### 开发语言和推荐环境 python:3.4及以上 django:1.8.17 mysql : 5.6及以上 linux : 64位linux操作系统均可 -### 主要功能 +## 主要功能 * 自动审核 发起SQL上线,工单提交,由inception自动审核,审核通过后需要由审核人进行人工审核 * 人工审核 @@ -45,27 +78,27 @@ * 发起SQL上线,可配置的邮件提醒审核人进行审核 * 在发起SQL上线前,自助SQL审核,给出建议 -### 设计规范 +## 设计规范 * 合理的数据库设计和规范很有必要,尤其是MySQL数据库,内核没有oracle、db2、SQL Server等数据库这么强大,需要合理设计,扬长避短。互联网业界有成熟的MySQL设计规范,特此撰写如下。请读者在公司上线使用archer系统之前由专业DBA给所有后端开发人员培训一下此规范,做到知其然且知其所以然。 下载链接: https://github.com/jly8866/archer/blob/master/src/docs/mysql_db_design_guide.docx -### 主要配置文件 +## 主要配置文件 * archer/archer/settings.py -### 采取docker部署 +## 采取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镜像制作感谢@小圈圈 提供 -### 一键安装脚本 +## 一键安装脚本 * 可快速安装好archer环境,inception还需自行安装配置 [centos7_install](https://github.com/jly8866/archer/blob/master/src/script/centos7_install.sh) -### 手动安装步骤 +## 手动安装步骤 1. 环境准备: (1)克隆代码到本地或者下载zip包 -`git clone https://github.com/jly8866/archer.git` +`git clone -b archer-2.0 https://github.com/jly8866/archer.git` (2)安装inception,[项目地址](http://mysql-inception.github.io/inception-document/install/) 2. 安装python3,版本号>=3.4:(由于需要修改官方模块,请使用virtualenv或venv等单独隔离环境!) 3. 安装所需相关模块: @@ -75,11 +108,10 @@ 在if int(self.server_version.split('.', 1)[0]) >= 5: 这一行之前加上以下这一句并保存,记得别用tab键用4个空格缩进: self.server_version = '5.6.24-72.2-log' 最后看起来像这样: -![image](https://github.com/jly8866/archer/raw/master/screenshots/pymysql.png) - -或者可以直接使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/对应文件即可 +![image](https://github.com/jly8866/archer/raw/master/screenshots/pymysql.png) +或者直接使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/对应文件即可 -### 启动前准备 +## 启动前准备 1. 创建archer本身的数据库表: (1)修改archer/archer/settings.py所有的地址信息,包括DATABASES和INCEPTION_XXX部分 (2)通过model创建archer本身的数据库表 @@ -131,15 +163,15 @@ self.server_version = '5.6.24-72.2-log' 4. 正式访问: 使用上面创建的管理员账号登录`http://X.X.X.X:port/` -### 其他功能集成 -#### 在线查询&脱敏查询 +## 其他功能集成 +### 在线查询&脱敏查询 1. settings中QUERY改为True -2. 到【后台数据管理】-【从库地址】页面添加从库信息 +2. 到【后台数据管理】-【从库地址配置】页面添加从库信息 3. 到【后台数据管理】-【工作流配置】页面配置审核流程 4. 用户申请权限、审核通过后即可进行在线查询 5. 如需要使用动态脱敏,请将settings中DATA_MASKING_ON_OFF改为True,并且到【后台数据管理】-【脱敏配置】页面配置脱敏规则和字段 -#### 慢日志管理 +### 慢日志管理 1. settings中SLOWQUERY改为True 2. 安装percona-toolkit(版本>3.0),以centos为例 @@ -150,11 +182,11 @@ self.server_version = '5.6.24-72.2-log' 3. 使用src/script/mysql_slow_query_review.sql创建慢日志收集表到archer数据库 4. 将src/script/analysis_slow_query.sh部署到各个监控机器,注意修改脚本里面的 `hostname="${mysql_host}:${mysql_port}" `与archer主库配置信息一致,否则将无法筛选到相关记录 -#### SQLAdvisor优化工具 +### SQLAdvisor优化工具 1. 安装SQLAdvisor,[项目地址](https://github.com/Meituan-Dianping/SQLAdvisor) 2. 修改配置文件SQLADVISOR为程序路径,路径需要完整,如'/opt/SQLAdvisor/sqladvisor/sqladvisor' -#### 阿里云rds管理 +### 阿里云rds管理 1. 修改配置文件ALIYUN_RDS_MANAGE=True 2. 安装模块 @@ -166,7 +198,7 @@ pip3 install aliyun-python-sdk-rds==2.1.1 3. 在【后台数据管理】-【阿里云认证信息】页面,添加阿里云账号的accesskey信息,重新启动服务 4. 在【后台数据管理】-【阿里云rds配置】页面,添加实例信息,即可实现对阿里云rds的进程管理、慢日志管理 -#### admin后台加固,防暴力破解 +### admin后台加固,防暴力破解 1. patch目录下,名称为:django_1.8.17_admin_secure_archer.patch 2. 使用命令: @@ -174,8 +206,8 @@ pip3 install aliyun-python-sdk-rds==2.1.1 patch python/site-packages/django/contrib/auth/views.py django_1.8.17_admin_secure_archer.patch ``` -#### 集成ldap -1. settings中ENABLE_LDAP改为True,安装相关模块,可以启用ldap账号登陆,以centos为例 +### 集成ldap +1. 修改配置文件ENABLE_LDAP=True,安装相关模块,可以启用ldap账号登陆,以centos为例 ``` yum install openldap-devel pip install django-auth-ldap==1.3.0 @@ -183,20 +215,20 @@ pip install django-auth-ldap==1.3.0 2. 如果使用了ldaps,并且是自签名证书,需要打开settings中AUTH_LDAP_GLOBAL_OPTIONS的注释 3. settings中以AUTH_LDAP开头的配置,需要根据自己的ldap对应修改 -### 部分功能使用说明 +## 部分功能使用说明 1. 用户角色配置 - 在【后台数据管理】-【用户配置】页面管理用户,或者使用LADP导入,至少拥有一个工程师角色(engineer)、一个审核角色(review_man)、一个DBA角色才可以进行SQL上线 - 工程师可以发起SQL上线,审核人进行审核,DBA进行执行,超级管理员可以登录admin界面进行管理 + 在【后台数据管理】-【用户配置】页面管理用户,或者使用LADP导入,至少拥有一个工程师角色(engineer)、一个DBA角色才可以进行SQL上线 + 工程师可以发起SQL上线,审核人/DBA进行审核,DBA进行执行,超级管理员可以登录admin界面进行管理 2. 配置主库地址 - 在【后台数据管理】-【主库地址】页面管理主库 + 在【后台数据管理】-【主库地址配置】页面管理主库 主库地址用于SQL上线,DDL、DML、慢日志查看、SQL优化等功能 3. 配置从库地址 - 在【后台数据管理】-【从库地址】页面管理从库 + 在【后台数据管理】-【从库地址配置】页面管理从库 从库地址用于SQL查询功能 4. 配置查询权限审核流程 在【后台数据管理】-【工作流配置】页面管理审核流程 -### 系统展示截图: +## 系统展示截图: 1. 工单展示页 ![image](https://github.com/hhyo/archer/blob/master/src/screenshots/allworkflow.png) 2. 自助审核SQL @@ -234,10 +266,10 @@ pip install django-auth-ldap==1.3.0 18. 脱敏规则配置 ![image](https://github.com/hhyo/archer/blob/master/src/screenshots/datamaskingrules.png) -### 联系方式: +## 联系方式: QQ群:524233225 -### 部分小问题解决办法: +## 部分小问题解决办法: 1. 报错: ![image](https://github.com/hhyo/archer/blob/master/src/screenshots/bugs/bug1.png) ![image](https://github.com/hhyo/archer/blob/master/src/screenshots/bugs/bug2.png) diff --git a/sql/admin.py b/sql/admin.py index e17ce17c..2f43e574 100644 --- a/sql/admin.py +++ b/sql/admin.py @@ -4,6 +4,7 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm # Register your models here. +from archer import settings from .models import users, master_config, slave_config, workflow, WorkflowAudit, WorkflowAuditSetting, DataMaskingColumns, DataMaskingRules, AliyunAccessKey, AliyunRdsConfig @@ -69,37 +70,33 @@ class WorkflowAuditAdmin(admin.ModelAdmin): 'cluster_name', 'slave_host', 'slave_port', 'slave_user', 'create_time', 'update_time') search_fields = ['id', 'cluster_name', 'slave_host', 'slave_port', 'slave_user', 'slave_password', ] -# 工作流列表 -@admin.register(WorkflowAudit) -class WorkflowAuditAdmin(admin.ModelAdmin): - list_display = ( - 'audit_id', 'workflow_id', 'workflow_type', 'workflow_title', 'current_status', 'create_user', 'create_time',) - search_fields = ['audit_id', 'workflow_id', 'workflow_title', 'create_user'] - -# 工作流审核配置 -@admin.register(WorkflowAuditSetting) -class WorkflowAuditSettingAdmin(admin.ModelAdmin): - list_display = ('audit_setting_id', 'workflow_type', 'audit_users',) - -# 脱敏字段页面定义 -@admin.register(DataMaskingColumns) -class DataMaskingColumnsAdmin(admin.ModelAdmin): - list_display = ( - 'column_id', 'rule_type', 'active', 'cluster_name', 'table_schema', 'table_name', 'column_name', 'create_time',) - -# 脱敏规则页面定义 -@admin.register(DataMaskingRules) -class DataMaskingRulesAdmin(admin.ModelAdmin): - list_display = ( - 'rule_type', 'rule_regex', 'hide_group', 'rule_desc', 'sys_time',) - -# 阿里云的认证信息 -@admin.register(AliyunAccessKey) -class AliyunAccessKeyAdmin(admin.ModelAdmin): - list_display = ('ak', 'secret', 'is_enable', 'remark',) - -# 阿里云集群配置信息 -@admin.register(AliyunRdsConfig) -class AliyunRdsConfigAdmin(admin.ModelAdmin): - list_display = ('cluster_name', 'rds_dbinstanceid',) +if settings.QUERY: + # 工作流审核配置 + @admin.register(WorkflowAuditSetting) + class WorkflowAuditSettingAdmin(admin.ModelAdmin): + list_display = ('audit_setting_id', 'workflow_type', 'audit_users',) + +if settings.DATA_MASKING_ON_OFF: + # 脱敏字段页面定义 + @admin.register(DataMaskingColumns) + class DataMaskingColumnsAdmin(admin.ModelAdmin): + list_display = ( + 'column_id', 'rule_type', 'active', 'cluster_name', 'table_schema', 'table_name', 'column_name', 'create_time',) + + # 脱敏规则页面定义 + @admin.register(DataMaskingRules) + class DataMaskingRulesAdmin(admin.ModelAdmin): + list_display = ( + 'rule_type', 'rule_regex', 'hide_group', 'rule_desc', 'sys_time',) + +if settings.ALIYUN_RDS_MANAGE: + # 阿里云的认证信息 + @admin.register(AliyunAccessKey) + class AliyunAccessKeyAdmin(admin.ModelAdmin): + list_display = ('ak', 'secret', 'is_enable', 'remark',) + + # 阿里云集群配置信息 + @admin.register(AliyunRdsConfig) + class AliyunRdsConfigAdmin(admin.ModelAdmin): + list_display = ('cluster_name', 'rds_dbinstanceid',) diff --git a/sql/models.py b/sql/models.py index 26e69e99..b235f413 100644 --- a/sql/models.py +++ b/sql/models.py @@ -39,8 +39,8 @@ def __str__(self): return self.cluster_name class Meta: - verbose_name = u'主库地址' - verbose_name_plural = u'主库地址' + verbose_name = u'主库地址配置' + verbose_name_plural = u'主库地址配置' def save(self, *args, **kwargs): pc = Prpcrypt() # 初始化 @@ -72,8 +72,8 @@ def __str__(self): return self.workflow_name class Meta: - verbose_name = u'工单管理' - verbose_name_plural = u'工单管理' + verbose_name = u'SQL工单管理' + verbose_name_plural = u'SQL工单管理' # 各个线上从库地址 @@ -88,8 +88,8 @@ class slave_config(models.Model): update_time = models.DateTimeField('更新时间', auto_now=True) class Meta: - verbose_name = u'从库地址' - verbose_name_plural = u'从库地址' + verbose_name = u'从库地址配置' + verbose_name_plural = u'从库地址配置' def save(self, *args, **kwargs): pc = Prpcrypt() # 初始化 diff --git a/src/script/centos7_install.sh b/src/script/centos7_install.sh index b8ceb156..743fdca6 100644 --- a/src/script/centos7_install.sh +++ b/src/script/centos7_install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash DIR="$( cd "$( dirname "$0" )" && pwd )" cd $DIR -git clone -b github https://github.com/hhyo/archer.git \ +git clone -b archer-2.0 https://github.com/jly8866/archer.git \ && yum -y install gcc gcc-c++ make cmake bison openssl-devel mysql-devel \ && yum -y install epel-release \ && yum -y install python34 python34-pip python34-devel.x86_64 \