本文介紹如何在阿里雲Log ServiceSLS中查詢、分析DMS的動作記錄。
背景資訊
動作記錄指使用者在DMS發起所有操作的流水賬式日誌,日誌包含使用者的相關資訊、使用的功能模組名稱、執行操作的時間、執行的操作類型及SQL語句等資訊。更多資訊,請參見功能說明。
前提條件
已開通Log Service。更多資訊,請參見開通Log Service。
已建立Log Service專案(Project)和日誌庫(Logstore)。具體操作,請參見建立Project和建立Logstore。
目標SLS的Logstore必須為空白,且必須開啟全文索引。開啟全文索引的具體操作,請參見手動建立欄位索引。
費用說明
匯出DMS動作記錄到SLS功能不計費,但SLS會收取一定的儲存費用。SLS的計費詳情,請參見計費項目。
操作步驟
步驟一:錄入Project至DMS
以管理員角色,登入Data Management 5.0。
在控制台首頁的資料庫執行個體地區,單擊。
說明若您使用的是極簡模式的控制台,請單擊控制台左側的資料庫執行個體,在資料庫執行個體地區,單擊。
在新增執行個體頁面,錄入SLS資訊。
類別
配置項
說明
資料來源
-
選擇阿里雲。
基本資料
資料庫類型
選擇SLS。
執行個體地區
選擇SLS所在地區。
錄入方式
預設選擇串連串地址。
串連串地址
在選擇執行個體地區後,會自動產生一個串連串地址。
專案名
輸入在SLS建立的Project名稱。
AccessKey ID
輸入您的阿里雲帳號AccessKey ID。該AccessKey ID用於Project錄入至DMS時進行身分識別驗證。
說明擷取AccessKey ID的方法,請參見建立AccessKey。
AccessKey Secret
輸入與AccessKey ID對應的AccessKey Secret。
說明擷取AccessKey Secret的方法,請參見建立AccessKey。
增值功能包
該資料來源暫不支援添加功能包,預設具有自由操作模式能力。
進階資訊
環境類型
選擇環境類型。環境類型包含開發、測試、生產、預發、SIT、UAT、壓測和STAG環境。更多資訊,請參見執行個體環境類型。
執行個體名稱
自訂SLS在DMS顯示的名稱。
說明您可以通過編輯執行個體來維護執行個體名稱。具體操作,請參見編輯執行個體資訊。
執行個體DBA
選擇一個執行個體DBA,該DBA可用於後續許可權申請等流程。
查詢逾時時間(s)
設定的安全性原則,控制執行查詢語句的時間,以保護資料庫安全。
匯出逾時時間(s)
設定的安全性原則,控制執行匯出語句的時間,以保護資料庫安全。
說明基本資料配置完成後,單擊頁面下方的測試連接,等待測試通過。
若出現“getProject命令的執行結果為空白”的錯誤提示,請確認錄入的Project是否由當前登入DMS的阿里雲帳號建立。
單擊提交。
步驟二:在DMS建立動作記錄匯出任務
- 登入Data Management 5.0。
在頂部功能表列中,選擇安全與規範 > Action Trail。
說明若您使用的是極簡模式的控制台,請單擊控制台左上方的表徵圖,選擇全部功能 > 安全與規範 > Action Trail。
選擇匯出日誌頁簽,單擊右上方建立任務。
在建立匯出任務對話方塊中,配置如下資訊。
配置項
是否必填
說明
任務名稱
是
匯出任務名稱,便於後續尋找。
目標SLS
是
Log Service的資源嵌入式管理單元Project。
SLS Logstore
是
該Logstore將會儲存匯出的DMS動作記錄。您可單擊該參數的輸入框,並選擇目標Logstore。
說明若下拉框中未出現目標Logstore,請單擊同步字典,再單擊確認,DMS可自動採集Logstore中的中繼資料資訊。
功能模組
是
選擇需要匯出DMS哪些功能模組的日誌(與動作記錄中的模組對應),包含執行個體管理、使用者管理、許可權、在SQL視窗進行資料查詢等功能。預設選擇匯出全部功能的日誌。
調度方式
是
選擇本次任務的調度方式。
單次:指成功建立匯出任務後,僅匯出一次。
周期:可選擇按日、周或月迴圈多次匯出日誌至Logstore。周期調度任務第一次會匯出從日誌開始時間到第一次調度開始時間範圍內,您在DMS產生的所有動作記錄,後續僅匯出增量的日誌。具體配置,請參見周期調度。
日誌時間範圍
否
說明調度方式選擇單次時會出現此配置項。
匯出某時間範圍內的日誌。不填寫該配置項則預設匯出三年內的日誌。
日誌開始時間
否
說明調度方式選擇周期時會出現此配置項。
周期任務沒有截止時間。
DMS日誌記錄的開始時間,不填寫則預設為建立匯出任務時間對應三年前的時間。
單擊確認,會建立一個匯出日誌任務,同時,系統還會在您的Logstore中建立一些用於後續查詢分析資料的索引欄位,例如dbId、dbName、dbUser等。
對於單次任務,僅匯出一次日誌,當任務的狀態為運行成功時,表示日誌匯出成功。
說明因Logstore索引延遲生效,所以單次調度任務會在建立成功後的90秒左右開始執行。
對於周期任務,會多次匯出日誌,且匯出前和匯出後的任務狀態均為待調度。您可通過查看任務日誌,判斷某次任務是否執行成功。
您還可以在目標任務行操作列下進行如下操作。
查詢:單擊查詢,系統自動跳轉至SQL Console頁面,單擊查詢,在頁面下方的執行結果地區可查看匯出至Logstore的日誌。
任務日誌:單擊任務日誌,查看任務開始、結束時間、投遞日誌數量、任務狀態等資訊。
暫停:單擊暫停,在彈出的提示對話方塊中,單擊確認,周期任務會被暫停執行。
重啟:單擊重啟,在彈出的提示對話方塊中,單擊確認,可重新啟動已被暫停執行的周期任務。
說明單次任務不支援重啟操作,其他動作均支援。
周期任務支援查詢、暫停等全部操作。
建立匯出任務的更多資訊,請參見匯出DMS動作記錄到阿里雲Log Service。
步驟三:在SLS控制台查詢、分析匯出的DMS動作記錄
在Project列表地區,單擊目標Project。
在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。
在輸入框中輸入查詢、分析語句。
查詢和分析語句由查詢語句和分析語句構成,格式為
查詢語句|分析語句
。查詢分析語句文法請參見查詢文法、SQL分析文法。當前僅支援在SLS查詢、分析如下資訊:
說明以查詢dmstest Logstore舉例。
登入資料庫失敗次數最多的使用者。
__topic__ : DMS_LOG_DELIVERY AND subModule : LOGIN | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest WHERE state = '0' GROUP BY operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
執行個體來源IP異常的使用者。以127.0.0.1舉例。
說明執行個體來源IP指錄入執行個體至DMS時您的本地IP地址,該地址用於標識執行個體的來源。
__topic__ : DMS_LOG_DELIVERY | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest WHERE state = '0' and requestIp in ('127.0.0.1') GROUP BY operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
訪問DMS次數最多的使用者。
__topic__ : DMS_LOG_DELIVERY| SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest GROUP BY operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
同一天訪問、操作多個資料庫的使用者。
__topic__: DMS_LOG_DELIVERY | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, date_trunc('day', gmtCreate) time, dbId, COUNT(*) qpd from dmstest GROUP BY time, operUserId, operUserName, dbId ORDER BY time, qpd DESC;
在DMS執行資料庫操作失敗的使用者。
__topic__ : DMS_LOG_DELIVERY AND moudleName : SQL_CONSOLE | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, actionDesc as sqlStatement, subModule as sqlType, remark as failReason FROM dmstest WHERE state = '-1' order by id;
下載敏感性資料次數最多的使用者。
__topic__ : DMS_LOG_DELIVERY AND moudleName : DATA_EXPORT | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest WHERE hasSensitiveData = 'true' GROUP BY operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
對敏感性資料執行大量刪除、更新等SQL語句。
__topic__ : DMS_LOG_DELIVERY | SELECT subModule, COUNT(*) cnt, COUNT(affectRows) affectRow FROM dmstest WHERE subModule != '' GROUP BY subModule ORDER BY cnt DESC;
匯出資料時,是否開啟資料浮水印功能。
__topic__ : DMS_LOG_DELIVERY AND moudleName : DATA_EXPORT | SELECT targetId as orderId, concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest where actionDesc like '%開啟資料浮水印: false' GROUP BY targetId, operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
說明查詢開啟資料浮水印的語句為:
'%開啟資料浮水印: true'
。查詢未開啟資料浮水印的語句為:
'%開啟資料浮水印: false'
。
在SQL Console頁面的執行結果地區下載SQL結果集的使用者。
__topic__ : DMS_LOG_DELIVERY AND moudleName : SQL_CONSOLE_EXPORT | SELECT concat(cast(operUserId as varchar), '(', operUserName, ')') user, COUNT(*) cnt FROM dmstest GROUP BY operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
查詢和分析的更多資訊,請參見步驟一:輸入查詢和分析語句。
SLS原始日誌欄位說明
以下表格為DMS動作記錄匯入至SLS後,部分重要欄位所代表的含義。
欄位名 | 說明 |
id | 日誌唯一ID。 |
gmt_create | 日誌建立時間。 |
gmt_modified | 日誌修改時間。 |
oper_user_id | 操作者的使用者ID。 |
oper_user_name | 操作者名稱。 |
moudle_name | 匯出的功能模組:
|
sub_module | 子功能模組。 例如在SQL_CONSOLE下,子模組指使用者執行SQL語句的類型。 |
db_id | 操作的資料庫ID(在DMS標識的ID)。 |
db_name | 操作的資料庫名稱。 |
is_logic_db | 是否為邏輯庫。 |
instance_id | 操作的執行個體ID(在DMS標識的ID)。 |
instance_name | 操作的執行個體名稱。 |
action_desc | 操作描述。 |
remark | 備忘資訊。 |
has_sensitive_data | 是否包含敏感資訊。 |