無効なリンク チェッカーを作成する

このドキュメントでは、合成モニターを作成して、URI に含まれるリンクの定期的なテストを構成する方法について説明します。元の URI、テストされるリンクの数、再試行回数など、テスト用のオプションを指定して、事前構成済みの Cloud Functions の関数をデプロイします。トラブルシューティングとデバッグをサポートするため、合成モニターには、スクリーンショットなどの各テストに関する詳細情報が保存されます。スクリーンショットを使用すると、アプリケーションの顧客に表示される正確なレスポンスを確認できます。

合成モニターの詳細については、合成モニターについてをご覧ください。

無効なリンク チェッカーについて

無効なリンク チェッカーは、リンクを順次テストします。また、全体的な合成タイムアウトがあり、これは構成可能です。

デフォルトでは、無効なリンク チェッカーは次の処理を行います。

  • 元の URI で href 属性を持つ HTML アンカー要素を検索します。
  • 元の URI で検出された最初の 10 個のリンクをテストします。
  • リンクごとにチェッカーがリクエストを発行して、レスポンスを最大で 30 秒間待機します。レスポンスを受信すると、チェッカーは、HTTP レスポンス ステータスが 200 であることを確認します。これは、正常なレスポンスであることを示します。チェッカーは再試行を行いません。

元の URI を指定します。不使用リンク チェッカーが検索する HTML 要素、テスト対象の要素の最大数、テストごとのタイムアウト、再試行の有無を指定できます。無効なリンク チェッカーを構成して、セレクタが表示されるのを待つこともできます。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。無効なリンク チェッカーの構成は、index.js ファイルの options オブジェクトで指定します。Google Cloud コンソールを使用してチェッカーを作成すると、構成オプションごとにプロンプトが表示され、Cloud Function が更新されます。ただし、Cloud Monitoring API または Terraform を使用する場合は、このオブジェクトにデータを入力する必要があります。

無効なリンク チェッカーを作成した後、構成を変更するには、options オブジェクトを更新して Cloud Functions の関数を再デプロイします。

準備

  1. Google Cloud コンソールを使用して合成モニターを表示して変更するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するように管理者に依頼してください。

    ロールの付与の詳細については、アクセスの管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  2. Cloud Monitoring API、Artifact Registry API、Cloud Build API、Cloud Functions API、Cloud Logging API、Pub/Sub API、Cloud Run Admin API API を有効にします。

    API を有効にする

  3. Google Cloud プロジェクトにデフォルトの Compute Engine サービス アカウントが含まれていることを確認します。このサービス アカウントは、Compute Engine API を有効にするときに作成され、12345-compute@developer.gserviceaccount.com のような名前が付けられます。

    Google Cloud コンソールのナビゲーション パネルで [IAM と管理] を選択し、[サービス アカウント] を選択します。

    [サービス アカウント] に移動

    デフォルトの Compute Engine サービス アカウントが存在しない場合は、[サービス アカウントを作成] をクリックしてダイアログを完了します。

  4. デフォルトの Compute Engine サービス アカウントまたは作成したサービス アカウントに編集者のロール(roles/editor)が付与されていることを確認します。

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

    1. Google Cloud コンソールのナビゲーション パネルで [IAM] を選択します。

      [IAM] に移動

    2. [Google 提供のロール付与を含む] を選択します。
    3. 合成モニターで使用されるサービス アカウントがリストに表示されていない場合、または Cloud Trace エージェント(roles/cloudtrace.agent)のロールの権限を含むロールが付与されていない場合、このロールをサービス アカウントに付与します。
  5. 通知の受信に使用する通知チャンネルを構成します。複数の種類の通知チャンネルを作成することをおすすめします。詳細については、通知チャネルを作成して管理するAPI によって通知チャネルを作成して管理するをご覧ください。

無効なリンク チェッカーを作成する

コンソール

Google Cloud コンソールを使用して合成モニターを作成すると、新しい Cloud Function(第 2 世代)がデプロイされ、その Cloud Function のモニターが作成されます。既存の Cloud Function をモニタリングする合成モニターは作成できません。

  1. 必要な API が有効になっていること、プロジェクトにデフォルトの Compute Engine サービス アカウントが含まれていること、このアカウントに編集者(roles/editor)のロールが付与されていることを確認します。詳細については、始める前にをご覧ください。
  2. Google Cloud コンソールの [ナビゲーション] パネルで [Monitoring] を選択し、 [合成モニタリング] を選択します。

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

  3. [合成モニターを作成] を選択します。
  4. テンプレートに対して、[無効なリンクのチェッカー] を選択します。
  5. 合成モニターの名前を入力します。
  6. 省略可: [レスポンスのタイムアウト] と [チェック頻度] を更新し、ユーザー定義のラベルを追加します。

  7. テストする URI と要素を構成します。

    1. [元の URI] をクリックし、テストする URI を入力します。入力する値は、HTTP または HTTPS エンドポイントである必要があります。たとえば、次のように入力します。https://mywebsite.example.com

    2. 省略可: [フォローするリンクの数] で、テストするリンクの最大数を更新します。このフィールドのデフォルト値は 10 です。

    3. 省略可: [HTML 要素セレクタ] フィールドに、照合する HTML 要素をカンマ区切りのリストとして入力します。入力した値は文字列に変換され、Document: querySelectorAll() メソッドに渡されます。

      デフォルトでは、このフィールドはアンカーと一致する a に設定します。アンカーと画像の両方を照合する場合は、a, img などの値を入力できます。

    4. 省略可: [フォローする HTML 属性] フィールドに、一致させる HTML 属性を入力します。入力したカンマ区切り値が個別に getAttribute() メソッドに渡されます。

      デフォルトでは、このフィールドは href に設定され、リンクの URI が指定されます。複数の属性を入力できます。たとえば、href, src と入力します。この例では、コードは属性 href を検索してから、属性 src を検索します。

    5. 省略可: セレクタの待機、URI ごとのタイムアウト、再試行、予想されるステータス コードを構成します。

      1. [Show more options] をクリックします。
      2. URI に特定のセレクタが表示されるまで待ってから、リンクがスクレイピングされるように無効なリンク チェッカーを構成するには、要素セレクタを待機するフィールドに CSS セレクタと入力します。入力した値は文字列に変換され、page.waitForSelector() メソッドに渡されます。

        タイムアウトが経過する前にセレクタが表示されない場合は、エラーがログに記録されます。

      3. テスト用に選択したリンクの順序を更新します。

      4. 再試行を構成します。

        デフォルトでは、1 つのリクエストが各リンクに送信されます。たとえば、コマンドがタイムアウトした場合や HTTP ステータス コードが 200 でない場合など、最初のリクエストが失敗した場合は、リンクは次のようになります失敗としてマークされました。

        このフィールドは、無効なリンク チェッカーがリンクに HTTP リクエストを発行できる回数を指定します。この回数を超えると、リンクに失敗のマークが付けられます。

      5. 各 URI に適用されるタイムアウトを構成します。デフォルトでは、この値は 30 秒に設定されています。

      6. 予想されるステータス コードと特定の URI のタイムアウトを指定するには、[リンクごとのオプションを追加] をクリックしてダイアログを完了します。

  8. 省略可: レスポンスのスクリーンショットを収集して保存するかどうかを構成します。デフォルトの設定を使用する場合、スクリーンショットは保存されません。スクリーンショットの収集を有効にすると、すべてのテストまたは失敗したテストのみのスクリーンショットを収集できます。Cloud Monitoring では、次の規則を使用して Cloud Storage バケットに名前を付けます。

    gcm-PROJECT_ID-synthetics-LOCATION
    

    上の式で:

    • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
    • LOCATION: Cloud Storage バケットのロケーション。

    既存の Cloud Storage バケットを使用することもできます。

  9. 構成を確認し、正確で完全であることを確認して、Cloud Functions の関数を作成します。

    1. [関数の作成] をクリックします。

      [URI 構成] フィールドの値は、[関数を作成] をクリックすると、index.js ファイル内の Options オブジェクトにコピーされます。[関数を作成] をクリックして構成を変更するには、Options オブジェクトを編集します。

    2. 表示名を入力してリージョンを選択します。名前はリージョン内で一意である必要があります。

    3. [ランタイム、ビルド、接続、セキュリティの設定] セクションで、次の操作を行います。

      • [接続] タブで、[すべてのトラフィックを許可する] が選択されていることを確認します。

      • デフォルトの設定を確認し、必要に応じて更新します。

      • [ランタイム サービス アカウント] フィールドで、サービス アカウントを選択します。

    4. [関数を適用する] をクリックします。

  10. アラート ポリシーを構成します。

    1. 省略可: アラート ポリシー名と、通知が送信されるまでの障害継続期間を更新します。

    2. 通知チャンネルを追加します。

  11. [作成] をクリックします。

    定義した Cloud Function が第 2 世代としてビルドされ、デプロイされ、合成モニターが作成されます。

API

Cloud Monitoring API を使用して無効なリンク チェッカーを作成するプロセスは、他の合成モニターを作成するプロセスと同じです。Cloud Monitoring API を使用して合成モニターを作成する方法については、合成モニターを作成するを参照し、[Cloud Monitoring] タブを選択します。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。無効なリンク チェッカーの構成は、index.js ファイルの options オブジェクトで指定します。

options.screenshot_options 構造が定義されていると、無効なリンク チェッカーはスクリーンショットを収集して Cloud Storage バケットに保存します。screenshot_options.storage_location フィールドが定義されていないか、値が空の文字列の場合、Monitoring は Cloud Storage バケットを作成し、スクリーンショットがそのバケットに保存されます。Monitoring では、次の規則を使用して Cloud Storage バケットに名前を付けます。

gcm-PROJECT_ID-synthetics-LOCATION

上の式で:

  • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
  • LOCATION: Cloud Storage バケットのロケーション。

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。

Terraform を使用して無効なリンク チェッカーを作成するプロセスは、他の合成モニターを作成するプロセスと同じです。Terraform を使用して合成モニターを作成する方法については、合成モニターを作成するを参照し、[Terraform] タブを選択します。

無効なリンク チェッカーは broken-links-ok テンプレートを使用します。無効なリンク チェッカーの構成は、index.js ファイルの options オブジェクトで指定します。

options.screenshot_options 構造が定義されていると、無効なリンク チェッカーはスクリーンショットを収集して Cloud Storage バケットに保存します。screenshot_options.storage_location フィールドが定義されていないか、値が空の文字列の場合、Monitoring は Cloud Storage バケットを作成し、スクリーンショットがそのバケットに保存されます。Monitoring では、次の規則を使用して Cloud Storage バケットに名前を付けます。

gcm-PROJECT_ID-synthetics-LOCATION

上の式で:

  • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
  • LOCATION: Cloud Storage バケットのロケーション。

結果を確認する

実行ごとに、無効なリンク チェッカーは次の処理を行います。

  • 各行に特定の URI のテストに関する情報を提供するテーブルを生成します。 概要情報には、ターゲット URI、レイテンシ、ステータス、HTML 要素の識別子が含まれます。たとえば、HTML アンカー要素がテストされると、この列には a が表示されます。行が元の URI に対応している場合、HTML の要素 ID の値は - になります。

  • 指標、トレースデータ、ログデータを収集します。

  • 構成されている場合、スクリーンショットを収集します。

収集されたデータを確認する方法の詳細については、合成モニターの結果を調べるをご覧ください。

トラブルシューティング

このセクションでは、無効なリンク チェッカーのトラブルシューティングに役立つ情報を提供します。

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

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

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

  1. Google Cloud コンソールの [ナビゲーション] パネルで [Monitoring] を選択し、 [合成モニタリング] を選択します。

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

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

    このオブジェクトのフィールドと構文については、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 のロールがあることを確認します。

次のステップ