共计 5670 个字符,预计需要花费 15 分钟才能阅读完成。
导语
Themis 是宜信公司 DBA 团队开发的一款数据库审核产品,可帮助 DBA、开发人员快速发现数据库质量问题,提升工作效率。
此平台可实现对 Oracle、MySQL 数据库进行多维度(对象结构、SQL 文本、执行计划及执行特征)的审核,用以评估对象结构设计质量及 SQL 运行效率。可帮助 DBA 及开发人员,快速发现定位问题;并提供部分辅助诊断能力,提升优化工作效率。全部操作均可通过 WEB 界面进行,简单便捷。此外,为了更好满足个性化需求,平台还提供了扩展能力,用户可根据需要自行扩展。
开源地址:https://github.com/CreditEaseDBA
点击查看 Themis 的部署攻略
一、规则解析
规则解析分为四块:对象类规则解析、文本类规则解析、执行计划类规则解析、统计信息类规则解析。每个模块都可以使用手动或自动的方式进行。
1.1 对象类规则解析
手动解析 oracle 对象类信息
配置 data/analysis_o_obj.json 文件
{
"module": "analysis",
"type": "OBJ",
"db_server": "127.0.0.1",
"db_port": 1521,
"username": "schema",
"db_type": "O",
"rule_type": "OBJ",
"rule_status": "ON",
"create_user": "system",
"task_ip": "127.0.0.1",
"task_port": 1521
}
配置 db_server、db_port、username、create_user、task_ip 选项,其他的保持默认即可,username 是需要审核的目标对象的名字。
python command.py -m analysis_o_obj -c data/analysis_o_obj.json
使用上面的命令开始采集 obj 数据
手动解析 mysql 对象类数据
配置 data/analysis_m_obj.json 文件
{
"module": "mysql",
"type": "OBJ",
"db_server": "127.0.0.1",
"db_port": 3306,
"username": "schema",
"db_type": "mysql",
"rule_type": "OBJ",
"rule_status": "ON",
"create_user": "mysqluser",
"task_ip": "127.0.0.1",
"task_port": 3306
}
配置 db_server、db_port、username、create_user、task_ip、db_port 选项,其他的保持默认即可。
运行命令:
python command.py -m analysis_m_obj -c data/analysis_m_obj.json
oracle 和 mysql 对象类规则是不需要依赖于采集的数据的,它是直接连接到数据库里进行查询的,由于有的库较大可能时间会比较久,建议在业务低峰期进行。
1.2 文本类规则解析
手动解析 oracle 文本类规则
配置 data/analysis_o_text.json 文件
{
"module": "analysis",
"type": "TEXT",
"username": "schema",
"create_user": "SYSTEM",
"db_type": "O",
"sid": "cedb",
"rule_type": "TEXT",
"rule_status": "ON",
"hostname": "127.0.0.1",
"task_ip": "127.0.0.1",
"task_port": 1521,
"startdate": "2017-02-23",
"stopdate": "2017-02-23"
}
配置 sid、username、create_user、task_ip、hostname、startdate、stopdate 选项,由于数据是按天采集的,因此暂时只支持 startdate 和 stopdate 保持一致,hostname 和 task_ip 可以保持一致,其他的保持默认即可。
执行下面的命令即可以进行规则解析:
python command.py -m analysis_o_plan -c data/analysis_o_plan.json
手动解析 mysql 文本类规则
配置 data/oracle_m_text.json 文件
"module": "analysis",
"type": "TEXT",
"hostname_max": "127.0.0.1:3306",
"username": "schema",
"create_user": "mysqluser",
"db_type": "mysql",
"rule_type": "TEXT",
"rule_status": "ON",
"task_ip": "127.0.0.1",
"task_port": 3306,
"startdate": "2017-02-21 00:00:00",
"stopdate": "2017-02-22 23:59:00"
}
配置 username、create_user、taskip、taskport、hostname、hostname_max、startdate、stopdate 选项,hostname 和 task_ip 可以保持一致,其他的保持默认即可。
运行下面的命令即可以进行规则解析:
python command.py -m analysis_m_text -c data/analysis_m_text.json
上面两步中的 username 为需要审核的对象。
1.3 执行计划类规则解析
oracle plan 类型规则解析
配置 data/analysis_o_plan.json 文件
{
"module": "analysis",
"type": "SQLPLAN",
"capture_date": "2017-02-23",
"username": "schema",
"create_user": "SYSTEM",
"sid": "cedb",
"db_type": "O",
"rule_type": "SQLPLAN",
"rule_status": "ON",
"task_ip": "127.0.0.1",
"task_port": 1521
}
主要是对 capture_date,username, create_user, sid,db_type,rule_type,task_ip,task_port 参数进行配置,type 分为 SQLPLAN,SQLSTAT,TEXT,OBJ 四种类型,rule_type 的类型同 SQLPLAN,只不过一个是代表模块的类型,一个代表规则的类型,db_type 分为 ”O” 和“mysql”两种类型,分别代表 oracle 和 mysql,capture_date 为我们欠扁配置的数据的抓取日期。
python command.py -m analysis -c data/analysis_o_plan.json
运行上面的命令即可生成解析结果。
mysql plan 规则解析
配置 data/analysis_m_plan.json 文件
{
"module": "analysis",
"type": "SQLPLAN",
"hostname_max": "127.0.0.1:3306",
"db_server": "127.0.0.1",
"db_port": 3306,
"username": "schema",
"db_type": "mysql",
"rule_status": "ON",
"create_user": "mysqluser",
"task_ip": "127.0.0.1",
"rule_type": "SQLPLAN",
"task_port": 3306,
"startdate": "2017-02-21 00:00:00",
"stopdate": "2017-02-22 23:59:00"
}
type 类型的含义同上面 oracle,hostname_max 为 mysql 的 ip: 端口号的形式,每一个 hostname_max 代表一个 mysql 实例,startdate 和 stopdate 需要加上时、分、秒,这一点同 oracle 不大一样。
python command.py -m analysis -c data/analysis_m_plan.json
然后运行上面的命令进行 mysql 的 plan 的规则解析。
1.4 执行特征类规则解析
oracle stat 类型规则解析
配置 data/analysis_o_stat.json 文件
{
"module": "analysis",
"type": "SQLSTAT",
"capture_date": "2017-02-23",
"username": "schema",
"create_user": "SYSTEM",
"sid": "cedb",
"db_type": "O",
"rule_type": "SQLSTAT",
"rule_status": "ON",
"task_ip": "127.0.0.1",
"task_port": 1521
}
配置 sid、username、create_user、task_ip、capture_date 选项, 其他保持默认即可。
运行命令:
python command.py -m analysis_o_stat -c data/analysis_o_stat.json
进行数据采集。
mysql stat 类型规则解析
配置文件 data/analysis_m_text.json
{
"module": "analysis",
"type": "SQLSTAT",
"hostname_max": "127.0.0.1:3306",
"db_server": "127.0.0.1",
"db_port": 3306,
"username": "schema",
"db_type": "mysql",
"rule_status": "ON",
"create_user": "mysqluser",
"task_ip": "127.0.0.1",
"rule_type": "SQLSTAT",
"task_port": 3306,
"startdate": "2017-02-21 00:00:00",
"stopdate": "2017-02-22 23:59:00"
}
配置 username、create_user、task_ip、task_port、hostname、hostname_max、startdate、stopdate 选项,hostname 和 task_ip 可以保持一致,其他的保持默认即可。
运行命令:
python command.py -m analysis_m_text -c data/analysis_m_text.json
进行数据采集。
1.5 自动规则解析
上面介绍的手动规则解析都是可以进行测试,或者在一些特殊情况下使用,大部分情况我们会使用自动规则解析。
自动规则解析我们使用 celery 来完成,关于 celery 的使用,请参考 http://docs.celeryproject.org…。
下面是常用的一些关于 celery 的命令:
开启规则解析
celery -A task_other worker -E -Q sqlreview_analysis -l info
开启任务导出
celery -A task_exports worker -E -l info
开启 obj 信息抓取
celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj
开启 flower
celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/
开启 plan、stat、text 抓取
celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other
最后我们会将规则解析都加入到 supervisor 托管,然后通过 web 界面生成任务,然后用 celery 进行调度,通过 flower 查看任务执行状态。
关于具体使用请参考 supervisor 的配置。
二、内置规则说明
平台的核心就是规则。规则是一组过滤条件的定义及实现。规则集的丰富程度,代表了平台的能力。平台也提供了扩展能力,用户可自行定义规则。从分类来看,规则可大致分为几类。
2.1 规则分类
- 从数据库类型来区分,规则可分为 Oracle、MySQL。不是所有规则都区分数据库,文本类的规则就不区分。
- 从复杂程度来区分,规则可分为简单规则和复杂规则。这里的简单和复杂,实际是指规则审核的实现部分。简单规则是可以描述为 mongodb 或关系数据库的一组查询语句;而复杂规则是需要在外部通过程序体实现的。
- 从审核对象角度来区分,规则可分为对象类、文本类、执行计划类和执行特征类。
2.2 规则参数
规则可以包含参数。例如: 执行计划规则中,有个是大表扫描。这里就需要通过参数来限定大表的定义,可通过物理大小来指定。
2.3 规则权重及阀值
- 权重 权重,代表违反规则,一次扣几分。可根据自身情况进行调节。
- 阀值 阀值,代表违反规则的扣分上限。这里主要是为了避免违反单一规则过多,导致忽略了其他规则。
规则权重及扣分,最终会累积为一个总的扣分,平台会按百分制进行折算。通过这种方式,可起到一定的量化作用。
2.4 规则_对象类(Oracle 部分)
2.5 规则_对象类(MySQL 部分)
2.6 规则_执行计划类(Oracle 部分)
2.7 规则_执行计划类(MySQL 部分)
2.8 规则_执行特征类(Oracle 部分)
2.9 规则_执行特征类(MySQL 部分)
2.10 规则_文本类
三、加入开发
有问题可以直接在 https://github.com/CreditEase… 提出。
本文选自:wiki。由于篇幅关系内容有所调整,请点击链接查看原文。
来源:宜信技术学院