はじめに
テスト目的でAzure Database for PostgreSQLのログの出力量を増やす必要があり、
いろいろ試した結果やり方がわかったので備忘録として残します。
方法
デバッグ用のログを出力する設定を有効化する。
以下の3つのサーバーパラメーターを有効化します。
- debug_print_plan
クエリの実行計画をログ出力にします。 - debug_print_parse
クエリのparseツリーをログ出力します。 - debug_print_rewritten
クエリのrewrittenツリーをログ出力します。
これらの設定を有効化することでログの出力量が増えます。
パラメーターの詳細については下記のドキュメントをご参照ください。
問い合わせツリーとは
Error Reporting and Logging
以上になります。
以降はAzure CLIやTerraformで設定する方法について記載していきます。
Azure CLI
- Azure CLIで既存のPostgreSQLの設定を変更する場合は、このようにコマンドを実行します。
az postgres server configuration set --name debug_print_plan --resource-group リソースグループ名 --server PostgreSQLサーバー名 --value on az postgres server configuration set --name debug_print_parse --resource-group リソースグループ名 --server PostgreSQLサーバー名 --value on az postgres server configuration set --name debug_print_rewritten --resource-group リソースグループ名 --server PostgreSQLサーバー名 --value on
詳細については下記のドキュメントをご参照ください。
Azure CLI を使用して Azure Database for PostgreSQL – Single Server のサーバー構成パラメーターをカスタマイズする
Terraform
- Terraformでこれらを有効化した環境を構築する場合は、このように記述します。
resource "azurerm_postgresql_configuration" "debug_print_plan" { name = "debug_print_plan" resource_group_name = azurerm_resource_group.test.name server_name = azurerm_postgresql_server.test.name value = "on" } resource "azurerm_postgresql_configuration" "debug_print_parse" { name = "debug_print_parse" resource_group_name = azurerm_resource_group.test.name server_name = azurerm_postgresql_server.test.name value = "on" } resource "azurerm_postgresql_configuration" "debug_print_rewritten" { name = "debug_print_rewritten" resource_group_name = azurerm_resource_group.test.name server_name = azurerm_postgresql_server.test.name value = "on" }
実際にリソースを立ち上げてみたい場合は、
github上に全体のソースコードを載せているのでぜひ参考にしてください。
https://github.com/tkhs1121/terraform-azure-sample/tree/master/postgresql-log
番外編
- それなりのログを出力してくれるクエリのサンプル。
DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( id SERIAL PRIMARY KEY, data TEXT ); DO $$ DECLARE i INTEGER := 1; BEGIN WHILE i <= 1000000 LOOP INSERT INTO t1 (data) VALUES (LPAD('', 8000, 'a')); i := i + 1; END LOOP; END $$;
テストの内容的にある程度のログ出力が必要でかなり多めにInsertしているので、
実際に実行する際は調整してください。
さいごに
誰かのお役に立てれば幸いです。