本記事はAsiaQuest Advent Calendarの15日目です。
クラウドインテグレーション部の渡邊です。
今回は、Relational Database – Amazon Aurora MySQL PostgreSQLのパラメータグループについて、ログに絞って考えました。
Aurora MySQLを例にまとめます。
クラスターを作成するとインスタンスパラメータグループとクラスターパラメータグループがありますが、それらの挙動や設定方針についても説明します。
本記事では、それぞれ以下のように呼ぶこととします。
なお、本記事は、データベースのログのエクスポート設定で、CloudWatchLogsに発行するログタイプをすべて有効化している前提です。
※オプショングループは本記事では触れません。
PGはインスタンスに適用するパラメータグループです。
CPGはクラスター内のすべてのインスタンスに適用するパラメータグループです。
この章では、これらのパラメータについて主に説明します。
公式の資料では見つかりませんでしたが、PGのパラメータ一覧とCPGのパラメータ一覧は、少なくとも本検証で使用するファミリー(aurora-mysql8.0)において包含関係がございました。
PGに含まれているパラメータはすべてCPGにもあり、CPGに含まれていてPGに含まれていないパラメータがありました。
コマンドによる確認の流れと、実施内容を以下に示します。
db_parameters.csv
、「>」はcluster_parameters.csv
の行を表します。db_parameters.csv
にあって、cluster_parameters.csv
には存在しない行を表示します。aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 \
| jq -r '["名前","値","許可された値","変更可能","送信元","適用タイプ","データ型","説明","ApplyMethod","MinimumEngineVersion"], (.Parameters[] | [.ParameterName,.ParameterValue,.AllowedValues,.IsModifiable,.Source,.ApplyType,.DataType,.Description,.ApplyMethod,.MinimumEngineVersion]) | @csv' \
| iconv -t sjis \
> db_parameters.csv
aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name default.aurora-mysql8.0 \
| jq -r '["名前","値","許可された値","変更可能","送信元","適用タイプ","データ型","説明","ApplyMethod","MinimumEngineVersion"], (.Parameters[] | [.ParameterName,.ParameterValue,.AllowedValues,.IsModifiable,.Source,.ApplyType,.DataType,.Description,.ApplyMethod,.MinimumEngineVersion]) | @csv' \
| iconv -t sjis \
> cluster_parameters.csv
diff db_parameters.csv cluster_parameters.csv | grep '^<'
cluster_parameters.csv
にあって、db_parameters.csv
には存在しない行を、以下コマンドで表示します。
diff db_parameters.csv cluster_parameters.csv | grep '^>'
実行結果を一部抜粋しますが、かなりたくさんありました。
> "server_id","{ServerId}",,false,"system","dynamic","integer","Integer value used to identify the instance in a replication group","pending-reboot",
> "skip-character-set-client-handshake",,"0,1",true,"engine-default","static","boolean","Ignore character set information sent by the client.","pending-reboot",
> "skip_name_resolve","1","0,1",false,"system","static","boolean","Host names are not resolved. All Host column values in the grant tables must be IP numbers or localhost.","pending-reboot",
※なお、aurora-mysql5.7で同様に試したところ、secure_auth
の変更可否だけ異なりました。
< "secure_auth",,"1",false,"engine-default","dynamic","boolean","Blocks connections from all accounts that have passwords stored in the old (pre-4.1) format.","pending-reboot",
---
> "secure_auth",,"1",true,"engine-default","dynamic","boolean","Blocks connections from all accounts that have passwords stored in the old (pre-4.1) format.","pending-reboot",
余談ですが、以下3つの条件をすべて満たすことで、コンソール画面からパラメータの差分を比較することはできます。(今回は①に合致しないためできない)
該当のパラメータグループを選択後、[アクション]>[比較]から比較できます。
PGとCPGは共通のパラメータがあります。
これらの設定値の優先度について説明します。
以下の2点が公式ドキュメントで記載されておりました。
変更した DB パラメータ設定は、構成設定を変更してデフォルト値に戻した場合でも、DB クラスターパラメータグループ値より優先されます。
プロビジョニングされたインスタンスと Aurora Serverless v2 インスタンス化の場合、DB クラスターパラメータグループで変更した設定値は、DB パラメータグループのデフォルト値をオーバーライドします。DB パラメータグループ内の対応する値を編集すると、これらの値によって DB クラスターパラメータグループの設定が上書きされます。
引用元:Amazon Aurora の DB クラスターパラメータと DB インスタンスパラメータ
PGとCPGの関係について、理解は深まりましたか。
これらの挙動を理解した上で、設定しましょう。
私は、以下の設定方針としています。
今回は、インスタンス間の設定の差分がないという想定のもと、私の設定方針に則り、CPGのみ言及します。
CloudWatchLogsで、4種類のログが出力できます。
エラーログは、デフォルトで生成されるため、パラメータグループによる設定は不要です。
Aurora MySQL のエラーログはデフォルトで生成されます。
Aurora MySQL データベースログの概要を参考に、パラメータを下表にまとめました。
ログタイプごとのパラメータ名 | パラメータ | 個人的オススメ設定値 | パラメータの説明 |
---|---|---|---|
監査ログ | server_audit_logging | 1 | 監査ログの有効化または無効化 |
server_audit_logs_upload | 1 | CloudWatcg Logsへのアップロードの有効化または無効化 | |
server_audit_events | TABLE,CONNECT,QUERY | ログ記録するイベント | |
全般ログ | general_log | 0 | 全般ログの有効化または無効化 |
スロークエリログ | slow_query_log | 1 | スロークエリログの有効化または無効化 |
long_query_time | 要件に合わせる | ログに記録されるクエリの最短実行時間 | |
log_queries_not_using_indexes | 0 | インデックスを使用していないすべてのクエリのログ記録の有効化または無効化 |
server_audit_events
は、QUERYイベントと重複する、以下イベントを除外しました。
なお、有効化しているイベントの説明は以下の通りです。
イベント | 説明 |
---|---|
TABLE | クエリ実行の影響を受けたテーブルの記録 |
CONNECT | 接続の成否、および切断の記録 |
QUERY | すべてのクエリの記録 (構文またはアクセス権限エラーで失敗したエラーを含む) |
監査ログはログ量が多くなりやすいため、コストが増加しやすい点に注意しましょう。
上表に記載はありませんが、CPGに含まれる以下のパラメータで制御することで、コストの削減が期待できます。
イベント | 説明 |
---|---|
server_audit_incl_users | ログを記録するユーザ名を指定する |
server_audit_excl_users | ログを記録しないユーザ名を指定する |
全般ログは大量に出力されるため、コストを考慮して、general_log
を無効化しました。long_query_time
は、デフォルト値10s
だと長いと思うので、デフォルト値から変更することをオススメします。log_queries_not_using_indexes
の有効化によって、long_query_time
の閾値より短いことで、スローログの特定の妨げになることを防ぐために無効化しました。
log_queries_not_using_indexes: インデックスを使用しないすべてのクエリをスロークエリログに記録するには、1 に設定します。インデックスを使用しないクエリは、その実行時間が long_query_time パラメータの値未満であってもログに記録されます。デフォルトは 0 です。
aurora-mysqlX.X
のファミリーにおいて、クラスターパラメータグループとインスタンスパラメータグループの項目は包含関係にある。
【参考】
Amazon Aurora MySQL DB クラスターでのアドバンストな監査の使用
Amazon RDS for MySQL のパラメーターを設定するためのベストプラクティス。パート 3: セキュリティ、操作管理性、および接続タイムアウトに関連するパラメーター