宜信開源|數(shù)據(jù)庫審核軟件Themis的規(guī)則解析與部署攻略

      網(wǎng)友投稿 690 2025-04-03

      一、介紹


      Themis是宜信公司DBA團(tuán)隊(duì)開發(fā)的一款數(shù)據(jù)庫審核產(chǎn)品,可幫助DBA、開發(fā)人員快速發(fā)現(xiàn)數(shù)據(jù)庫質(zhì)量問題,提升工作效率。其名稱源自希臘神話中的正義與法律女神。項(xiàng)目取此名稱,寓意此平臺對數(shù)據(jù)庫質(zhì)量公平判斷,明察秋毫。

      此平臺可實(shí)現(xiàn)對Oracle、MySql數(shù)據(jù)庫進(jìn)行多維度(對象結(jié)構(gòu)、SQL文本、執(zhí)行計(jì)劃及執(zhí)行特征)的審核,用以評估對象結(jié)構(gòu)設(shè)計(jì)質(zhì)量及SQL運(yùn)行效率。可幫助DBA及開發(fā)人員,快速發(fā)現(xiàn)定位問題;并提供部分輔助診斷能力,提升優(yōu)化工作效率。全部操作均可通過WEB界面進(jìn)行,簡單便捷。此外,為了更好滿足個(gè)性化需求,平臺還提供了擴(kuò)展能力,用戶可根據(jù)需要自行擴(kuò)展。

      Themis,是希臘正義與法律女神,以頭腦清晰見稱。項(xiàng)目采用此名稱,寓意著平臺可對數(shù)據(jù)庫質(zhì)量公平判斷,明察秋毫之意。

      1.1 功能概述

      事后審核,自主優(yōu)化部分放在二期實(shí)現(xiàn)。亦可在項(xiàng)目設(shè)計(jì)階段引入,起到一部分事前審核的作用。

      通過WEB界面完成全部工作,主要使用者是DBA和有一定數(shù)據(jù)庫基礎(chǔ)的研發(fā)人員。

      可針對某個(gè)用戶審核,可審核包括數(shù)據(jù)結(jié)構(gòu)、SQL文本、SQL執(zhí)行特征、SQL執(zhí)行計(jì)劃等多個(gè)維度。

      審核結(jié)果通過WEB頁面或?qū)С鑫募男问教峁?/p>

      平臺支持主流的Oracle、MySql數(shù)據(jù)庫,其他數(shù)據(jù)庫放在二期實(shí)現(xiàn)。

      盡量提供靈活定制的能力,便于日后擴(kuò)展功能。

      1.2 支持的數(shù)據(jù)庫

      MySQL(5.6及以上)

      Oracle(10g及以上)

      1.3 審核維度

      數(shù)據(jù)庫結(jié)果(對象)=》指數(shù)據(jù)庫對象,常見的表、分區(qū)、索引、視圖、觸發(fā)器等。

      SQL文本(語句)=》指SQL語句文本本身。

      SQL執(zhí)行計(jì)劃=》指數(shù)據(jù)庫中SQL的執(zhí)行計(jì)劃。

      SQL執(zhí)行特征=》指語句在數(shù)據(jù)庫上的真實(shí)執(zhí)行情況。

      1.4 實(shí)現(xiàn)原理

      整個(gè)平臺的基本實(shí)現(xiàn)原理很簡單,就是將我們的審核對象(目前支持四種),通過規(guī)則集進(jìn)行篩選。符合規(guī)則的審核對象,都是疑似有問題的。平臺會將這些問題及關(guān)聯(lián)信息提供出來,供人工甄別使用。由此可見,平臺的功能強(qiáng)大與否,主要取決于規(guī)則集的豐富程度。平臺也提供了部分?jǐn)U展能力,方便擴(kuò)展規(guī)則集。

      1.5 平臺架構(gòu)

      圖中的方框部分,為平臺的主要模塊。底色不同的模塊,表示當(dāng)前的進(jìn)度狀態(tài)不同。虛線代表數(shù)據(jù)流,實(shí)線代表控制流。其核心為這幾個(gè)模塊:

      數(shù)據(jù)采集模塊。它是負(fù)責(zé)從數(shù)據(jù)源抓取審核需要的基礎(chǔ)數(shù)據(jù)。目前支持從Oracle、MySQL抓取。

      OBJ/SQL存儲庫。這是系統(tǒng)的共同存儲部分,采集的數(shù)據(jù)和處理過程中的中間數(shù)據(jù)、結(jié)果數(shù)據(jù)都保存在這里。其核心數(shù)據(jù)分為對象類和SQL類。物理是采用的MongoDB。

      核心管理模塊。圖中右側(cè)虛線部分包含的兩個(gè)模塊:SQL管理和OBJ管理就是這部分。它主要是完成對象的全生命周期管理。目前只做了簡單的對象過濾功能,因此還是白色底色,核心的功能尚未完成。

      審核規(guī)則和審核引擎模塊。這部分是平臺一期的核心組件。審核規(guī)則模塊是完成規(guī)則的定義、配置工作。審核引擎模塊是完成具體規(guī)則的審核執(zhí)行部分。

      優(yōu)化規(guī)則和優(yōu)化引擎模塊。這部分是平臺二期的核心組件。目前尚未開發(fā),因此為白色底色。

      系統(tǒng)管理模塊。這部分是完成平臺基礎(chǔ)功能,例如任務(wù)調(diào)度、空間管理、審核報(bào)告生成、導(dǎo)出等功能。

      1.6 操作流程

      二、環(huán)境搭建

      本項(xiàng)目中會使用到mysql,mongo和redis,python支持2.6、2.7,暫不支持python3。

      mysql用來存儲pt-query-digest抓取的mysql的慢查詢,mongo存儲我們的規(guī)則、oracle的采集結(jié)果、執(zhí)行job,解析結(jié)果集等,redis作為任務(wù)調(diào)度celery的隊(duì)列。

      在mysql的數(shù)據(jù)采集部分我們使用的是pt-query-digest工具。

      2.1 依賴安裝

      為了減少后面對supervisord.conf配置文件的修改,我們建議使用統(tǒng)一的用戶進(jìn)行安裝

      后面的操作除了virtualenv安裝需要切換到root用戶,其他的都默認(rèn)在themis-test用戶下安裝

      由于在審核過程中需要連接oracle數(shù)據(jù)庫,因此需要先安裝cx_Oracle的依賴,參考:http://www.jianshu.com/p/pKz5K7

      首先安裝virtualenv,參考鏈接:https://pypi.python.org/simple/virtualenv/,建議安裝13.0.3或更新版本

      如果聯(lián)網(wǎng)不方便,或者在公司內(nèi)網(wǎng),可以從https://pan.baidu.com/s/1o7AIWlG下載壓縮包,提取碼:3sy3

      壓縮包里包括所有需要用到的依賴包

      關(guān)于virtualenv的使用請參考:https://virtualenv.pypa.io/en/stable/

      首先初始化虛擬環(huán)境

      解釋一下上面的命令:virtualenv的第二個(gè)參數(shù)python-project是我們建立的虛擬環(huán)境的名稱,這個(gè)名稱我們雖然可以隨便定義,但是后面supervisor的配置中使用了此名稱,建議使用默認(rèn)的,大家如果對python比較熟悉,可以隨意定義。后面我們指定了python的版本,--python可以不加,默認(rèn)會使用系統(tǒng)自帶的python版本構(gòu)建虛擬環(huán)境,當(dāng)有多個(gè)版本的python時(shí),可以使用此命令指定版本。

      下面使用source初始化虛擬環(huán)境,以后安裝的包依賴等都會被裝到/home/themis-test/python-project/home/themis-test/python2.7/lib/python2.7/site-packages這里。

      file:///home/themis-test/software是壓縮包解壓的位置

      2.2 配置文件介紹

      下面以配置文件settings.py為例子說明需要的一些依賴

      ORACLE_ACCOUNT和MYSQL_ACCOUNT是我們需要審核的目標(biāo)機(jī)器的帳號和密碼,主要是在數(shù)據(jù)采集部分和對象類審核以及mysql的執(zhí)行計(jì)劃類審核部分會用到,因此該帳號因該具有較高的權(quán)限,為了安全在生產(chǎn)環(huán)境應(yīng)該設(shè)置專有的帳號并設(shè)置專有的權(quán)限,或者加上一些ip的限制等。

      PT_QUERY_USER、PT_QUERY_PORT、PT_QUERY_SERVER、PT_QUERY_PASSWD、PT_QUERY_DB是我們pt-query-digest工具解析目標(biāo)機(jī)器的慢sql后需要存儲到的mysql數(shù)據(jù)庫的一些配置。

      REDIS_BROKER、REDIS_BACKEND、CELERY_CONF是任務(wù)調(diào)度工具celery的配置選項(xiàng)。

      MONGO_SERVER、MONGO_PORT、MONGO_USER、MONGO_PASSWORD、MONGO_DB是需要存儲結(jié)果集的mongo的配置選項(xiàng)。

      SERVER_PORT是web管理端監(jiān)聽的端口,不要使用9000和5555端口,這兩個(gè)被分配給了文件下載服務(wù)器和flower管理工具。

      CAPTURE_OBJ_HOUR、CAPTURE_OBJ_MINUTE、CAPTURE_OTHER_HOUR、CAPTURE_OTHER_MINUTE是針對oracle的數(shù)據(jù)采集模塊需要設(shè)置的采集時(shí)間,根據(jù)自己的實(shí)際情況設(shè)置不同的時(shí)間即可,避開業(yè)務(wù)高峰期。

      請按照相關(guān)說明配置該文件

      2.3 規(guī)則導(dǎo)入

      進(jìn)入源代碼目錄,使用如下命令進(jìn)行規(guī)則初始化

      三、數(shù)據(jù)采集

      數(shù)據(jù)采集分為oracle部分和mysql部分,oracle部分使用的是自己開發(fā)的一些腳本,mysql使用的是pt-query-digest工具。

      數(shù)據(jù)采集的頻率默認(rèn)是一天一次,可以根據(jù)自己的需要進(jìn)行修改。

      oracle部分依賴于celery的任務(wù)調(diào)度,會用supervisor托管,pt-query-digest可以加到crontab里。

      3.1 oracle部分

      手動采集oracle obj信息

      配置data/capture_obj.json文件

      只需要配置db_server和dbport選項(xiàng),oracle的端口要求是1521,capture_date指定采集數(shù)據(jù)的日期,現(xiàn)在只支持按天采集

      執(zhí)行命令

      配置方式同上面的obj

      執(zhí)行命令

      如果不對oracle數(shù)據(jù)庫審核,可以不用配置

      3.2 mysql部分

      可以將慢日志集中到一個(gè)地方,再集中入庫

      也可以在每臺mysql機(jī)器上安裝pt-query-digest,再將解析結(jié)果推送到存儲機(jī)器上。

      本平臺采用第二種方案

      從 https://www.percona.com/get/pt-query-digest 下載并安裝pt-query-digest,如果缺少依賴使用yum安裝。

      使用scirpt/pt_query_digest.sql初始化表結(jié)構(gòu),不要使用默認(rèn)的表結(jié)構(gòu)。

      在目標(biāo)機(jī)器上配置好script/pt-query-digest.sh腳本:

      $event->{hostname}='127.0.0.1:3306' 為被搜集慢日志的機(jī)器的ip地址和端口號。

      主要是配置存儲解析結(jié)果的mysql機(jī)器的帳號,密碼,機(jī)器ip,端口號,以及慢日志的位置等。

      運(yùn)行pt-query-digest.sh腳本開始搜集mysql慢查詢數(shù)據(jù),后面可以將其加入定時(shí)任務(wù),按固定時(shí)間段搜集。

      四、規(guī)則解析

      規(guī)則解析分為四塊:對象類規(guī)則解析、文本類規(guī)則解析、執(zhí)行計(jì)劃類規(guī)則解析、統(tǒng)計(jì)信息類規(guī)則解析。每個(gè)模塊都可以使用手動或自動的方式進(jìn)行。

      4.1 對象類規(guī)則解析

      配置data/analysis_o_obj.json文件

      使用上面的命令開始采集obj數(shù)據(jù)

      配置data/analysis_m_obj.json文件

      oracle和mysql對象類規(guī)則是不需要依賴于采集的數(shù)據(jù)的,它是直接連接到數(shù)據(jù)庫里進(jìn)行查詢的,由于有的庫較大可能時(shí)間會比較久,建議在業(yè)務(wù)低峰期進(jìn)行。

      4.2 文本類規(guī)則解析

      配置data/analysis_o_text.json文件

      配置data/oracle_m_text.json文件

      上面兩步中的username為需要審核的對象。

      宜信開源|數(shù)據(jù)庫審核軟件Themis的規(guī)則解析與部署攻略

      4.3 執(zhí)行計(jì)劃類規(guī)則解析

      配置data/analysis_o_plan.json文件

      運(yùn)行上面的命令即可生成解析結(jié)果。

      配置data/analysis_m_plan.json文件

      然后運(yùn)行上面的命令進(jìn)行mysql的plan的規(guī)則解析。

      4.4 執(zhí)行特征類規(guī)則解析

      配置data/analysis_o_stat.json文件

      進(jìn)行數(shù)據(jù)采集。

      配置文件data/analysis_m_text.json

      進(jìn)行數(shù)據(jù)采集。

      4.5 自動規(guī)則解析

      上面介紹的手動規(guī)則解析都是可以進(jìn)行測試,或者在一些特殊情況下使用,大部分情況我們會使用自動規(guī)則解析。

      自動規(guī)則解析我們使用celery來完成,關(guān)于celery 的使用,請參考http://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html。

      下面是常用的一些關(guān)于celery的命令:

      最后我們會將規(guī)則解析都加入到supervisor托管,然后通過web界面生成任務(wù),然后用celery進(jìn)行調(diào)度,通過flower查看任務(wù)執(zhí)行狀態(tài)。

      關(guān)于具體使用請參考supervisor的配置。

      五、任務(wù)導(dǎo)出

      5.1 手動任務(wù)導(dǎo)出

      配置data/export.json文件

      進(jìn)行手動任務(wù)導(dǎo)出,會生成離線的html壓縮包,保存在task_export/downloads下,可以直接解壓,然后通過瀏覽器打開查看報(bào)告。

      5.2 自動任務(wù)導(dǎo)出

      通過在celery配合supervisor托管來實(shí)現(xiàn),具體可參考supervisor的配置。

      六、web管理端

      6.1 手動開啟web管理端

      執(zhí)行如下命令

      訪問 http://127.0.0.1:7000 即可打開管理端

      七、supervisor配置

      7.1 supervisor配置

      注意:如果前邊建立的用戶不同或者使用了不同的目錄,需要將這個(gè)文件里的/home/themis-test/python-project/替換為自己的路徑。

      參考:http://www.supervisord.org/

      八、內(nèi)置規(guī)則說明

      平臺的核心就是規(guī)則。規(guī)則是一組過濾條件的定義及實(shí)現(xiàn)。規(guī)則集的豐富程度,代表了平臺的能力。平臺也提供了擴(kuò)展能力,用戶可自行定義規(guī)則。 從分類來看,規(guī)則可大致分為幾類。

      8.1 規(guī)則分類

      從數(shù)據(jù)庫類型來區(qū)分,規(guī)則可分為Oracle、MySQL。不是所有規(guī)則都區(qū)分?jǐn)?shù)據(jù)庫,文本類的規(guī)則就不區(qū)分。

      從復(fù)雜程度來區(qū)分,規(guī)則可分為簡單規(guī)則和復(fù)雜規(guī)則。這里的簡單和復(fù)雜,實(shí)際是指規(guī)則審核的實(shí)現(xiàn)部分。簡單規(guī)則是可以描述為mongodb或關(guān)系數(shù)據(jù)庫的一組查詢語句;而復(fù)雜規(guī)則是需要在外部通過程序體實(shí)現(xiàn)的。

      從審核對象角度來區(qū)分,規(guī)則可分為對象類、文本類、執(zhí)行計(jì)劃類和執(zhí)行特征類。

      8.2 規(guī)則參數(shù)

      規(guī)則可以包含參數(shù)。例如:執(zhí)行計(jì)劃規(guī)則中,有個(gè)是大表掃描。這里就需要通過參數(shù)來限定大表的定義,可通過物理大小來指定。

      8.3 規(guī)則權(quán)重及閥值

      權(quán)重 權(quán)重,代表違反規(guī)則,一次扣幾分。可根據(jù)自身情況進(jìn)行調(diào)節(jié)。

      閥值 閥值,代表違反規(guī)則的扣分上限。這里主要是為了避免違反單一規(guī)則過多,導(dǎo)致忽略了其他規(guī)則。

      規(guī)則權(quán)重及扣分,最終會累積為一個(gè)總的扣分,平臺會按百分制進(jìn)行折算。通過這種方式,可起到一定的量化作用。

      8.4 規(guī)則_對象類(Oracle部分)

      8.5 規(guī)則_對象類(MySQL部分)

      8.6 規(guī)則_執(zhí)行計(jì)劃類(Oracle部分)

      8.7 規(guī)則_執(zhí)行計(jì)劃類(MySQL部分)

      8.8 規(guī)則_執(zhí)行特征類(Oracle部分)

      8.9 規(guī)則_執(zhí)行特征類(MySQL部分)

      8.10 規(guī)則_文本類

      九、常見問題

      主機(jī)名稱不一致,導(dǎo)致cx_Oracle出錯。

      celery與flower版本不一致,導(dǎo)致flower不能啟動,升級flower到0.8.1以上。

      mysql5.7不能初始化datetime默認(rèn)類型為(DEFAULT '0000-00-00 00:00:00)。

      mongodb文檔最大插入數(shù)據(jù)有限制,導(dǎo)致生成結(jié)果時(shí)插入文檔失敗。

      在oracle獲取用戶的時(shí)候,有的系統(tǒng)可能會將用戶建到users下,因此需要將 NOT IN ('USERS', 'SYSAUX'))改成 NOT IN ('SYSAUX'))

      文件位置:capture/sql.py webui/utils/f_priv_db_user_list.py

      有些情況下需要安裝python-devel,centos安裝 yum install python-devel

      mysqldb安裝問題參考:http://blog.csdn.net/wklken/article/details/7271019

      十、異常處理

      程序中間出了差錯可以通過開啟flower來查看,或者通過手工執(zhí)行的方式進(jìn)行查看代碼。

      flower的開啟可以通過在supervisor中配置或者

      不過都需要配置redis認(rèn)證選項(xiàng)。

      十一、加入開發(fā)

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

      來源:宜信技術(shù)學(xué)院

      本文轉(zhuǎn)載自異步社區(qū)。

      數(shù)據(jù)庫 MySQL

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:制造業(yè)生產(chǎn)管理的責(zé)任(制造業(yè)生產(chǎn)部門的職責(zé))
      下一篇:條形碼:一次一次改進(jìn)制造一次掃描
      相關(guān)文章
      亚洲精品精华液一区二区| 亚洲av成人无码网站…| 亚洲精品无码专区| 亚洲精品国产第1页| 久久久无码精品亚洲日韩蜜桃| 亚洲日韩VA无码中文字幕 | 亚洲s色大片在线观看| 中文字幕在线亚洲精品| 亚洲精品中文字幕无码蜜桃| 国产亚洲精品影视在线产品| 久久久久无码专区亚洲av| 久久精品国产亚洲5555| 在线观看亚洲成人| 亚洲精品卡2卡3卡4卡5卡区| 亚洲精品乱码久久久久久按摩 | 国产精品亚洲精品青青青| 亚洲综合丁香婷婷六月香| 亚洲最大av资源站无码av网址| 亚洲色精品VR一区区三区 | 亚洲v高清理论电影| 亚洲黄色在线网站| 亚洲乱码无限2021芒果| 亚洲中文字幕无码中文字| 亚洲成a人无码亚洲成www牛牛 | 亚洲人成电影福利在线播放| 亚洲综合激情另类小说区| 亚洲不卡视频在线观看| 欧洲 亚洲 国产图片综合| 亚洲AV无码AV日韩AV网站| 亚洲国产高清精品线久久| 精品亚洲一区二区三区在线播放| 亚洲综合色婷婷七月丁香| 亚洲2022国产成人精品无码区| 亚洲综合色一区二区三区小说| 亚洲人成网站18禁止久久影院 | 亚洲精品宾馆在线精品酒店| 亚洲av中文无码| 亚洲精品无码mv在线观看网站| 夜夜亚洲天天久久| 亚洲日本久久一区二区va| 久久精品国产亚洲AV电影网|