本文介紹如何在阿里云日志服務SLS中查詢、分析DMS的操作日志。
背景信息
操作日志指用戶在DMS發起所有操作的流水賬式日志,日志包含用戶的相關信息、使用的功能模塊名稱、執行操作的時間、執行的操作類型及SQL語句等信息。更多信息,請參見功能說明。
前提條件
已開通日志服務。更多信息,請參見開通日志服務。
已創建日志服務項目(Project)和日志庫(Logstore)。具體操作,請參見創建Project和創建Logstore。
目標SLS的Logstore必須為空,且必須開啟全文索引。開啟全文索引的具體操作,請參見手動創建字段索引。
費用說明
導出DMS操作日志到SLS功能不計費,但SLS會收取一定的存儲費用。SLS的計費詳情,請參見計費項。
操作步驟
步驟一:錄入Project至DMS
以管理員角色,登錄數據管理DMS 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創建操作日志導出任務
- 登錄數據管理DMS 5.0。
在頂部菜單欄中,選擇安全與規范 > 操作審計。
說明若您使用的是極簡模式的控制臺,請單擊控制臺左上角的圖標,選擇全部功能 > 安全與規范 > 操作審計。
選擇導出日志頁簽,單擊右上角新建任務。
在新建導出任務對話框中,配置如下信息。
配置項
是否必填
說明
任務名稱
是
導出任務名稱,便于后續查找。
目標SLS
是
日志服務的資源管理單元Project。
SLS Logstore
是
該Logstore將會保存導出的DMS操作日志。您可單擊該參數的輸入框,并選擇目標Logstore。
說明若下拉框中未出現目標Logstore,請單擊同步字典,再單擊確認,DMS可自動采集Logstore中的元數據信息。
功能模塊
是
選擇需要導出DMS哪些功能模塊的日志(與操作日志中的模塊對應),包含實例管理、用戶管理、權限、在SQL窗口進行數據查詢等功能。默認選擇導出全部功能的日志。
調度方式
是
選擇本次任務的調度方式。
單次:指成功創建導出任務后,僅導出一次。
周期:可選擇按日、周或月循環多次導出日志至Logstore。周期調度任務第一次會導出從日志開始時間到第一次調度開始時間范圍內,您在DMS生成的所有操作日志,后續僅導出增量的日志。具體配置,請參見周期調度。
日志時間范圍
否
說明調度方式選擇單次時會出現此配置項。
導出某時間范圍內的日志。不填寫該配置項則默認導出三年內的日志。
日志開始時間
否
說明調度方式選擇周期時會出現此配置項。
周期任務沒有截止時間。
DMS日志記錄的開始時間,不填寫則默認為創建導出任務時間對應三年前的時間。
單擊確認,會創建一個導出日志任務,同時,系統還會在您的Logstore中創建一些用于后續查詢分析數據的索引字段,例如dbId、dbName、dbUser等。
對于單次任務,僅導出一次日志,當任務的狀態為運行成功時,表示日志導出成功。
說明因Logstore索引延遲生效,所以單次調度任務會在創建成功后的90秒左右開始執行。
對于周期任務,會多次導出日志,且導出前和導出后的任務狀態均為待調度。您可通過查看任務日志,判斷某次任務是否執行成功。
您還可以在目標任務行操作列下進行如下操作。
查詢:單擊查詢,系統自動跳轉至SQL Console頁面,單擊查詢,在頁面下方的執行結果區域可查看導出至Logstore的日志。
任務日志:單擊任務日志,查看任務開始、結束時間、投遞日志數量、任務狀態等信息。
暫停:單擊暫停,在彈出的提示對話框中,單擊確認,周期任務會被暫停執行。
重啟:單擊重啟,在彈出的提示對話框中,單擊確認,可重新啟動已被暫停執行的周期任務。
說明單次任務不支持重啟操作,其他操作均支持。
周期任務支持查詢、暫停等全部操作。
創建導出任務的更多信息,請參見導出DMS操作日志到阿里云日志服務。
步驟三:在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 | 是否包含敏感信息。 |