SQL を使用した DB ログのアクセスのための log_fdw 拡張機能の使用
Aurora PostgreSQL DB クラスターは、SQL インターフェイスを通じてデータベースエンジンのログにアクセスする際に使用できる、log_fdw
拡張機能をサポートしています。log_fdw
エクステンションは、データベースログ用の外部テーブルの作成を容易にする 2 つの関数を提供します。
-
list_postgres_log_files
- データベースログディレクトリのファイルとファイルサイズ (バイト単位) を一覧表示します。 -
create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text)
- 現在のデータベースで指定されたファイルの外部テーブルを構築します。
log_fdw
によって作成されたすべての関数は、rds_superuser
によって所有されます。rds_superuser
ロールのメンバーは、これらの関数へのアクセス権限を他のデータベースユーザーに付与することができます。
デフォルトでは、ログファイルは、log_destination
パラメータで指定されたように、Amazon Aurora によって stderr
(標準エラー) 形式で生成されます。このパラメータには、stderr
と csvlog
(カンマ区切り値、CSV) の 2 つのオプションしかありません。パラメータに csvlog
オプションを追加すると、Amazon Aurora は stderr
と csvlog
両方のログを生成します。これは DB クラスターのストレージ容量に影響を与える可能性があるため、ログ処理に影響を与える他のパラメータに注意する必要があります。詳細については、「ログの送信先の設定 (stderr、csvlog)」を参照してください。
csvlog
ログを生成すること 1 つの利点は、log_fdw
拡張機能により、データが複数の列にきちんと分割された外部テーブルを構築できることです。これを行うには、インスタンスをカスタム DB パラメータグループに関連付けて、log_destination
の設定を変更できるようにする必要があります。これを行う方法については、「Amazon Aurora のパラメータグループ」を参照してください。
次の例では、log_destination
パラメータに cvslog
が含まれることを前提としています。
log_fdw 拡張を使用するには
-
log_fdw
拡張機能をインストールします。postgres=>
CREATE EXTENSION log_fdw;
CREATE EXTENSION
-
外部データラッパーとしてログサーバーを作成します。
postgres=>
CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw;
CREATE SERVER
-
ログファイルのリストからすべてを選択します。
postgres=>
SELECT * FROM list_postgres_log_files() ORDER BY 1;
レスポンスの例を次に示します。
file_name | file_size_bytes ------------------------------+----------------- postgresql.log.2023-08-09-22.csv | 1111 postgresql.log.2023-08-09-23.csv | 1172 postgresql.log.2023-08-10-00.csv | 1744 postgresql.log.2023-08-10-01.csv | 1102 (4 rows)
-
選択したファイルの、1 つの 'log_entry' 列でテーブルを作成します。
postgres=>
SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');
レスポンスでは、テーブルが存在しているということ以外の詳細を返しません。
----------------------------------- (1 row)
-
ログファイルのサンプルを選択します。次のコードは、ログの時間とエラーメッセージの説明を取得します。
postgres=>
SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;
レスポンスの例を次に示します。
log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2023 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2023 PDT | database system was interrupted; last known up at 2023-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2023 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2023 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2023 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2023 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2023 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)