アラート: Pub/Sub トピックへの稼働時間チェック

1. はじめに

最終更新日: 2023 年 6 月 21 日

可用性の稼働時間チェックに関するアラート

稼働時間チェックに関するアラートを使用すると、サービスに影響する可能性のある問題を迅速に特定して解決できます。サービス停止のアラートを受け取ることで、ユーザーや顧客への影響を最小限に抑えるための対策を講じることができます。

アップタイム チェックは間隔を置いて行われます。最短の間隔は 60 秒です。60 秒を超える粒度が必要な場合は、ログベースのアラートを通じてエラーコードを動的イベントとしてモニタリングすることも、可用性の追加の指標として役立ちます。60 秒以上の間隔が許容される場合は、稼働時間チェックを使用すると、追加の構成をほとんど行わずにサービスを簡単に測定できます。

サービスが利用できない場合、トラフィックがなくても稼働時間チェックで問題が検出されます。一方、トラフィックは、メンテナンスやアップグレードなどの要因だけでなく、悪天候やスポーツ イベントなど、システムの外部要因によっても影響を受ける可能性があります。

アップタイム チェックを使用するタイミングの詳細については、Google Cloud リソースのアップタイムを確保するをご覧ください。

アラート通知チャネルとしての Pub/Sub トピック

Pub/Sub トピックは、Google Cloud Monitoring 通知チャンネルとして使用して、Pub/Sub サブスクリプションにアラートを送信できます。これにより、Cloud Monitoring アラートをサードパーティの通知サービスなどの他のシステムと統合できます。

Pub/Sub トピックを通知チャンネルとして使用するには、まず Pub/Sub トピックと Pub/Sub サブスクリプションを作成する必要があります。次に、Pub/Sub トピックを宛先として使用する Cloud Monitoring 通知チャンネルを作成する必要があります。

アラートがトリガーされると、Cloud Monitoring は Pub/Sub トピックにメッセージを送信します。Pub/Sub サブスクリプションのサブスクライバーは、メッセージを処理して適切な措置を講じることができます。

作成するアプリの概要

この Codelab では、アプリをデプロイし、Pub/Sub トピックを作成し、Pub/Sub トピックを通知チャネルとして使用するアプリの稼働時間チェック アラートを作成します。

学習内容

  • Pub/Sub トピックを作成する方法
  • 稼働時間チェックとアラートを作成する方法

この Codelab では、稼働時間チェックのアラートを作成する方法について説明します。関連のない概念とアプリケーション コードについては軽く触れるにとどめ、そのままコピーして貼り付けられるようにしています。

必要なもの

  • 次の権限を持つ Google Cloud アカウント。
  • Cloud Run アプリケーションをデプロイする
  • Pub/Sub トピックを作成する
  • 稼働時間チェックを作成する
  • アラートを作成する

2. 設定方法

Google Cloud プロジェクトを選択または作成する

既存のプロジェクトを選択するには、プルダウンを使用します。

b35bf95b8bf3d5d8.png

Google Cloud で新しいプロジェクトを作成する手順は次のとおりです。

  1. Google Cloud Platform Console に移動します。
  2. [プロジェクトを作成] ボタンをクリックします。
  3. プロジェクトの名前を入力します。
  4. プロジェクトの請求先アカウントを選択します。
  5. [作成] ボタンをクリックします。

プロジェクトが作成され、プロジェクト ダッシュボードが表示されます。これで、Google Cloud サービスの使用を開始できます。

各ステップの詳細は次のとおりです。

  • 名前: プロジェクト名は組織内で一意である必要があります。
  • 請求先アカウント: 既存の請求先アカウントを使用することも、新しいアカウントを作成することもできます。
  • 作成: 必要な情報をすべて入力したら、[作成] ボタンをクリックしてプロジェクトを作成します。

詳細については、プロジェクトの作成に関する Google Cloud のドキュメントをご覧ください。

3. API アプリケーションをデプロイする

サンプル アプリケーションまたは API の概要

このアプリケーションは、在庫アイテムのリストと特定のアイテムの在庫数を取得する 2 つのオペレーションで REST API エンドポイントを公開するシンプルな Inventory API アプリケーションです。

API をデプロイし、https://<somehost> でホストされていると仮定すると、次のように API エンドポイントにアクセスできます。

https://<somehost>/inventory

これにより、在庫レベルがわかるすべての商品アイテムが一覧表示されます。

https://<somehost>/inventory/{productid}

これにより、その商品の productid と手持ち在庫レベルを含む単一のレコードが提供されます。

返されるレスポンス データは JSON 形式です。

: この API アプリケーションはデモ専用であり、安全で堅牢な API 実装を表すものではありません。このラボの主な目的である Google Cloud Operations を理解するために、すぐに利用できるアプリケーションを用意することを目的としています。

サンプルデータと API リクエスト/レスポンス

簡単にするため、このアプリはバックエンドのデータベースで動作していません。これには、3 つの商品 ID のサンプルと、その在庫レベルが含まれています。

製品 ID

手持ち在庫レベル

I-1

10

I-2

20

I-3

30

API リクエストとレスポンスの例を以下に示します。

API リクエスト

API レスポンス

https://<somehost>/inventory

[ { "I-1": 10, "I-2": 20, "I-3": 30 }]

https://<somehost>/inventory/I-1

{ "productid": "I-1", "qty": 10}

https://<somehost>/inventory/I-2

{ "productid": "I-2", "qty": 20}

https://<somehost>/inventory/I-200

{ "productid": I-200, "qty": -1}

リポジトリのクローンを作成する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

bce75f34b2c53987.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

f6ef2b5f13479f3a.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

gcloud を設定する

Cloud Shell でプロジェクト ID を設定し、PROJECT_ID 変数として保存します。

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

次のコマンドを実行します。

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

これにより、このフォルダに cloud-code-sample-repository というフォルダが作成されます。

(省略可)Cloud Shell でアプリケーションを実行する

次の手順に沿って、アプリケーションをローカルで実行します。

  1. ターミナルから、次のコマンドを使用して API の Python バージョンに移動します。

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. ターミナルで次のコマンドを入力します(このドキュメントの作成時点では、Cloud Shell に Python 3.9.x がインストールされており、デフォルト バージョンを使用します)。ノートパソコンでローカルに実行する場合は、Python 3.8 以上を使用できます。

$ python app.py

  1. 次のコマンドを実行して、Python サーバーをローカルで起動できます。

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

[ポート 8080 でプレビュー] をクリックします。5. ブラウザ ウィンドウが開きます。404 エラーが表示されますが、問題ありません。URL を変更して、ホスト名の後に /inventory だけが続くようにします。

たとえば、私のマシンでは次のようになります。

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

これにより、前述のように在庫アイテムのリストが表示されます。

709d57ee2f0137e4.png

  1. ターミナルに移動して Ctrl+C キーを押すと、サーバーを停止できます。

アプリケーションをデプロイする

この API アプリケーションを Cloud Run にデプロイします。このプロセスでは、gcloud コマンドライン クライアントを使用して、コードを Cloud Run にデプロイするコマンドを実行しました。

ターミナルから、次の gcloud コマンドを実行します。

$ gcloud run deploy --source .

このツールでは複数の質問が表示されます。以下に、その一部を示します。

  1. サービス名(python-flask-api): このデフォルトを使用するか、my-inventory-api などの名前を選択します。
  2. API [run.googleapis.com] not enabled on project [613162942481]. 有効にして再試行しますか?(数分かかります)(y/N)? Y
  3. リージョンを指定してください: 31(us-west-1)を選択します。
  4. API [artifactregistry.googleapis.com] not enabled on project [613162942481]. 有効にして再試行しますか?(数分かかります)(y/N)? Y
  5. ソースからデプロイするには、ビルドされたコンテナを保存する Artifact Registry Docker リポジトリが必要です。リージョン [us-west1] に [cloud-run-source-deploy] という名前のリポジトリが作成されます。
  6. Do you want to continue (Y/n)? Y
  7. Allow unauthenticated invocations to [my-inventory-api] (y/N)? Y

最終的に、このプロセスが開始され、ソースコードが取得されてコンテナ化され、Artifact Registry に push されてから、Cloud Run サービスとリビジョンがデプロイされます。このプロセスには 3 ~ 4 分かかることがあります。プロセスが完了すると、サービスの URL が表示されます。

実行例を以下に示します。

87ba8dbf88e8cfa4.png

アプリケーションをテストする

アプリケーションを Cloud Run にデプロイしたので、次のように API アプリケーションにアクセスできます。

  1. 前の手順で取得したサービス URL をメモします。たとえば、私の設定では https://my-inventory-api-bt2r5243dq-uw.a.run.app と表示されます。これを <SERVICE_URL> とします。
  2. ブラウザを開き、API エンドポイントの次の 3 つの URL にアクセスします。
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

これは、前のセクションで API リクエストとレスポンスのサンプルとともに提供した仕様に準拠している必要があります。

Cloud Run からサービスの詳細を取得する

API サービスをサーバーレス コンピューティング環境である Cloud Run にデプロイしました。Google Cloud コンソールから Cloud Run サービスにいつでもアクセスできます。

メインメニューから Cloud Run に移動します。これにより、Cloud Run で実行されているサービスのリストが表示されます。デプロイしたサービスが表示されます。選択した名前に応じて、次のような画面が表示されます。

2633965c4bc957cc.png

[サービス名] をクリックして、詳細を表示します。サンプルの詳細は次のとおりです。

33042ae64322ce07.png

URL は、ブラウザに入力して、デプロイしたばかりの Inventory API にアクセスできるサービス URL です。指標などの詳細を確認します。

それでは、Google Cloud Operations Suite から始めましょう。

4. アラート通知を受信する Pub/Sub トピックを作成する

Pub/Sub トピックを作成するには、Google Cloud コンソールで次の手順を行います。

  1. 検索ボックスで Pub/Sub を検索し、Pub/Sub に移動します。935028bd8f6328ef.png
  2. [トピック] タブをクリックします(まだクリックしていない場合)。7fd8bf91386a88fd.png
  3. [トピックを作成] ボタンをクリックします。cd9d197f9023c41b.png
  4. トピックの名前を入力します。

173f313b4a3c4934.png

  1. [作成] ボタンをクリックします。ca9a02477da21a44.png
  2. コピー アイコン ボタンを使用して、トピック名をコピーします。これは次のセクションで必要になります。

20848252ee83df93.png

5. 稼働時間チェックを作成する

Google Cloud Run アプリケーションの稼働時間チェックを作成するには:

  1. Google Cloud Platform Console に移動します。
  2. [モニタリング] タブをクリックします。
  3. [稼働時間チェック] タブをクリックします。
  4. ページの上部にある [アップタイム チェックを作成] ボタンをクリックします。

96561799ca500777.png

  1. 次の値を使用します。
  2. プロトコル : HTTPS
  3. リソースの種類 : URL
  4. ホスト名 : Cloud Run サービス URL の一部を https なしで入力します。以下の画面に例を示します。サービス URL がわからない場合は、メインの Google Cloud コンソールから Cloud Run に移動し、前述のように Cloud Run サービスの詳細に移動して、サービス URL を取得します。
  5. パス : healthy
  6. 確認頻度: 1 分

342865c6d921ff41.png

  1. [続行] をクリックする
  2. [コンテンツ マッチングが有効] をオンにする
  3. [Response Content] に「All Izz Well」と入力します。この文字列は、完全なレスポンスを送信するときにアプリケーションにすでに含まれています。
  4. Keep

6c9ad336b5479478.png

  1. [許容される HTTP レスポンス コード] を [レスポンス コード クラス] に設定し、[2xx] を唯一のレスポンス コード クラスとして設定します。これにより、2xx のレスポンス コードのみが文字列に対して評価され、それ以外のものは自動的にチェック失敗とカウントされます。5a75d8a9e8a11dd4.png
  2. [続行] をクリックする
  3. 通知チャネルとして Cloud Pub/Sub トピックを選択し、[OK] をクリックします。

d00db9f6ac56d07c.png

  1. [続行] をクリックする
  2. わかりやすいタイトルを追加する d639135da780cce3.png
  3. [テスト] ボタンをクリックします。

968753a66ed43a75.png

  1. 確認し、準備ができたら [作成] ボタンをクリックします。72e5e2081a36d902.png

稼働時間チェックが作成され、Cloud Run アプリケーションのモニタリングが開始されます。稼働時間チェックのステータスは、[稼働時間チェック] タブで確認できます。

3fd026b0c07ef4ec.png

6. 完了

おめでとうございます。稼働時間チェックを構成して、Pub/Sub にアラートを送信できるようになりました。