RDS のクエリをログ用テーブルに出力

やりたいこと

  • RDSに対して実行されたQueryの履歴を確認できるようにする
  • AWS Glue Jobの実行時に意図しているSQLがDBに対して実行されているか、Glue CrawlerがどんなSQLを実行しているか、を確認するために今回の対応を行いました

手順

今回は下記のサイトを参考にしました
https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-mysql-logs/

まずマネージメントコンソールからAWS RDSのパラメータグループの変更を行います
general_logを1に設定

変更を保存しようとしたところエラーが発生

保存中のエラー: Cannot modify a default parameter group. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: b75a556a-78cf-4ad9-93f5-971c59fb84f5; Proxy: null)

parameter group自体を新規作成して、それを編集するようにしないといけないようです

参考:https://dev.classmethod.jp/articles/tsnote-rds-parameter-not-changed/

parameter groupmy-param-group-mysqlを新規作成しました

新規作成した場合は、デフォルトの設定がすでに登録されている状態になっているため、変更したかった箇所(general_log)のみ変更すればOKです

クエリログに関する設定内容は以下の通り設定の設定になっていました(恐らく今回イジったのはgeneral_logのみだったはず。。)

  • general_log: 1
  • log_output: TABLE
  • slow_query_log: 1
  • long_query_time:1

DBがparameter groupmy-param-group-mysqlを参照するよう設定を変更します

DataBase一覧から設定変更対象のDBにチェックを入れ、変更を選択

設定変更画面のパラメータグループ項目に先ほど作成したパラメータグループを設定します

確認画面で「すぐに適応」を選択しすると、自動で再起動が実行されました

DB パラメータグループの変更後はDBの再起動が必要でした

動作確認

下記のSQLでqueryが確認できるようなので早速試してみました

Select * from mysql.slow_log
Select * from mysql.general_log

mysql.general_logにqueryが登録されていることを無事確認できました

Glue Job実行後にこのテーブルの中身を確認したのですが、件数が多くて目的のqueryを探すのに苦労しました。。

最後に

  • 詰まる箇所はそれほど無く簡単に設定できました
  • ただGlue Job実行時ほ想定より多くのqueryが発行されていたので、目的のqueryを探すためにはwhere句で出来る限り条件を絞る必要がありそうです
  • DB パラメータグループの変更後はDBの再起動が必要なため、本番稼働中などのシステムで利用されている場合は注意が必要です