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

1. はじめに

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

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

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

稼働時間チェックは一定の間隔で行われ、最短の時間は 60 秒です。60 秒を超える粒度が必要な場合は、利用不能であることを示す追加の指標として、ログベースのアラートを通じてエラーコードを動的イベントとしてモニタリングすることも有用です。60 秒以上の間隔が許容される場合は、わずかな追加構成でサービスを簡単に測定できます。

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

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

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

Pub/Sub トピックは、Pub/Sub サブスクリプションにアラートを送信するための Google Cloud Monitoring 通知チャンネルとして使用できます。これにより、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 について

このアプリケーションは、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://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -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] がプロジェクト [613162942481] で有効になっていません。有効にして再試行しますか(数分かかる場合があります)(はい/いいえ)?Y
  3. リージョンを指定してください: 31(us-west-1)を選択してください
  4. API [artifactregistry.googleapis.com] がプロジェクト [613162942481] で有効になっていません。有効にして再試行しますか(数分かかる場合があります)(はい/いいえ)?Y
  5. ソースからデプロイするには、ビルドされたコンテナを保存するための Artifact Registry Docker リポジトリが必要です。リージョン [us-west1] に [cloud-run-source-deploy] という名前のリポジトリが作成されます。
  6. 続行しますか(Y/n)?Y
  7. [my-inventory-api] への未認証の呼び出しを許可する(はい/いいえ)?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 からサービスの詳細を取得する

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

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

2633965c4bc957cc.png

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

33042ae64322ce07.png

URL に注目してください。これはサービス URL だけです。ブラウザに入力して、先ほどデプロイした Inventory API にアクセスできます。指標などの詳細を確認します。

それでは、Google Cloud オペレーション スイートから始めましょう。

4. アラート通知を受け取る Pub/Sub トピックの作成

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

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

173f313b4a3c4934.png

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

20848252ee83df93.png

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

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

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

96561799ca500777.png

  1. 次の値を使用します。
  2. プロトコル : HTTPS
  3. Resource type : URL
  4. Hostname : Cloud Run サービスの URL の部分を https なしで入力します。下の画面にサンプルが表示されます。サービス URL がわからない場合は、メインの Google Cloud コンソールから Cloud Run に移動し、前述のように Cloud Run サービスの詳細に移動してサービス URL を取得します。
  5. パス : healthy
  6. チェックの頻度: 1 分

342865c6d921ff41.png

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

6c9ad336b5479478.png

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

d00db9f6ac56d07c.png

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

968753a66ed43a75.png

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

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

3fd026b0c07ef4ec.png

6. 完了

これで、Pub/Sub にアラートを送信するように稼働時間チェックを構成できました。