Archery的部署与使用
# 一、认识Archery## 1.1 平台定位与背景
“在实际数据库运维中,一次忘记加WHERE条件的UPDATE可能导致整张表数据丢失,这不仅仅是理论上的风险,而是许多团队的真实教训。”
Archery是一款开源的一站式SQL审核查询平台,旨在提升数据库操作的安全性、效率和规范性,将数据库变更从“个人行为”转变为“团队协作流程”。
它的核心价值包括:
- 安全管控(杜绝生产库直连,所有SQL通过平台执行)
- 流程规范(SQL提交→自动审核→人工审批→自动执行全流程留痕)
- 效率提升(日均处理SQL从传统人工审核的约200条大幅提升)。
## 1.2 核心功能全景图
| 功能模块 | 核心能力 | 用户价值 |
| --- | --- | --- |
| SQL审核 | Web提交、自动语法检查+规则引擎、多级审批流 | 规避误操作风险 |
| SQL查询 | 可视化数据查询+导出、敏感数据脱敏 | 安全查询、审计溯源 |
| 工单管理 | 全生命周期跟踪 (提交-> 审核 -> 执行 -> 归档) | 流程规范、责任溯源 |
| 运维管理 | 数据库实例健康监控、会话管理、慢日志分析 | 主动运维、性能优化 |
| SQL优化 | 基于PT收集慢日志,多工具优化建议 | 性能调优 |
## 1.3 技术架构
Archery的部署架构包含以下核心组件:
- Archery Web服务:基于Django框架的Web应用,提供用户界面和API
- 关系型数据库(MySQL/PostgreSQL):存储元数据、用户信息、工单记录
- 缓存服务(Redis):会话存储、任务队列
- 消息队列(Redis/RabbitMQ):处理异步任务
- 审核引擎(goInception):SQL审核与执行核心
# 二、安装与初始配置
## 2.1 环境准备
| 项目 | 要求 |
| --- | --- |
| CPU | 建议2核以上 |
| 内存 | 测试环境4GB以上,生产环境按需扩容 |
| 磁盘 | 建议20GB以上 |
| Docker | 版本20.10以上 |
| Docker Compose | 版本2.0以上 |
| Git | 用于拉取代码 |
## 2.2 一键部署步骤
```bash
# 1. 下载Archery(以v1.13.0为例)
wget https://github.com/hhyo/Archery/archive/refs/tags/v1.13.0.tar.gz
tar-zxvf v1.13.0.tar.gz
cd Archery-1.13.0/src/docker-compose/
# 2. 启动服务
docker compose up -d
# 3. 表结构初始化
dockerexec-ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql
python3 manage.py migrate
# 4. 数据初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql
# 5. 创建管理员账户
python3 manage.py createsuperuser
# 6. 退出容器并访问
exit
# 访问 http://服务器IP:9123
```
## 2.3 关键配置要点
> ⚠️ 部署避坑指南(重点提醒)
- Binlog务必开启:回滚语句生成依赖MySQL binlog,否则审核失败
- 资源预留:建议4GB以上内存,避免容器OOM
- 端口映射:默认9123端口,确保防火墙开放
# 三、核心功能使用
## 3.1 系统角色说明
| 角色 | 权限 | 主要职责 |
| --- | --- | --- |
| RD(开发工程师) | 提交SQL上线工单、SQL查询 | 发起变更 |
| DBA(数据库管理员) | 审核SQL、执行上线 | 安全把关 |
| PM(项目经理) | 审批工单、审批权限 | 流程控制 |
## 3.2 SQL上线流程
**标准审批流程**:RD提交、DBA审核、PM审批
**功能亮点**:
- 自动审批:支持正则判断,不在正则范围内的SQL无需人工审批
- 快速上线:工单详情可快速提交相同SQL到其他实例
- 定时执行:支持工单审核后定时或立即执行
## 3.3 SQL查询功能
- **授权管理**:工作流控制SQL查询授权,支持库表级权限限制和授权时间控制
- **敏感数据脱敏**:查询结果中的手机号、身份证号等敏感信息自动打码
- **查询导出**:支持Excel/CSV格式导出,历史记录自动归档
## 3.4 SQL优化与慢日志分析
- 集成慢查询日志分析,帮助快速定位性能瓶颈
- 支持SQLAdvisor、SOAR等多工具优化建议
- SQL语句自动格式化,提升代码可读性
# 四、权限体系与审核规则配置
## 4.1 权限体系架构
Archery采用多层次的权限管理模型:
- **资源组**:资源对象的集合,与用户关联后隔离资源访问权限,成员仅可查看组关联对象的数据
- **权限组**:权限集合,工作流审批依赖权限组,可根据职能划分
- **核心权限定义**:
- sql_submit:提交SQL上线工单
- sql_review:审核SQL上线工单
- sql_execute:执行SQL上线工单
## 4.2 审核规则配置
**高危SQL拦截规则**(`CRITICAL_DDL_REGEX`):
```text
正则示例:^truncate|^rename|^drop
```
匹配的语句会被禁止提交
```sql
# 示例操作SQL
truncate table IF EXISTS <TableName>;
drop table IF EXISTS <TableName>
RENAME TABLE <CurrentTableName> TO <NewTableName>;
```
**自动驳回等级控制**(`AUTO_REVIEW_WRONG`):
- `1`:审核出现警告即驳回
- `2或空`:仅出现错误才驳回
- `其他`:不驳回
**自动审批开关**(`AUTO_REVIEW`):
- 结合`AUTO_REVIEW_REGEX`和`MAX_UPDATE_ROWS`配置
- update语句预估影响行数超限时需人工审批
## 4.3 工作流配置步骤
1. 系统管理 → 配置项管理 → 工单审核流配置
2. 变更审批流程(选择审批流顺序)
3. 完成后SQL上线需依次经 成员提交、Leader审核、ManagerLeader(Feddy大哥或运维)审批
## 五、运维管理与常见问题
## 5.1 日常运维监控
- **会话管理**:支持查看和批量终止会话
- **慢日志分析**:集成慢查询日志,提供分析和展示界面
- **数据库健康监控**:实例空间使用、会话状态监控
## 5.2 常见问题及解决方案
| 问题现象 | 可能原因 | 解决方案 |
| --- | --- | --- |
| 提交SQL时提示“开启binlog日志” | MySQL未开启binlog | 配置MySQL开启binlog |
| 工单卡在待审核状态 | 审批流程未配置完整 | 检查工单审核流配置 |
| 用户无法访问实例 | 资源组未正确关联 | 系统管理-资源组管理,关联用户和实例 |
| goInception进程无响应 | 内存溢出或进程僵死 | 重启goInception服务 |
## 5.3 消息通知配置
支持通知方式:**钉钉**(资源组级别)、**企业微信**、**邮件**
通知触发场景:工单提交、审核、取消、执行的各个阶段
# 六、重点总结
- Archery是什么?→ 开源的一站式SQL审核查询平台
- 为什么要用?→ 解决SQL变更管理的效率、安全、流程三大痛点
- 核心能力?→ 审核+查询+工单+运维+优化
- 谁负责什么?→ 成员提交、Leader审核、ManagerLeader(Feddy大哥或运维)审批
- 如何保障安全?→ 自动审核 + 权限隔离 + 多级审批 + 操作留痕
# 七、参考资料
- **官方文档**:https://archery-document.readthedocs.io/
- **官方GitHub**:https://github.com/hhyo/Archery
- **goInception项目**:https://github.com/hanchuanchuan/goInception
- 部署教程:从零配置Archery——手把手搭建企业级SQL审核平台
- 功能详解:自动化SQL审核流水线的实践指南
页:
[1]