Amazon Web Services ブログ
RDS および Aurora PostgreSQL ログの操作: パート 2
このシリーズの最初の投稿である RDS および Aurora PostgreSQL ログの操作: パート 1 では、PostgreSQL のログの重要性と、より多くのデータベースアクティビティの詳細情報をキャプチャするためのさまざまなパラメータを調整する方法を記載しています。PostgreSQL ログは、データベースの問題を解決するのに役立つ情報を提供します。この投稿は、PostgreSQL ログにアクセスするためのさまざまな方法に焦点を当てています。
PostgreSQL ログはクラスターの各インスタンスに生成および保存されます。これらのログファイルにアクセスする方法は複数あります。以下のセクションでは、これらの方法をいくつか説明します。
AWS マネジメントコンソールにアクセスする
PostgreSQL ログファイルにアクセスするための最も直接的な方法は、AWS Management Console を介して行います。以下の手順を実行します。
- Amazon RDSを開きます。
- RDS/Aurora インスタンスを選択します。
- [ログとイベント] を選択します。
- [Logs] で必要なログファイルを選択します。
- [View]、[Watch]、または[Download]のいずれかを選択します。
以下のスクリーンショットは、[Logs] セクションのプレビューです。
これは、ログファイルを表示またはダウンロードするための最も基本的な方法です。
CloudWatch Logs にログファイルを発行する
RDS および Aurora PostgreSQL は、Amazon CloudWatch Logs へのログの発行をサポートしています。詳細については、RDS ユーザーガイドの「PostgreSQL ログの Amazon CloudWatch Logs への発行」を参照してください。
ログが CloudWatch Logs の場合、アラームを作成し、リアルタイム分析を行うことができます。たとえば、log_statements
を ddl
に設定した場合、DDL ステートメントが実行されたときは常にアラートするアラームを設定できます。
CloudWatch Logs では、ログ分析に役立つオプションを検索およびフィルタリングできます。詳細については、「フィルターとパターンの構文」を参照してください。
たとえば、以下のスクリーンショットは、FATAL
または ERROR
という語を含む最後の 5 分間に生成された PostgreSQL ログのメッセージを示しています。
AWS CLI を使用してログファイルをダウンロードする
AWS CLI を使用して RDS および Aurora PostgreSQL ログファイルをダウンロードできます。AWS CLI のコマンドを実行する前に、適切な IAM ロールを割り当てて、IAM ユーザー認証を設定し、または Amazon EC2 インスタンスを使用します。詳細については「AWS CLI のインストール」と「AWS CLI の設定」をご参照ください。
ログファイルをダウンロードするために使用された IAM ユーザーまたはロールは、rds:DescribeDBLogFiles および rds:DownloadDBLogFilePortion のオペレーションを実行する権限を有している必要があります。詳細については、「IAM 権限の管理」 を参照してください。
以下の AWS CLI コマンドは、所定のインスタンスで利用可能なログファイルをリストします。
以下のコマンドを用いて、このリストから必要なファイル名を選択し、必要なファイルをダウンロードできます。
スクリプトを用いて、所定の時間ウィンドウの間に生成されたログファイルをダウンロードする手順を自動化できます。サンプルのスクリプトについては、GitHub リポジトリの get_rds_log_files.sh を参照してください。スクリプトは、AWS CLI 認証を設定するための aws configure
をすでに実行しているか、または PostgreSQL ログファイルのダウンロードを許可する割り当てられたロールで EC2 インスタンスから実行していることを想定しています。スクリプトは、RDS または Aurora PostgreSQL インスタンス名および日付範囲を引数として想定しており、所定の時間ウィンドウの間にそのインスタンスのために生成されたログファイルをダウンロードします。
デフォルトでは、このスクリプトは、デフォルトの標準形式 (stderr
) ファイルをダウンロードします。CSV 形式のログファイルを使用している場合、「-c 1
」の引数を使用してダウンロードできます。
日付範囲を指定しない場合、このスクリプトは、その日に生成されたすべてのログファイルをダウンロードします。
以下は、スクリプトのヘルプ出力です。
以下は、EC2 ジャンプサーバーからのスクリプトのサンプル出力です。
カスタムスクリプトまたは pgBadger などのPostgreSQL ログファイルの分析ツールを使用して、分析のためにログファイルをダウンロードする必要があります。
log_fdw を使用して外部テーブル経由でログデータを表示する
SQL インターフェイスを使用して PostgreSQL ログにアクセスするには、log_fdw
の拡張を使用します。ログファイル上部に外部テーブルを作成し、SQL クエリで利用できます。外部テーブルは、この PostgreSQL サーバーの外部に存在するデータにアクセスするメカニズムを提供します。いくつかの手順を行うことで、必要なログファイルにリンクし、トラブルシューティングまたはモニタリングアクティビティを開始できます。詳細については、PostgreSQL の文書の「外部テーブル」をご覧ください。
CSV 形式は log_fdw
拡張を使用するのに便利です。stderr
ログファイルに作成された外部テーブルは、ログイベントデータのある単一の列を含みます。CSV 形式のログファイルについては、外部テーブルに複数の列があり、分析を容易にしています。
以下のセクションは、この拡張の使用方法および単一の関数の呼出しで利用可能なログファイルを読み込むカスタム関数についての詳細を提供しています。
基本的な使用手順
log_fdw
を設定し、使用するには、次の手順を実行します。
psql
またはpgAdmin
などのクライアントを使用して PostgreSQL データベースに接続します。- 以下の SQL ステートメントを使用して
log_fdw
を作成します。 - 以下の SQL ステートメントとともに log_fdw を使用して外部サーバーを作成します。
- 以下の SQL ステートメントで最近のログファイルのリストを取得します。
- 以下の SQL ステートメントを使用して、外部テーブルとして、これらのファイルのいずれかを読み込みます。
- 先行するステートメントが正常に行われると、外部テーブルの分析が可能となります。以下のコードを使用します。
- 外部テーブルを使用して完了したら、以下の SQL ステートメントを使用してドロップします。
単一テーブルおしてログファイルを読み込む
ログファイルの数が少ない場合は、前の手順が有用です。分析のための外部テーブルを簡単に作成できます。しかし、すべての利用可能なログファイルを見る必要がある場合、個別に各ファイルを読み込むことは時間の無駄です。
この問題に対処するには、GitHub リポジトリで利用可能なload_postgres_log_files()
のカスタム関数を使用します。この関数は、利用可能なログファイルを単一テーブルとして読み込むプロセスを簡素化します。以下の手順を実行します。
- GitHub リポジトリから
load_postgres_log_files
関数の SQL ファイルをダウンロードします。 load_postgres_log_files
の関数を作成します。- 以下のステートメントを実行して、ログファイルを読み込みます。
- 以下のコードのあるログを見ます。
- 必要に応じて、手順 2 を繰り返して、最後の読み込み以降に生成された新しいログファイルをピックアップします。
- ログ分析を完了したら、以下のコードでテーブルをドロップします。
以下は、この関数の主要な機能です。
- デフォルトでは、
postgres_logs
と名付けられたテーブルがスキーマログで作成されます。 - 引数を介してスキーマ名とテーブル名を変更できます。
- 既存のテーブルはドロップされます。
- スキーマ
ログ
が存在しない場合、作成されます。 - 各ログファイルは、外部テーブルとして読み込まれ、
logs.postgres_logs
のテーブルの子となります。 - デフォルトでは、関数は、CSV ファイル形式のログを探します。CSV ファイルが見つからない場合、標準エラー形式のログファイルに戻ります。このふるまいを変更するには、
v_prefer_csv
の引数を false に設定します。 - 以下の日、時間、分ベースのログファイル名形式は、CSV および 非 CSV 出力ファイルをサポートしています。
postgresql.log.YYYY-MM-DD
postgresql.log.YYYY-MM-DD-HH
postgresql.log.YYYY-MM-DD-HHMI
- CSV 形式を使用することにより、各ログファイルについて作成された子テーブルにチェック制約が追加されます。
独自のスキーマおよびテーブル名を使用するには、以下のとおり手順 3 のコマンドを実行します。
手動でリロードすることなく、最新のログが常にこのテーブルで利用可能な状態にしておく必要がある場合、1 時間ごとにこの関数を呼び出すための cron ジョブまたはスケジュールされた Lambda 関数を書き込むことができます。詳細については、「Rate または Cron を使用したスケジュール式」をご覧ください。
まとめ
RDS および Aurora PostgreSQL ログは、データベースアクティビティについての有用な情報を提供します。これらの情報は、パフォーマンス調整およびトラブルシューティングに役立ちます。この投稿では、ログの使い方を説明しました。これで、ニーズに合った方法を選択できるようになりました。
質問やご意見がある場合は、コメント欄にお考えを投稿してください。
本稿の執筆者について
Yaser Raja は、アマゾン ウェブ サービスでプロフェッショナルサービスチームのシニアコンサルタントを務めています。顧客と協力し、AWS クラウドでスケーラブルかつ可用性と安全性の高いソリューションの構築に取り組んでいます。彼の専門分野は、オンプレミスのデータベースの AWS RDS や Aurora PostgreSQL への同種間または異種間の移行です。