合成モニターと稼働時間チェックのトラブルシューティング

このドキュメントでは、ログデータを検索する方法と、合成モニターと稼働時間チェックのエラーをトラブルシューティングする方法について説明します。

ログの検索

このセクションでは、合成モニターと稼働時間チェックのログを見つける方法について説明します。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] である結果を選択します。

  2. 以下のいずれかの操作を行います。

    • 合成モニターまたは稼働時間チェックに関連付けられたすべてのログを検索するには、リソースタイプでクエリを実行します。[リソース] メニューを使用するか、クエリを入力します。

      稼働時間チェックの場合、[リソース] メニューから [稼働時間チェック URL] を選択するか、クエリエディタに次のクエリを入力して、[クエリを実行] をクリックします。

      resource.type="uptime_url"
      

      合成モニターの場合、[リソース] メニューから [ Cloud Run のリビジョン] を選択するか、クエリエディタに次のクエリを入力して、[クエリを実行] をクリックします。

      resource.type="cloud_run_revision"
      
    • 合成モニターまたは稼働時間チェックの実行中に受信したレスポンスに関する情報を含むログを検索するには、次のいずれかを行います。

      • 合成モニターまたは稼働時間チェックの ID を使用してクエリを実行するには、クエリエディタに ID を入力する際に次の形式を使用し、[クエリを実行] をクリックします。

        labels.check_id="my-check-id"
        
      • 合成モニターと稼働時間チェックによって発行されたリクエストに対するレスポンス データを含むログをクエリするには、クエリエディタに次のクエリを入力して、[クエリを実行] をクリックします。

        "UptimeCheckResult"
        

        上記のクエリは、文字列 "UptimeCheckResult" を含むすべてのログエントリに一致します。

      次のようなログが含まれます。

      • 合成モニターまたは稼働時間チェックの ID。labels.check_id フィールドに格納されます。

      • 合成モニターの場合は、Cloud Functions の関数の名前。resource.labels.service_name フィールドに格納されます。

      • トレースデータが収集される場合は、関連するトレースの ID。trace フィールドに格納されます。

    • サービスが Google Cloud サーバーからリクエストを受け取ったことを確認するには、次のクエリをクエリエディタにコピーし、[クエリを実行] をクリックします。

      "GoogleStackdriverMonitoring-UptimeChecks"
      

      protoPayload.ip フィールドには、稼働時間チェック サーバーによって使用されるアドレスの 1 つが格納されます。すべての IP アドレスを一覧表示する方法については、IP アドレスを一覧表示するをご覧ください。

通知のトラブルシューティング

このセクションでは、アラート ポリシーの構成時に発生する可能性のあるエラーとその解決方法について説明します。

通知を受信したため、障害をデバッグしたい

  1. 障害の発生時期を特定するには、次のいずれかを行います。

    • 稼働時間チェックで障害がいつ発生したのかを確認するには、[稼働時間の詳細] ページを表示します。

      1. Google Cloud コンソールで、 [稼働時間チェック] ページに移動します。

        [稼働時間チェック] に移動

        検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

      2. 稼働時間チェックを見つけて選択します。

        [合格したチェック] グラフにはチェックの履歴が表示されます。稼働時間チェックが最初に失敗した日時を特定するには、グラフの期間を変更する必要がある場合があります。期間セレクタは、[稼働時間の詳細] ページのツールバーにあります。

    • 合成モニターで障害がいつ発生したのかを確認するには、[稼働時間の詳細] ページを表示します。

      1. Google Cloud コンソールで、 [合成モニタリング] ページに移動します。

        [合成モニタリング] に移動

        検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

      2. 合成モニターを見つけて選択します。
  2. 関連するログデータを検索する方法については、このページのログの検索のセクションをご覧ください。

稼働時間チェックの失敗が通知されない

稼働時間チェックを構成し、そのチェックの [稼働時間の詳細] ページを表示しています。[合格したチェック] グラフには少なくとも 1 つのチェッカーの失敗が示されているのがわかります。しかし、通知が届いていません。

デフォルトでは、少なくとも 2 つのリージョンのチェッカーが稼働時間チェックへのレスポンスを受信できなかったときに、インシデントを作成してアラートを送信するようにアラート ポリシーが構成されています。これらの障害は同時に発生する必要があります。

単一のリージョンがレスポンスを受信できなかったときに通知を受け取るようにアラート ポリシーの条件を編集できます。ただし、デフォルトの構成を使用することをおすすめします。これにより、一時的な障害によって受信する通知の数を減らすことができます。

アラート ポリシーを表示または編集する手順は次のとおりです。

  1. Google Cloud コンソールで [アラート] ページに移動します。

    アラートに移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. [ポリシー] ペインで [すべてのポリシーを表示] をクリックします。
  3. 表示または編集するポリシーを見つけて、ポリシーの名前をクリックします。

    ポリシーの表示と編集は、[ポリシーの詳細] ページで行うことができます。

公開稼働時間チェックのトラブルシューティング

このセクションでは、公開稼働時間チェックの使用時に発生する可能性のあるエラーとその解決方法について説明します。

公開稼働時間チェックが失敗している

公開稼働時間チェックを構成しますが、検証手順を実行するとエラーが発生します。

以下に、稼働時間チェックが失敗する原因の一部を示します。

  • Connection Error - Refused: デフォルトの HTTP 接続タイプを使用している場合、HTTP リクエストに応答しているウェブサーバーがインストールされていることを確認します。新しいインスタンスにウェブサーバーがインストールされていない場合、接続エラーが発生することがあります。Compute Engine のクイックスタートをご覧ください。HTTPS 接続タイプを使用する場合は、追加の構成手順を実行しなければならないことがあります。ファイアウォールの問題については、稼働時間チェック サーバーの IP アドレスを一覧表示するをご覧ください。
  • 名前またはサービスが見つかりません: ホスト名が正しくない可能性があります。
  • 403 Forbidden: サービスが稼働時間チェッカーにエラーコードを返しています。たとえば、Apache ウェブサーバーのデフォルト構成は、Amazon Linux ではこのコードを返しますが、他のいくつかの Linux バージョンではコード 200 (Success) を返します。Amazon Linux の LAMP チュートリアルまたはご使用のウェブサーバーのドキュメントをご覧ください。
  • 404 Not found: パスが正しくない可能性があります。
  • 408 Request timeout、またはレスポンスなし: ポート番号が正しくない、サービスが稼働していない、サービスがアクセスできない状態になっている、あるいはタイムアウト値が小さすぎる可能性があります。ファイアウォールが稼働時間サーバーからのトラフィックを許可していることを確認してください。詳しくは稼働時間チェック サーバーの IP アドレスを一覧表示するをご覧ください。タイムアウト上限は、[レスポンスの検証] オプションの一部として指定されます。

失敗した公開稼働時間チェックをトラブルシューティングするには、稼働時間チェック中に最大 3 つの ICMP ping を送信するように稼働時間チェックを構成できます。ping は、ネットワーク接続の問題やアプリケーションのタイムアウトなどによって引き起こされる障害を区別するのに役立ちます。詳細については、ICMP ping を使用するをご覧ください。

非公開稼働時間チェックのトラブルシューティング

このセクションでは、非公開稼働時間チェックの使用時に発生する可能性のあるエラーとその解決方法について説明します。

稼働時間チェックの作成に失敗する

Google Cloud プロジェクトの設定により、稼働時間チェックが Service Directory サービスとのやり取りを管理する際に使用するサービス アカウントに割り当てられたロールを変更できなくなる場合があります。 この状況では、稼働時間チェックの作成は失敗します。

このセクションでは、サービス アカウントに必要なロールを付与する方法について説明します。

Google Cloud コンソール

Google Cloud コンソールを使用して非公開稼働時間チェックを作成すると、Google Cloud コンソールは、サービス アカウントに Service Directory のロールを付与するコマンドを発行します。

サービス アカウントにロールを付与する方法については、サービス アカウントを承認するをご覧ください。

API: プロジェクトのスコーピング

1 つの Google Cloud プロジェクトで、Service Directory サービスとプライベート リソースのプライベート稼働時間チェックを初めて作成する際には、リクエストが成功することも失敗することもあります。結果は、プロジェクトでサービス アカウントに対する自動的なロール付与を無効にしているかどうかによって変わります。

  • プロジェクトでサービス アカウントに対する自動的なロール付与が許可されている場合、最初の稼働時間チェックは正常に作成されます。サービス アカウントが作成され、必要なロールが付与されます。

  • プロジェクトでサービス アカウントに対する自動的なロール付与が許可されていない場合、最初の稼働時間チェックの作成は失敗します。サービス アカウントは作成されますが、ロールは付与されません。

稼働時間チェックの作成に失敗した場合は、次の手順を行います。

  1. サービス アカウントを承認する
  2. 権限が反映されるまで数分待ちます。
  3. 非公開稼働時間チェックを再度作成してください。

API: モニタリング対象プロジェクト

モニタリング対象プロジェクトの Service Directory サービスまたは別の Google Cloud プロジェクトのプライベート リソースを対象とする非公開稼働時間チェックを初めて作成するときに、リクエストが失敗し、Monitoring サービス アカウントが作成されます。

サービス アカウントを承認する方法は、使用している Google Cloud プロジェクトの数とその関係によって異なります。 最大 4 つのプロジェクトが関係している可能性があります。

  • 非公開稼働時間チェックを定義したプロジェクト。
  • Service Directory サービスを構成したモニタリング対象プロジェクト。
  • VPC ネットワークを構成したプロジェクト。
  • ネットワーク リソース(VM やロードバランサなど)が構成されているプロジェクト。このプロジェクトには、ここで説明するサービス アカウントの承認でのロールがありません。

最初の稼働時間チェックの作成に失敗した場合は、次の手順を行います。

  1. サービス アカウントを承認する
  2. 権限が反映されるまで数分待ちます。
  3. 非公開稼働時間チェックを再度作成してください。

アクセスが拒否されました

VPC_ACCESS_DENIED という結果で稼働時間チェックが失敗しています。この結果は、ネットワーク構成やサービス アカウントの承認の一部が正しくないことを意味します。

スコーピング プロジェクトまたはモニタリング対象プロジェクトを使用するためのサービス アカウントの承認を確認します。詳細については、稼働時間チェックの作成が失敗するをご覧ください。

プライベート ネットワークへのアクセスについての詳細は、ネットワーク プロジェクトを構成するをご覧ください。

非公開稼働時間チェックからの異常な結果

複数の VM を持つ Service Directory サービスがあり、サービス構成に複数のエンドポイントが含まれています。VM の 1 つをシャットダウンしても、稼働時間チェックは引き続き成功を示します。

サービス構成に複数のエンドポイントがある場合は、ランダムに 1 つが選択されます。選択したエンドポイントに関連付けられた VM が実行されている場合、VM の 1 つが停止していても、稼働時間チェックは成功します。

デフォルトのヘッダー

稼働時間チェックからエラーまたは予期しない結果が返されます。これは、デフォルトのヘッダー値をオーバーライドしている場合に発生することがあります。

非公開稼働時間チェックのリクエストがターゲット エンドポイントに送信されると、リクエストには次のヘッダーと値が含まれます。

ヘッダー
HTTP_USER_AGENT GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)
HTTP_CONNECTION keep-alive
HTTP_HOST Service Directory エンドポイントの IP
HTTP_ACCEPT_ENCODING gzipdeflatebr
CONTENT_LENGTH 稼働時間の投稿データから計算

これらの値をオーバーライドしようとすると、次のようになる可能性があります。

  • 稼働時間チェックがエラーを報告する
  • オーバーライド値は破棄され、テーブル内の値で置き換えられる

データが表示されない

稼働時間チェックが Service Directory サービスとは異なる Google Cloud プロジェクトにある場合、稼働時間チェック ダッシュボードにはデータが表示されません。

稼働時間チェックを含む Google Cloud プロジェクトが、Service Directory サービスを含む Google Cloud プロジェクトをモニタリングしていることを確認します。

モニタリング対象プロジェクトを一覧表示してプロジェクトを追加する方法については、複数のプロジェクトの指標スコープを構成するをご覧ください。

合成モニターのトラブルシューティング

このセクションでは、合成モニターのトラブルシューティングに役立てるために使用できる情報を提供します。

API を有効にした後のエラー メッセージ

合成モニターの作成フローを開くと、少なくとも 1 つの API を有効にするように促されます。API を有効にすると、次のようなメッセージが表示されます。

An error occurred during fetching available regions: Cloud Functions API has
not been used in project PROJECT_ID before or it is disabled.

エラー メッセージでは、API が有効であることを確認することを推奨してから、待機して再試行することを助言します。

API が有効になっていることを確認するには、プロジェクトの [API とサービス] ページに移動します。

[API とサービス] に移動

API が有効になっていることを確認したら、作成フローを続行できます。条件は、API 有効化がバックエンドを通じて伝播されると自動的に解決されます。

送信 HTTP リクエストがトレースされない

出力 HTTP リクエストのトレースデータを収集するように合成モニターを構成します。次のスクリーンショットと同様に、トレースデータにはスパンが 1 つだけ表示されます。

1 つのトレースのみが表示されている Cloud Trace。

この状況を解決するには、サービス アカウントに Cloud Trace エージェント(roles/cloudtrace.agent)のロールが付与されていることを確認します。編集者(roles/editor)のロールでも十分です。

サービス アカウントに付与されているロールを表示する方法は次のとおりです。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。

  2. [Google 提供のロール付与を含む] を選択します。
  3. 合成モニターで使用されるサービス アカウントがリストに表示されていない場合、または Cloud Trace エージェント(roles/cloudtrace.agent)のロールの権限を含むロールが付与されていない場合、このロールをサービス アカウントに付与します。

    サービス アカウントの名前がわからない場合は、ナビゲーション メニューで [サービス アカウント] を選択します。

進行中のステータス

[合成モニター] ページに、ステータスが In progress の合成モニターが一覧表示されます。ステータスが In progress であることは、合成モニターが最近作成され、表示するデータがない、または関数のデプロイに失敗したことを意味します。

関数のデプロイに失敗したかどうかを判断するには、次のようにします。

  • Cloud Function の名前にアンダースコアが含まれていないことを確認してください。アンダースコアが存在する場合は、アンダースコアを削除して Cloud Function を再デプロイします。

  • 合成モニターの [合成モニターの詳細] ページを開きます。

    次のメッセージが表示されたら、合成モニターを削除します。

    Cloud Function not found for this Synthetic monitor. Please confirm it exists or delete this monitor.
    

    エラー メッセージは、関数が削除されて、そのために合成モニターで関数を実行できないことを示しています。

  • 関数の Cloud Functions ページを開きます。[合成モニターの詳細] ページからこのページを開くには、[コード] をクリックしてから、関数名をクリックします。

    次のようなメッセージが表示された場合は、関数のデプロイに失敗しました。

    This function has failed to deploy and will not work correctly. Please edit and redeploy
    

    この問題を解決するには、関数コードを確認して、関数の構築またはデプロイを妨げるエラーを修正します。

合成モニターを作成すると、関数のデプロイと実行に数分かかる場合があります。

警告ステータス

[合成モニター] には、ステータスが Warning の合成モニターが一覧表示されます。ステータスが Warning の場合、実行結果には整合性がないことを意味します。これは、テストの設計上の問題を示している、またはテスト対象に不整合な動作があることを示している場合があります。

失敗ステータス

[合成モニター] には、ステータスが Failing の合成モニターが一覧表示されます。失敗の理由についての詳細を確認するには、最新の実行履歴を表示します。

  • エラー メッセージ Request failed with status code 429 が表示されている場合、HTTP リクエストのターゲットがコマンドを拒否しました。このエラーを解決するには、合成モニターのターゲットを変更する必要があります。

    エンドポイント https://www.google.com は、合成モニターによるリクエストを拒否します。

  • 失敗によって実行時間 0ms が返された場合、Cloud Functions の関数がメモリ不足になっている可能性があります。このエラーを解決するには、Cloud Functions の関数を編集してから、メモリを 2 GiB 以上に増やし、CPU フィールドを 1 に設定します。

合成モニターで削除が失敗する

Cloud Monitoring API を使用して合成モニターを削除しますが、API 呼び出しは次のようなレスポンスで失敗します。

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Cannot delete check 1228258045726183344. One or more alerting policies is using it.Delete the alerting policy with id projects/myproject/alertPolicies/16594654141392976482 and any other policies using this uptime check and try again."
      }
    ]
  }
}

問題を解決するには、合成モニターの結果をモニタリングするアラート ポリシーを削除してから、合成モニターを削除します。

無効なリンク チェッカーの構成を編集できない

Google Cloud コンソールを使用して無効なリンク チェッカーを作成し、テストする HTML 要素を変更するか、URI タイムアウト、再試行、セレクタの待機、リンクごとのオプションを変更します。 ただし、無効なリンク チェッカーを編集しても、Google Cloud コンソールには構成フィールドが表示されません。

この問題を解決するには、次の操作を行います。

  1. Google Cloud コンソールで、 [合成モニタリング] ページに移動します。

    [合成モニタリング] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. 編集する合成モニターを見つけて、 [その他のオプション] をクリックし、[編集] を選択します。
  3. [関数を編集] をクリックします。
  4. index.js ファイルの options オブジェクトを編集し、[Apply function] をクリックします。

    このオブジェクトのフィールドと構文については、broken-links-ok/index.js をご覧ください。

  5. [保存] をクリックします。

Google Cloud コンソールでスクリーンショットの保存が失敗したと表示される

無効なリンクのチェッカーを作成し、スクリーンショットを保存するように構成しました。しかし、Google Cloud コンソールに次のいずれかの警告メッセージと詳細な情報が表示されます。

  • InvalidStorageLocation
  • StorageValidationError
  • BucketCreationError
  • ScreenshotFileUploadError

これらのエラーを解決するには、次の手順を試してください。

  • InvalidStorageLocation メッセージが表示されたら、options.screenshot_options.storage_location という名前のフィールドで指定された Cloud Storage バケットが存在することを確認します。

  • Cloud Functions の関数に関連するログを表示します。詳細については、ログの検索をご覧ください。

  • 対応する Cloud Functions の関数で使用されているサービス アカウントに、Cloud Storage バケットの作成、アクセス、書き込みを行う Identity and Access Management のロールがあることを確認します。