このページでは、想定どおりに通知が届かない理由と、そのような状況に備えるための方法を説明します。
通知が受信されない
通知チャンネルを構成し、インシデントが発生したときに通知が届くようにします。通知は受信されません。
失敗の原因に関する情報を収集するには、次の手順を行います。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] である結果を選択します。
- 適切な Google Cloud プロジェクトを選択します。
ログに対して通知チャンネル イベントをクエリします。
- [ログ名] メニューを開き、[notification_channel_events] を選択します。
- [重大度] メニューを開き、[エラー] を選択します。
- 省略可: カスタム期間を選択するには、期間セレクタを使用します。
- [クエリを実行] をクリックします。
前述の手順は、次のクエリを作成します。
resource.type:"stackdriver_notification_channel" logName="projects/PROJECT_ID/logs/monitoring.googleapis.com%2Fnotification_channel_events" severity=ERROR
通常、障害情報は、概要行と
jsonPayload
フィールドに含まれます。たとえば、ゲートウェイ エラーが発生すると、概要行に「failed with 502 Bad Gateway」が表示されます。
Webhook 通知を受信できない
Webhook 通知チャネルを構成して、インシデントが発生したときに通知されるのを待ちます。通知は受信されません。
プライベート エンドポイント
エンドポイントが公開されていない限り、通知に Webhook を使用することはできません。
この状況を解決するには、この通知トピックへの pull サブスクリプションと組み合わせて、Pub/Sub 通知を使用します。
Pub/Sub 通知チャンネルを構成すると、インシデント通知は Identity and Access Management コントロールのある Pub/Sub キューに送信されます。Pub/Sub トピックにクエリまたはリッスンできるすべてのサービスでこれらの通知を使用できます。たとえば、App Engine、Cloud Run、Compute Engine 仮想マシンで実行されているアプリケーションでこれらの通知を使用できます。
pull サブスクリプションを使用する場合、メッセージの受信を待機するリクエストが Google に送信されます。これらのサブスクリプションには Google へのアクセスが必要ですが、ファイアウォールや受信アクセス用のルールは必要ありません。
パブリック エンドポイント
配信が失敗した理由を特定するには、Cloud Logging ログエントリで失敗情報を調べます。
たとえば、ログ エクスプローラを使用し、次のようなフィルタによって、通知チャネル リソースのログエントリを検索できます。
resource.type="stackdriver_notification_channel"
Pub/Sub 通知を受信できない
Pub/Sub 通知チャンネルを構成しても、通知を受信しません。
この問題を解決するには、次のことを試してください。
通知サービス アカウントが存在することを確認します。サービス アカウントが削除されている場合、通知は送信されません。
サービス アカウントが存在することを確認するには、次のようにします。
-
Google Cloud コンソールの [IAM] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。
次の命名規則を持つサービス アカウントを検索します。
service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
このサービス アカウントが一覧にない場合は、[Google 提供のロール付与を含む] を選択します。
通知のサービス アカウントが存在しない場合は、Monitoring がサービス アカウントを作成するための Pub/Sub 通知チャンネルを作成するプロセスを開始する必要があります。
-
Google Cloud コンソールで、notifications [アラート] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。
- [Edit notification channels] をクリックします。
[Pub/Sub] セクションで、[新しく追加] をクリックします。
通知サービス アカウントが存在しない場合、Monitoring によって作成されます。[Pub/Sub チャンネルの作成] ダイアログに、通知サービス アカウントの名前が表示されます。
通知チャンネルを追加しない場合は、[キャンセル] をクリックします。それ以外の場合は、通知チャンネルの作成を完了し、[チャンネルを追加] をクリックします。
サービス アカウントに Pub/Sub トピックをパブリッシュする権限を付与します。
- 新しいブラウザタブで、[通知チャンネルの作成] ドキュメントを開きます。
- [Pub/Sub] タブを選択し、そのページの [サービス アカウントを承認する] セクションの手順に沿って操作します。
-
通知のサービス アカウントに、目的の Pub/Sub トピックの通知を送信する権限があることを確認します。
サービス アカウントの権限を表示するには、Google Cloud コンソールか Google Cloud CLI コマンドを使用します。
- Google Cloud コンソールの [IAM] ページに、各サービス アカウントのロールが一覧表示されます。
- Google Cloud コンソールの Pub/Sub トピックページに、各トピックが一覧表示されます。トピックを選択すると、[権限] タブに、サービス アカウントに付与されているロールが一覧表示されます。
すべてのサービス アカウントとそれらのロールを一覧参照するには、次の Google Cloud CLI コマンドを実行します。
gcloud projects get-iam-policy PROJECT_ID
このコマンドに対するレスポンスの一部を次に示します。
serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/monitoring.notificationServiceAgent - members: [...] role: roles/owner - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/pubsub.publisher
コマンド レスポンスにはロールのみが含まれ、トピック オーソリティは含まれません。
特定のトピックの IAM バインディングを一覧参照するには、次のコマンドを実行します。
gcloud pubsub topics get-iam-policy TOPIC
このコマンドのレスポンスの例を次に示します。
bindings: - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwXPRb5WDPI= version: 1
通知サービス アカウントを承認する方法については、サービス アカウントを承認するをご覧ください。
稼働時間チェックのアラート ポリシーの通知が届かない
仮想マシン(VM)が再起動またはシャットダウンした場合に通知を受け取るには、指標 compute.googleapis.com/instance/uptime
をモニタリングするアラート ポリシーを作成します。指標データがない場合にインシデントを生成するように条件を作成して構成します。条件の定義に、Monitoring Query Language(MQL)1 は使用しません。仮想マシン(VM)が再起動またはシャットダウンしているときは通知は届きません。
このアラート ポリシーは、RUNNING
状態の Compute Engine VM インスタンスの時系列のみをモニタリングします。他の状態(STOPPED
や DELETED
など)にある VM の時系列は、条件が評価される前に除外されます。この動作のため、VM インスタンスが実行されているかどうかを判断するために、指標の不在アラート条件でアラート ポリシーを使用することはできません。VM インスタンスの状態の詳細については、VM インスタンスのライフサイクルをご覧ください。
この問題を解決するには、アラート ポリシーを作成して稼働時間チェックをモニタリングします。プライベート エンドポイントの場合は、プライベート稼働時間チェックを使用してください。
稼働時間チェックに関するアラートの代わりに、アラート ポリシーを使用してデータがないことをモニタリングすることもできます。データがないことをアラートするのではなく、稼働時間チェックについてアラートすることを強く推奨します。指標がないことについてのアラート ポリシーでは、Monitoring データの利用可否に関する一時的な問題によって誤検出される可能性があります。
ただし、稼働時間チェックを使用できない場合は、MQL でアラート ポリシーを作成して、VM がシャットダウンされたことを通知できます。MQL 定義の条件では、時系列データが、VM インスタンスの状態に基づいて事前にフィルタリングされることはありません。MQL では VM の状態によってデータがフィルタリングされないため、これを使用して、シャットダウンされた VM からデータの不在を検出できます。
compute.googleapis.com/instance/cpu/utilization
指標をモニタリングする次の MQL 条件を検討してください。
fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
|absent_for 3m
この条件でモニタリングしている VM がシャットダウンされると、3 分後にインシデントが生成され、通知が送信されます。absent_for
の値は 3 分以上である必要があります。
MQL の詳細については、MQL のアラート ポリシーをご覧ください。
1: MQL は表現力に優れたテキストベースの言語であり、Cloud Monitoring API 呼び出しや Google Cloud コンソールで使用できます。Google Cloud コンソールを使用するときに MQL で条件を構成するには、コードエディタを使用する必要があります。
リクエスト数のアラート ポリシーの通知が受信されない
完了したリクエストの数をモニタリングする必要があります。指標 serviceruntime.googleapis.com/api/request_count
をモニタリングするアラート ポリシーを作成しましたが、リクエスト数が構成されたしきい値を超えた場合に通知されません。
リクエスト数の指標のアライメント期間の最大値は 7 時間 30 分です。
この問題を解決するには、アラート ポリシーでアライメント期間の値を確認します。値がこの指標の最大値を超えている場合は、アライメント期間が 7 時間 30 分以下になるよう短縮します。