Redshiftにおいても、一般のRDBと同等レベルのAuditLogを取得可能です。その方法について、まとめておきます。基本的にマニュアルの記載をざっくりまとめたものなので、詳細については以下の公式マニュアルを見てみて下さい。
データベース監査ログ作成 - Amazon Redshift
監査ログの種類
Redshitの監査ログは、以下の3種類があります。公式サイトからの引用です。
- 接続ログ
- 認証の試みと、接続および切断を記録
- ユーザーログ
- データベースのユーザー定義への変更に関する情報を記録
- ユーザーアクティビティログ
- データベースで実行される前に各クエリを記録
データベース監査ログ作成 - Amazon Redshift
設定変更方法
Redshiftコンソールにて、対象Redshiftクラスターを選択して、「Database」-「Configure Audit Loggin」と選択します
以下の通り Configure Audit Logging
を有効とし、ログ保管先とするs3を指定します
なお、 ユーザーアクティビティログ
を出力せさるためには、この設定のほか、Parameter Groupの値を変更する必要があります
利用しているParameter Groupの enable_user_activity_logging
の値を、trueに変更します
RedshiftにおいてParameter Groupを変更すると、 Parameter Group Apply Status
の値が、「applying」->「pending-reboot」と遷移します。
この後、Redshift Clusterを再起動することで、パラメータが実際に反映されます。
出力ログについて
監査ログは、設定時に指定したs3パスに、以下のパス構成で出力されることになります。
指定s3Bucke名/KeyPrefix名/AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz
操作を実施してから、実際にs3に出力されるには、1時間ほどのタイムラグが発生します。
ログの中身はこんな感じです。
'2018-07-04T15:22:20Z UTC [ db=test user=root pid=20345 userid=100 xid=88200 ]' LOG: create table public.kiritan ( name varchar(300) ) '2018-07-04T15:22:25Z UTC [ db=test user=root pid=20347 userid=100 xid=88209 ]' LOG: INSERT INTO public.kiritan(name) VALUES('zunda'); '2018-07-04T15:22:31Z UTC [ db=test user=root pid=20390 userid=100 xid=88224 ]' LOG: SELECT public.kiritan.name AS name FROM public.kiritan;
Redshiftでは、ユーザ側で何もしていないとしても、内部的にはシステム的はクエリが絶えず実行されているため、それらのログが大量に出力されることになります。ログから有効な情報を取得するには、Athenaであるとか、ElasticSearchやSplunkで検索しないと、もうどうしようもない感じになります。
その他
出力されるログは、Redshiftのシステムテーブルで確認することも可能です。こちらの情報の方が、よりリアルタイムに確認できます。
- 接続ログ
- ユーザーログ
- ユーザーアクティビティログ