コンテンツに移動
データベース

Cloud SQL のデータベースのログに基づいてアラートを作成する方法

2021年10月11日
https://storage.googleapis.com/gweb-cloudblog-publish/images/cloud_logging_OUrfE4R.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2021 年 9 月 29 日に、Google Cloud blog に投稿されたものの抄訳です。

今までの人生で起きたことを、すべて鮮明に思い出せるとしたらどうなるか、想像してみてください。人間には無理な話ですが、データベースにはそれができます。自動バックアップからクエリまで、データのあらゆる変更は記録され、ログに残されます。このため、データベースの動作をトラブルシューティングする際には、ログが非常に役に立ちます。Cloud SQL は、Cloud Logging を使用して、さまざまな種類のログを保存します。これにより、データベースの動作や、Engine ログ、Cloud SQL Authプロキシログ監査ログといったさまざまなイベントが発生するタイミングについて、より詳しく知ることができます。

今回のブログ投稿では、Cloud SQL インスタンスのログを表示し、それらのログからデータベースで発生するデッドロックの数を確認するための指標を作成し、その指標に基づいてアラートを作成する方法を紹介します。Cloud Console のビジュアル ツールである ログ エクスプローラ を使うと、簡単にフィルタリングができ、ナビゲーションに便利なヒストグラムを使用できます。なお、ログは gcloud のコマンドライン ツールを使って調べることもできます。

ログに移動

特定の Cloud SQL インスタンスのログは、以下の方法で最も簡単に探すことができます。

  • Cloud Console でインスタンスの [概要] ページに移動します。

  • [オペレーションとログ] カードまで下にスクロールし、[[データベース エンジン] のエラーログを表示] をクリックします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_database_log_insights.max-2000x2000.jpg

特定のインスタンスのログを表示するように事前にフィルタリングされたログ エクスプローラーにリダイレクトされます。

左側の [ログフィールド] フィルターを使って、さらにログをフィルタリングし、エラーのみを表示できます。

このフィルターを適用すると、エラー(私の場合は「デッドロックが検出されました」と出ました)がインスタンスのログリストに何度も表示されるという、私と同じ状況になるかもしれません。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_database_log_insights.max-2000x2000.jpg

UI を使用すると、どのくらいの頻度でこの現象が発生するか、どのデータベースで発生するか(いつも同じものなのか)をさらに調べることができます。しかし、常にこのリストで状況を見張っておく必要はありません。どれくらいの頻度で発生しているかをダッシュボードにチャートで表示し、状況がエスカレートした場合にはそのチャートに基づいてアラートを作成して通知するようにしています。

既存の指標として、logging.googleapis.com/log_entry_count があり、これは指定した重大度のエントリーがどれだけログに取り込まれたかを示すものです。しかし、私が特に知りたいのは、「デッドロックが検出されました」というメッセージのエラーがいくつ記録されたか、そしてインスタンスのどのデータベースが影響を受けたか、ということです。

ここで、ログベースの指標が登場します。これは、ログの内容に基づいて時系列の指標を作成する方法です。

ログベースの指標を作成する

私が気になっているログエントリは、非常に特殊な形式をしています(上の画像に表示されているクエリの結果を展開してみるとわかります)。

読み込んでいます...

つまり、データベースやユーザーの情報をログから解析し、その情報をログベースの指標にラベルとして追加することができるのです。

この手順に沿って、次のようなログベースの指標を作成します。

  • 名前: pg_deadlocks

  • 指標のタイプ: counter

  • フィルタの選択(上記のサンプルログの値と一致していることに注目してください): 

読み込んでいます...

  • 「データベース」ラベル

    • フィールド名: textPayload

    • 正規表現: db=(\w+)

  • 「ユーザー」ラベル: 

    • フィールド名: textPayload

    • 正規表現: user=(\w+)

Cloud Console はラベルを作成する際に非常に便利で、正規表現のプレビュー UI を提供してくれます(スクリーンショットで、緑色にハイライトされた単語をご覧ください)。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_database_log_insights.max-2000x2000.jpg

数分後、新たに作成した指標がデータを表示し始めました。便利なリンクを使うと、Metrics Explorer で指標を見ることができます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_database_log_insights.max-1900x1900.jpg

データが正しく収集され、ユーザー情報とデータベース情報の両方が抽出されていることを確認します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5_database_log_insights.max-2000x2000.jpg

この時点から、この指標は他のシステム指標と同様に動作します。ダッシュボードに追加したり、値に基づいてアラートを作成したりできます。アプリケーション パフォーマンスのモニタリング(APM)ツールにエクスポートすることもできます。

ログベースの指標の注意事項

  • 指標を作成した瞬間からデータ収集が開始され、バックフィルはありません。

  • それぞれ、GCP プロジェクトで個別に定義する必要があります。

  • この指標は有料です。詳しくは料金に関するドキュメントをご確認ください。

これは、ログから得られる付加価値のほんの一例です。同じ手順でより多くの指標を作成し、状況に特化したインサイトを作成できます。

ぜひ今すぐ Cloud SQL インスタンスでお試しください。

- ソフトウェア エンジニア Urszula Krukar

投稿先