宜信開源|數據庫審覈軟件Themis的規則解析

導語

Themis是宜信公司DBA團隊開發的一款數據庫審覈產品,可幫助DBA、開發人員快速發現數據庫質量問題,提高工做效率。html

此平臺可實現對Oracle、MySQL數據庫進行多維度(對象結構、SQL文本、執行計劃及執行特徵)的審覈,用以評估對象結構設計質量及SQL運行效率。可幫助DBA及開發人員,快速發現定位問題;並提供部分輔助診斷能力,提高優化工做效率。所有操做都可經過WEB界面進行,簡單便捷。此外,爲了更好知足個性化需求,平臺還提供了擴展能力,用戶可根據須要自行擴展。python

開源地址: https://github.com/CreditEaseDBAmysql

點擊查看Themis的部署攻略git

1、規則解析

規則解析分爲四塊:對象類規則解析、文本類規則解析、執行計劃類規則解析、統計信息類規則解析。每一個模塊均可以使用手動或自動的方式進行。github

1.1 對象類規則解析

手動解析oracle對象類信息

配置data/analysis_o_obj.json文件web

{
    "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是須要審覈的目標對象的名字。redis

python command.py -m analysis_o_obj -c data/analysis_o_obj.json

使用上面的命令開始採集obj數據sql

手動解析mysql對象類數據

配置data/analysis_m_obj.json文件mongodb

{
    "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/en/master/getting-started/first-steps-with-celery.html。

下面是經常使用的一些關於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、內置規則說明

平臺的核心就是規則。規則是一組過濾條件的定義及實現。規則集的豐富程度,表明了平臺的能力。平臺也提供了擴展能力,用戶可自行定義規則。 從分類來看,規則可大體分爲幾類。

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 規則_文本類

3、加入開發

有問題能夠直接在 https://github.com/CreditEaseDBA/Themis/issues 提出。

本文選自:wikihttps://tuteng.gitbooks.io/themis/content。 因爲篇幅關係內容有所調整,請點擊連接查看原文。

來源:宜信技術學院

相關文章
相關標籤/搜索