概要
ある案件でRDSでサポート切れPostgreSQL 9.4を9.6へ引き上げるということを2020年4月にやった。
そもそもこのRDS、これまでクエリに関するログがまったく出力されない設定となっており、以前障害が発生したときにログを確認しようとしたら何もなく、衝撃を受けた。
なお、9.6だとCloudWatchでRDSのログが確認できるようになるということで、
この記事では、以下についてまとめる
- RDS(PostgreSQL 9.6)のログをCloudWatchで確認するための設定
- RDSでクエリログを出力するための設定
前提
RDSのログってどこで確認できる?
RDSコンソールページへアクセス > データベース > 任意のRDSインスタンスのDB識別子を選択 > ログとイベント > error/postgresql.log.yyyy-mm-dd-hh(※)
※yyyy-mm-dd-hhはUTC日時
RDSでクエリログを出力するための設定
「パラメータグループ」の設定を変更してやる必要がある。
関係するのは以下。
パラメータ名 | 意味 | postgresql9.6のデフォルト値 |
---|---|---|
log_duration | クエリの実行時間をログに出力するか。0:クエリの実行時間を出力する 1:クエリの実行時間を出力しない |
0(engine-defaultの値) |
log_min_duration_statement | ログに出力するクエリの実行時間閾値(ミリ秒)を-1〜2147483647の間で設定。 -1にするとログ出力されない。 0にすると全クエリ出力。 |
-1(engine-defaultの値) |
log_statement | どの種類のクエリをログに出力するか。 ・ddl: CREATE,ALTER,DROPを記録 ・mod:ddlに加えてINSERT,UPDATE,DELETEを記録 ・all:ddl+modに加えてすべてのクエリを記録 |
none(engine-defaultの値) |
※稼働しているRDSインスタンスでDBエンジンデフォルトのパラメータグループを使っている場合は、
そのパラメータグループ自体の設定は変更できない。改めて新規作成した上でパラメータグループを付け替えてやること。
なお、パラメータグループの付け替えや各設定の変更反映の際にはRDSインスタンスが再起動される(瞬断が発生する)ことにも注意。
設定したら、RDSのログを確認してクエリログが出力されていることを確認する。
RDS(PostgreSQL 9.6)のログをCloudWatchで確認するための設定
CloudWatch LogsへRDSのログを保存する設定
RDSコンソールページへアクセス > データベース > 任意のRDSインスタンスのDB識別子を選択 > 変更ボタンを押下 > ログのエクスポートでPostgresql logにチェックを入れて「次へ」を押下。
すると・・・CloudWatchで「aws/rds/instance/<DB識別子>/postgresql
」というロググループにログ出力されるようになる。
(CloudWatchコンソールページへアクセス > ログ-ロググループ から確認可能)
ログ保存期間の設定変更
CloudWatch LogsでRDSのログを保存するにあたって、デフォルトでは「いつまでも保存する」という設定になっている。
このままにしておくと時間経過で発生する料金が大変なことになってしまう。
また、CloudWatch LogsへRDSのログを保存するのであればRDS上のログは不要である。
RDSのストレージを食ってしまうため、保存期間は最小限でよい。
1. CloudWatch Logs側のログ保存期間設定
CloudWatchコンソールページへアクセス > ログ-ロググループ > 任意のロググループの「次の期間経過後にイベントを失効」カラムの値を選択
→保持期間の編集ダイアログが表示される。
引き続いて保持期間を任意の値に変更してOKを押下する。
2. RDS側のログ保存期間設定
以下の「パラメータグループ」の設定を変更してやる必要がある。
パラメータ名 | 意味 | postgresql9.6のデフォルト値 |
---|---|---|
rds.log_retention_period | ログ保存期間。単位は分。設定できる範囲は1440(1日)〜10080(7日)で | 4320(3日) |
※この設定変更はRDSインスタンスの再起動が必要であるため「RDSでクエリログを出力するための設定」と同時にやった方がよいだろう。
参考