ログ エクスプローラを使用して Cloud SQL for PostgreSQL や AlloyDB のカスタム指標を作成する
Svitlana Gavrylova
Data Management Practice Lead, UK/I
Indu Akkineni
Database Engineer, Cloud SQL
※この投稿は米国時間 2024 年 6 月 29 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud には、Cloud SQL for PostgreSQL、AlloyDB for PostgreSQL、Spanner など、PostgreSQL 互換のワークロードを実行するためのオプションがいくつか用意されています。データベースが本番環境において最適な状態で実行されていることを確認するには、ロック状態、データベース ログ内の特定のエラーの出現回数など、データベースのパフォーマンスのさまざまな側面をモニタリングする必要があります。また、データベースの健全性を改善するための最良の方法は、デッドロック、ジョブの失敗、データベース指標の傾向の変化など、ユーザーに影響を与える可能性のある問題に対するエラーログをモニタリングすることです。
ログ エクスプローラは、Cloud SQL for PostgreSQL または AlloyDB のインスタンスのログを表示および分析できる Google Cloud のツールです。ログ エクスプローラを使用して、カスタム指標を作成することもできます。このブログでは、これらの実行方法について例を挙げて説明します。基本的に、postgres.log に push されたエントリは、ログ エクスプローラを使用することで、新しい指標をモニタリングおよび公開するために使用できます。そのログから、追跡やアラートの対象にする条件やエラーを厳密に指定できます。
また、ログ エクスプローラを使用して新しいカスタム指標を作成する一連の手順についても説明します。これにより、Cloud SQL や AlloyDB 上で実行されている PostgreSQL データベースのモニタリングを強化できます。
ログ エクスプローラを使用して新しい指標を作成する
まず、モニタリングするエラーの種類を決めます。
たとえば、このデータベース スキーマの例では、列が 1 つだけあるテーブルを作成します。
このテーブルへの挿入中にエラーを発生させてみます。
一意のキーの制約違反をモニタリングすることで、アプリケーション ロジックのエラーや、データベースのアップストリーム システムでの変更について早期に把握できます。
したがって、「ERROR: duplicate key value violates unique constraint ...(キーの値が重複しており、一意の制約に違反している)」エラーについて、一定期間における発生回数を表示するカスタム指標を作成することは有益です。
重複キー違反の新しい指標を作成する手順は次のとおりです。
1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。画面には以下のように表示されます。
2. [指標を作成] ボタンをクリックして新しい指標を作成します。
3. 次に、作成する指標の指標タイプと指標名を指定します。
4. この後、CloudSQL または AlloyDB for PostgreSQL のログでモニタリングする指標を定義する指標式を入力します。
この例では、次のような式になります。
フィルタをより明確に定義するために、次のような、より正確なフィルタ条件を使用できます。
5. 最後に、[作成] ボタンをクリックして新しい指標を作成します。新しい指標がログ エクスプローラの指標リストに追加されます。これで、ログ エクスプローラのツールを使用して指標データを表示および分析できるようになり、[ログベースの指標] タブにもリストされます。
お疲れ様でした。これで、新しいログベースの指標が定義され、使用できるようになりました。以下のように、作成した指標のログをログ エクスプローラで表示できます。
詳細については、Cloud SQL for PostgreSQL のドキュメントおよびログ エクスプローラのドキュメントをご覧ください。
また、CloudSQL または AlloyDB for PostgreSQL のインスタンスでモニタリングできる事前構成済みのデフォルトの指標リスト(https://cloud.google.com/sql/docs/postgres/admin-api/metrics、https://cloud.google.com/alloydb/docs/monitor-instance#metrics-pg)もご参照ください。
このカスタム指標を取得する実際のプロセスには、Google Cloud が提供する複数のサービスが関与しています。以下に、アーキテクチャを図で示します。
図: ログ エクスプローラに基づくカスタム指標
次に、以下の形式のエラー メッセージが postgres.log に表示されたときにトリガーされる一連のアクションを考えてみましょう。
このエラー メッセージが CouldSQL または AlloyDB for PostgreSQL のエラーログに表示されると、エラーが検出されて Google Cloud の Logging システムに挿入され、その後、指定されたフィルタ条件とメッセージの重要度に基づいて、表示および集計するためにカスタムのログベースの指標に分類されます。また、CloudSQL for PostgreSQL インスタンス自体のログエントリは、こちらの手順に沿って表示できます。
ログベースの指標に基づいてアラートを作成する
ログベースの指標に基づいてアラートを作成する手順は、https://cloud.google.com/logging/docs/logs-based-metrics/charts-and-alerts の説明をご覧ください。また、以下のように、[ログ エクスプローラ] タブから [アラートを作成] ボタンを使用して、必要なアラートルールを設定することもできます。
アラートの作成中に、アラートに含めるログを指定したり、通知の頻度や自動終了期間を設定したり、通知に使用するチャネルの概要を設定したりできます。
カスタムのログベースの指標の使用例
カスタムのログベースの指標は、さまざまな条件で使用できます。ここでは、ログベースの指標が Cloud SQL や AlloyDB のデータベースのモニタリングに役立つ例について、最も一般的なシナリオの概要を紹介します。PostgreSQL には、インスタンスに対してより詳細なロギングを設定するためのメカニズムがいくつか用意されており、指標によっては、より詳細なロギングが有利に働く可能性があります。
カスタムのログベースの指標が役立つ例には以下のようなものがあります。
-
長時間実行されるクエリのモニタリング: auto_explain.log_min_duration を有効にすると、長時間実行されるクエリの実行計画と、しきい値として指定した時間を超えて実行されるクエリの実行時間を、自動的にログに記録できます。auto_explain.log_nested_statements や auto_explain.log_level のような auto_explain.log_min_duration フラグと組み合わせることで、カスタムのログベースの指標を構築するために必要なデータをログに記録するのに役立つログエントリを有効にできます。
-
VACUUM オペレーションの実行のモニタリング: VACUUM オペレーションの詳細をログに記録するには、実行時に VERBOSE などのオプションを指定します。これらの詳細には、VACUUM が現在処理している特定のテーブルに関するメッセージやその他の統計情報が含まれます。これらのログエントリに基づいてカスタム指標を構築することで、VACUUM オペレーションがどのように実行されているかを把握できます。AlloyDB には、適応型自動バキューム機能があります。詳細は、こちらをご覧ください。
- データアクセス関連の指標のモニタリング: CloudSQL と AlloyDB for PostgreSQL では、pgAudit 拡張機能を利用できます。詳細は、こちらをご覧ください。また、pgaudit.log フラグを設定することで、セッション ロギングを有効にして構成できます。このフラグは、インスタンス、データベース、ロールレベルで有効にでき、pgAudit がログに記録するオペレーションの範囲と種類を制御します。pgAudit によって記録されたメッセージのログベースの指標を作成するには、logName が「data_access」であるログ エクスプローラの指標式を使用する必要があります。以下に例を示します。
- Postgres のデバッグレベルを設定してロギングを有効にする: さらに、PostgreSQL データベースでは、RAISE ステートメントを使用して、アプリケーション固有のメッセージや SQL コード(ストアド プロシージャなど)からのさまざまなレベルのエラーをログに記録できます。 さまざまなレベル(NOTICE など)の対応するレコードがログ エクスプローラに表示され、それらのメッセージに基づいてカスタムのログベースの指標を設定することもできます。たとえば、RAISE ステートメントを使用した非常に単純なストアド プロシージャの挿入オペレーションの失敗時の例は次のようになります。
アラートの作成方法やデータベースのモニタリングに利用できるツールの概要については、https://cloud.google.com/alloydb/docs/monitor-instance および https://cloud.google.com/sql/docs/postgres/monitor-instance をご覧ください。また、Google Cloud Monitoring ダッシュボードを使用して、カスタムのログベースの指標の可視化を試すこともできます。詳細は、https://cloud.google.com/monitoring/dashboards#create_a_new_chart をご覧ください。
ー UK/I、データ マネジメント担当プラクティス リード Svitlana Gavrylova
ー Cloud SQL、データベース エンジニア Indu Akkineni