Aurora PostgreSQLからSlowQueryをログに出す with terraform

 
0
このエントリーをはてなブックマークに追加
Hakucho
Hakucho (白鳥)

結論

↓こんな感じです。

resource "aws_rds_cluster_parameter_group" "parameter_group" {
  name        = "parameter-group"
  family      = "aurora-postgresql15"

  parameter {
    name  = "log_min_duration_statement"
    value = "3000"
  }
}

resource "aws_rds_cluster" "rds_cluster" {
...
  engine         = "aurora-postgresql"
  engine_version = "15.3"
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.parameter_group.name
...
}

実装方法

前提条件

  • 3秒以上かかってるステートメントをログに出力する

1. 使うAurora PostgreSQLのパラメータグループを調べてパラメータグループファミリーを特定する

terraformのリソースであるaws_rds_cluster_parameter_groupfamily の指定が必須です。

なのでこの family を最初に調べます。

すでにDBが作成済みの場合は次のコマンドで適用されてるDBのエンジンとそのバージョンがわかります。

aws rds describe-db-clusters --db-cluster-identifier {identifier}

...
"Engine": "aurora-postgresql",
"EngineVersion": "15.3",
...

次のコマンドでエンジンからバージョンの一覧とその詳細がわかります。前段で取得したエンジンとバージョンを使って自分の使っているDBのパラメータグループファミリーを見つけてください。

aws rds describe-db-engine-versions --engine aurora-postgresql --query "DBEngineVersions[]"

{
        "Engine": "aurora-postgresql",
        "EngineVersion": "15.3",
        "DBParameterGroupFamily": "aurora-postgresql15",
        "DBEngineDescription": "Aurora (PostgreSQL)",
        "DBEngineVersionDescription": "Aurora PostgreSQL (Compatible with PostgreSQL 15.3)",
...

もしDBが作成済みでない場合は、使う予定のエンジンとバージョンを決めうちして同様の作業をしてください。

2. 設定したいパラメータを調べてterraformのリソースを作る

aws_rds_cluster_parameter_group を作成し、取得したパラメータファミリーと設定したいパラメータを設定します。

3秒以上かかってるステートメントをログに出力したいので、log_min_duration_statement3000 に設定し、 terraform apply を実行します。

(3.の作業が残ってるのでここではまだDBとはつなげません。)

resource "aws_rds_cluster_parameter_group" "parameter_group" {
  name        = "parameter-group"
  family      = "aurora-postgresql15"

  parameter {
    name  = "log_min_duration_statement"
    value = "3000"
  }
}

3. デフォルトのパラメータグループとの差分を確認

私はすでに動いているDBに対して新しいパラメータグループを付け替える作業を行ったので、大事をとってデフォルトのパラメータグループとの差分を確認します。

次のコマンドでパラメーターグループのパラメーターがわかるので、これを使ってデフォルトのパラメータグループと新しく作ったパラメータグループのパラメータを取得します。

aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name {db-cluster-parameter-group-name}

デフォルトのパラメータグループの名前ですが、パラメータファミリーの名前がそのままデフォルトのパラメータグループの名前なります。

そして適当なdiffを取るツールで差分を確認します。

私の環境では意図していない変更が見つかりました。

{
            "ParameterName": "apg_write_forward.idle_in_transaction_session_timeout",
-            "ParameterValue": "0",
+            "ParameterValue": "86400000",
            "Description": "Sets the maximum allowed idle time between forwarded queries, when in a transaction.",
            "Source": "system",
            "ApplyType": "static",
            "DataType": "integer",
            "AllowedValues": "1-2147483647",
            "IsModifiable": true,
            "MinimumEngineVersion": "15.3",
            "ApplyMethod": "pending-reboot",
            "SupportedEngineModes": [
                "provisioned"
            ]
  },
...
{
            "ParameterName": "log_min_duration_statement",
+            "ParameterValue": "3000",
            "Description": "(ms) Sets the minimum execution time above which statements will be logged.",
-            "Source": "engine-default",
+            "Source": "user",
            "ApplyType": "dynamic",
            "DataType": "integer",
            "AllowedValues": "-1-2147483647",
            "IsModifiable": true,
-            "ApplyMethod": "pending-reboot",
+            "ApplyMethod": "immediate",
            "SupportedEngineModes": [
                "provisioned"
            ]
},

別途調査をしましたが特に問題ない変更だったので次の作業に進みます。

4. DBとパラメータグループを紐づける

db_cluster_parameter_group_name を使ってDBとパラメータグループを紐づけます。

resource "aws_rds_cluster_parameter_group" "parameter_group" {
  name        = "parameter-group"
  family      = "aurora-postgresql15"

  parameter {
    name  = "log_min_duration_statement"
    value = "3000"
  }
}

resource "aws_rds_cluster" "rds_cluster" {
...
  engine         = "aurora-postgresql"
  engine_version = "15.3"
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.parameter_group.name
...
}

以上です。

参考

Amazon Aurora PostgreSQL 個のパラメータ - Amazon Aurora

AWS CLI Command Reference — AWS CLI 1.29.71 Command Reference

Terraform Registry

Terraform Registry

RDSのログをCloudWatch Logsからdatadog logsに流す - terraformを添えて - - Qiita

Aurora (Amazon RDS for PostgreSQL) でスロークエリを出力する方法 - Qiita

Amazon RDS for PostgreSQL を使用してクエリロギングを有効にする

info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。