このトピックでは、Simple Log ServiceコンソールでData Management (DMS) の操作ログをクエリおよび分析する方法について説明します。
背景情報
操作ログには、DMSで実行されるすべての操作の詳細が記録されます。 操作ログには、操作者、使用された機能の名前、操作が実行された時間、操作のタイプ、および実行されたSQL文に関する情報が含まれます。 詳細については、「操作監査機能の使用」トピックの「機能」セクションをご参照ください。
前提条件
Simple Log Serviceが有効化されています。 詳細については、「リソース管理の概要」をご参照ください。
Simple Log ServiceプロジェクトとLogstoreが作成されます。 詳細については、プロジェクトの管理トピックの「プロジェクトの作成」セクションおよびLogstoreの管理トピックの「Logstoreの作成」セクションをご参照ください。
Logstoreは空で、Logstoreに対してフルテキストインデックス作成が有効になっています。 フルテキストインデックスを有効にする方法の詳細については、「インデックスの作成」をご参照ください。
課金方法
DMSの操作ログをSimple Log Serviceに無料でエクスポートできます。 ただし、Simple Log Serviceはストレージ料金を請求します。 Simple Log Serviceの課金の詳細については、「課金機能の課金項目」をご参照ください。
手順
手順1: Simple Log ServiceプロジェクトをDMSに登録する
最初に DMS管理者としてDMSコンソールV5.0 にログインします。
DMSコンソールのホームページで、左側のナビゲーションウィンドウの [データベースインスタンス] の横にあるアイコンをクリックします。
説明DMSコンソールにシンプルモードでログインする場合は、左側のナビゲーションウィンドウで [データベースインスタンス] をクリックします。 表示されるインスタンスリストで、アイコンをクリックします。
[インスタンスの追加] ダイアログボックスで、以下のパラメーターを設定して、Simple Log ServiceプロジェクトをDMSに登録します。
セクション
パラメーター
説明
データソース
非該当
データソースのサービスプロバイダー。 この例では、Alibaba Cloudが選択されています。
基本情報
データベースタイプ
データソースのタイプ。 この例では、SLSが選択されている。
インスタンスリージョン
Simple Log Serviceプロジェクトが存在するリージョン。
接続方法
Simple Log Serviceプロジェクトの登録に使用する方法。 デフォルト値: Connection String Address。
接続文字列アドレス
Simple Log Serviceプロジェクトの接続文字列アドレス。 インスタンスリージョンパラメーターを設定すると、DMSは自動的に接続文字列アドレスを生成します。
プロジェクト名
Simple Log Serviceプロジェクトの名前。
AccessKey ID
Alibaba CloudアカウントのAccessKey ID。 AccessKey IDは、Simple Log ServiceプロジェクトをDMSに登録するときにID認証に使用されます。
説明AccessKey IDの取得方法の詳細については、「AccessKeyペアの作成」をご参照ください。
AccessKeyシークレット
AccessKey IDに対応するAccessKeyシークレット。
説明AccessKeyシークレットの取得方法の詳細については、「AccessKeyペアの作成」をご参照ください。
高度な機能パック
データソースに機能パックを追加することはできません。 デフォルトでは、データソースはFlexible Managementモードをサポートしています。
詳細情報
環境タイプ
Simple Log Serviceプロジェクトがデプロイされている環境のタイプ。 有効な値: Dev、Test、Product、Pre、SIT、UAT、Pet、STAG。 詳細については、「インスタンスの環境タイプの変更」トピックの「環境タイプ」セクションをご参照ください。
[インスタンス名]
DMSのSimple Log Serviceプロジェクトの名前。
説明DMSコンソールでプロジェクトを管理するときに、プロジェクトの表示名を変更できます。 詳細については、「データベースインスタンスの変更」をご参照ください。
DBA
Simple Log Serviceプロジェクトのデータベース管理者 (DBA) を選択します。 以降の操作では、DBAから権限を要求できます。
クエリのタイムアウト
SQLクエリ文の実行タイムアウト時間を指定します。 SQLクエリステートメントの実行が指定されたタイムアウト期間よりも長く続く場合、データベースのセキュリティを確保するために、ステートメントの実行は終了します。
エクスポートタイムアウト
SQL export文の実行タイムアウト時間を指定します。 SQL exportステートメントの実行が指定されたタイムアウト時間よりも長く続く場合、データベースのセキュリティを確保するためにステートメントの実行は終了します。
説明[基本情報] セクションで設定を完了したら、ダイアログボックスの左下隅にある [接続のテスト] をクリックします。 接続テストに合格するまで待ちます。
「getProject' コマンドの実行結果はnullです」というエラーメッセージが表示された場合は、DMSへのログインに使用するAlibaba CloudアカウントによってSimple Log Serviceプロジェクトが作成されているかどうかを確認します。
[送信] をクリックします。
ステップ2: DMSの操作ログをエクスポートするタスクを作成する
DMSコンソールV5.0 にログインします。
上部のナビゲーションバーで、[セキュリティと仕様] > [操作監査] を選択します。
説明DMSコンソールにシンプルモードでログインする場合は、コンソールの左上隅にあるアイコンをクリックし、[すべての機能] > [セキュリティと仕様] > [操作監査] を選択します。
[ログのエクスポート] タブをクリックします。 [ログのエクスポート] タブで、右上隅の [新しいタスク] をクリックします。
[エクスポートタスクの作成] ダイアログボックスで、次の表に示すパラメーターを設定します。
パラメーター
必須
説明
タスク名。
必須
エクスポートタスクの名前。 簡単に識別できるように、わかりやすい名前を指定します。
宛先ログサービス
必須
リソースの管理に使用されるSimple Log Serviceプロジェクト。
SLSログストア
必須
DMSの操作ログをエクスポートするLogstore。 ドロップダウンリストから宛先Logstoreを選択します。
説明宛先ログストアがドロップダウンリストに表示されない場合は、[同期辞書] をクリックします。 表示されたメッセージボックスで [OK] をクリックします。 その後、DMSはLogstoreのメタデータを自動的に収集します。
関数モジュール
必須
ログをエクスポートする機能モジュール。 [操作ログ] タブでモジュールを表示できます。 有効な値には、インスタンス管理、ユーザー管理、権限、およびデータベース間クエリ結果エクスポートが含まれます。 デフォルトでは、[すべて] が選択されています。
スケジューリング方法
必須
エクスポートタスクのスケジューリング方法。 有効な値:
ワンタイムタスク: エクスポートタスクを作成した後、タスクはログを1回だけエクスポートします。
定期的なタスク: [日] 、[週] 、または [月] を選択して、ログを定期的に宛先ログストアにエクスポートできます。 定期的なタスクが初めて実行された場合、ログエントリの開始時刻からスケジュールされた開始時刻までにDMSで生成されたすべての操作ログがエクスポートされます。 増分ログのみが後でエクスポートされます。 詳細については、「DMSの操作ログをSimple Log Serviceにエクスポートする」トピックの「定期的なスケジューリング」セクションをご参照ください。
ログ時間範囲
選択可能
説明このパラメーターは、スケジューリング方法パラメーターをワンタイムタスクに設定した場合にのみ表示されます。
エクスポートする操作ログが生成される時間範囲。 デフォルトでは、このパラメーターを設定しない場合、過去3年間に生成されたすべてのログがエクスポートされます。
ログ開始時刻
選択可能
説明このパラメーターは、Scheduling MethodパラメーターをPeriodic Tasksに設定した場合にのみ表示されます。
定期的なタスクには終了時間がありません。
エクスポートするログの開始時刻。 このパラメーターを設定しない場合、デフォルト値はエクスポートタスクが作成された日付から3年前の日付です。
[OK] をクリックします。 ログエクスポートタスクが作成されます。 システムはまた、データを照会および分析するために、LogstoreにdbId、dbName、dbUserなどのインデックスフィールドを作成します。
ワンタイムタスクのステータスが [成功] の場合、ログがエクスポートされます。
説明Logstoreのインデックスは、作成後に有効になります。 したがって、ワンタイムタスクは、タスクが作成されてから約90秒後に開始されます。
定期的なタスクはログを複数回エクスポートし、ログがエクスポートされる前後に [保留中のスケジューリング] 状態になります。 タスクログを表示して、タスクが成功したかどうかを判断できます。
タスクの [操作] 列で次の操作を実行できます。
クエリ: [クエリ] をクリックすると、SQLコンソールページに移動します。 表示されるページで、[クエリ] をクリックします。 ページ下部の [実行履歴] セクションで、Logstoreにエクスポートされたログを表示できます。
タスクログ: [タスクログ] をクリックして、開始時刻、終了時刻、エクスポートするログエントリ数、タスクのステータスなど、タスクに関する情報を表示します。
一時停止: 一時停止をクリックします。 ダイアログボックスが表示された場合、[OK]をクリックします。 その後、定期タスクは一時停止される。
再起動: [再起動] をクリックします。 表示されるダイアログボックスで、[OK] をクリックして、一時停止したタスクを再開します。
説明1回限りのタスクで再起動操作を実行することはできません。
クエリや一時停止など、サポートされているすべての操作を定期的なタスクで実行できます。
エクスポートタスクの作成方法の詳細については、「DMSの操作ログをSimple Log Serviceにエクスポートする」をご参照ください。
ステップ3: Simple Log ServiceコンソールでDMSのエクスポートされた操作ログを照会および分析する
Simple Log Serviceコンソールにログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
検索ボックスにクエリ文を入力します。
クエリ文は、検索文と分析文で構成され、
検索文 | 分析文
の形式です。 詳細については、「検索構文」および「集計関数」をご参照ください。Simple Log Serviceコンソールでは、次の情報のみを照会および分析できます。
説明この例では、dmstest Logstoreが使用されています。
次のSQL文を実行して、特定のデータベースへのログインに最も失敗したユーザーを照会します。
__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;
次のSQL文を実行して、送信元IPアドレスが特定のインスタンスへのアクセスを許可されていないユーザーを照会します。 この例では、127.0.0.1が使用される。
説明インスタンスの送信元IPアドレスは、インスタンスをDMSに登録するときに使用するIPアドレスです。 この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;
次のSQL文を実行して、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;
次のSQL文を実行して、同じ日に複数のデータベースにアクセスして管理するユーザーを照会します。
__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;
次のSQL文を実行して、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;
;
次のSQL文を実行して、機密データを最も頻繁にダウンロードするユーザーを照会します。
__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;
cSC; 10; 10
次のSQL文を実行して、機密データをバッチで削除および変更するために実行されるSQL文を照会します。
__topic__ : DMS_LOG_DELIVERY | SELECT subModule, COUNT(*) cnt, COUNT(affectRows) affectRow FROM dmstest WHERE subModule != '' GROUP BY subModule ORDER BY cnt DESC;
次のSQL文を実行して、データのエクスポート中にデータ透かし機能を有効または無効にするユーザーを照会します。
__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 '%enable data watermark: false' GROUP BY targetId, operUserId, operUserName ORDER BY cnt DESC LIMIT 10;
説明'% enable data watermark: true'
を使用して、データ透かし機能を有効にしたユーザーにクエリを実行します。「 % enable data watermark: false」
をクエリ文で使用して、データ透かし機能を無効にしたユーザーにクエリを実行します。
次のSQL文を実行して、[SQLコンソール] ページの [実行履歴] セクションで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;
クエリステートメントの詳細については、「クエリとログの分析」トピックの「ステップ1: クエリステートメントの入力」セクションをご参照ください。
Simple Log Serviceの生ログのフィールド
Simple log ServiceにインポートされるDMS操作ログの重要なフィールドとその意味を次の表に示します。
項目 | 説明 |
id | ログの一意のID。 |
gmt_create | ログが作成された時刻。 |
gmt_modified | ログが変更された時刻。 |
oper_user_id | オペレータのユーザID。 |
oper_user_name | 演算子の名前。 |
moudle_name | エクスポートされた機能モジュールの名前。 有効な値:
|
sub_module | サブ機能モジュール。 たとえば、SQLコンソールページのサブ機能モジュールは、実行されたSQLステートメントのタイプを参照します。 |
db_id | 使用するデータベースのID。 IDはDMSで割り当てられます。 |
db_name | 使用するデータベースの名前。 |
is_logic_db | データベースが論理データベースかどうかを指定します。 |
instance_id | 使用するインスタンスのID。 IDはDMSで割り当てられます。 |
instance_name | 使用するインスタンスの名前。 |
action_desc | 操作の説明。 |
備考 | 備考です。 |
has_sensitive_data | ログに機密情報が含まれるかどうかを指定します。 |