公開の稼働時間チェックを作成する

このドキュメントでは、公開稼働時間チェックを作成する方法について説明します。公開稼働時間チェックでは、世界中の複数のロケーションから、一般公開されている URL または Google Cloud リソースにリクエストを発行して、リソースが応答するかどうかを確認できます。プライベート ネットワークの稼働時間チェックを作成する方法については、非公開稼働時間チェックの作成をご覧ください。

公開の稼働時間チェックでは、次のモニタリング対象リソースの可用性を判断できます。

稼働時間チェックの管理とモニタリングに関する情報へのリンクについては、このドキュメントの次のステップのセクションをご覧ください。

稼働時間チェックについて

HTTP と HTTPS の場合、すべての URL リダイレクトを行い、稼働時間チェックで受信した最終的なレスポンスを使用して成功基準を評価します。HTTPS チェックの場合、SSL 証明書の有効期限は、最後のレスポンスで受信したサーバー証明書に基づいて計算されます。

稼働時間チェックが成功するには、次の条件を満たす必要があります。

  • HTTP ステータスが指定した条件に一致する。
  • レスポンス データに必要とされるコンテンツは指定されていない、もしくは必要なコンテンツが存在する。

稼働時間チェックではページアセットの読み込みや JavaScript の実行は行われません。また稼働時間チェックのデフォルト構成には認証が含まれません。

始める前に

  1. 稼働時間チェックの作成に必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

    • Monitoring 編集者(roles/monitoring.editor)- Google Cloud コンソール ユーザー
    • Monitoring 稼働時間チェック構成編集者(roles/monitoring.uptimeCheckConfigEditor)- API ユーザー
    • Monitoring AlertPolicy 編集者(roles/monitoring.alertPolicyEditor)- API ユーザー
    • Monitoring NotificationChannel 編集者(roles/monitoring.notificationChannelEditor)- API ユーザー

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

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

  2. 確認するリソースがパブリック エンドポイントを持っているか、構成可能なファイアウォールの背後にあることを確認します。

    他のすべての構成では、非公開稼働時間チェックを作成する必要があります。 詳細については、非公開稼働時間チェックの作成をご覧ください。

  3. リソースがファイアウォールの背後にある場合は、稼働時間チェック サーバーの IP アドレスからの受信トラフィックを許可するように、そのファイアウォールを構成します。詳細については、稼働時間チェック サーバーの IP アドレスを一覧表示するをご覧ください。

  4. 通知の受信に使用する通知チャンネルを構成します。複数の種類の通知チャンネルを作成することをおすすめします。詳しくは、通知チャンネルの作成と管理をご覧ください。

  5. 稼働時間チェック用に少なくとも 3 つのチェッカーを特定します。稼働時間チェック リージョン USA には、USA_OREGONUSA_IOWAUSA_VIRGINIA リージョンが含まれます。各 USA_* リージョンには 1 つのチェッカーがあり、USA には 3 つすべてが含まれます。その他の稼働時間チェック リージョン(EUROPESOUTH_AMERICAASIA_PACIFIC)には、それぞれチェッカーが 1 つあります。

    Google Cloud コンソールの使用時に [グローバル] を選択するか、API の使用時に REGION_UNSPECIFIED を選択した場合、稼働時間チェックはすべての稼働時間チェック リージョンから発行されます。

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

ここでは、稼働時間チェックを作成して構成する方法について説明します。

少なくとも 1 つの TCP または HTTP/s ポートが構成されている外部ロードバランサの稼働時間チェックを作成するには、次の手順に従います。 または、サービスの [サービスの詳細] ページに移動し、[稼働時間チェックの作成] をクリックします。[サービスの詳細] ページから開始すると、サービス固有のフィールドが事前入力されます。

Console

Google Cloud コンソールを使用して稼働時間チェックを作成するには、次の操作を行います。

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

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

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

  2. [稼働時間チェックの作成] をクリックします。

    稼働時間チェック ダイアログを作成。

  3. 稼働時間チェックのターゲットを指定します。

    1. [プロトコル] でプロトコルを選択します。HTTPHTTPSTCP を選択できます。

    2. 次のリソースタイプのいずれか 1 つを選択します。

      • URL: 任意の IPv4 アドレスまたはホスト名。パスとポートは別々に入力します。
      • Kubernetes LoadBalancer Service: LoadBalancer タイプの Kubernetes Service
      • [Instance]: Compute Engine または AWS EC2 インスタンス
      • [App Engine]: App Engine アプリケーション(モジュール)
      • [Elastic Load Balancer]: AWS ロードバランサ
    3. プロトコル固有のフィールドを入力します。

      • TCP チェックでは、ポートを入力します。

      • HTTP チェックと HTTPS チェックでは、ホストまたはリソース内のパスを入力できます。これらのプロトコルを使用するすべての稼働時間チェックは、http://target/path にリクエストを送信します。この式において、URL リソースでは、target はホスト名または IP アドレスです。 App Engine リソースでは、target はサービス名に由来するホスト名です。インスタンスとロードバランサのリソースでは、target はリソースまたはリソースのグループに指定した名前に由来する IP アドレスです。

        path フィールドを空白のままにするか、値を / に設定すると、リクエストは http://target/ に発行されます。

        たとえば。URL リソース example.com/tester に稼働時間チェックを発行するには、Hostname フィールドを example.com に、Path フィールドを /tester に設定します。

        //hello をサポートするコーディネーターによってサーバーを App Engine にデプロイしたとします。稼働時間チェックを '/' ハンドラに発行するには、Path フィールドを空白のままにします。稼働時間チェックを /hello ハンドラに発行するには、Path フィールドの値を /hello に設定します。

    4. リソース固有のフィールドを入力します。

      • URL リソースでは、ホスト名フィールドにホスト名を入力します。たとえば、「example.com」と入力します。

      • App Engine リソースでは、[サービス] フィールドにサービス名を入力します。

      • [Elastic Load Balancer] リソースと [Instance] リソースの場合、[Applies to] フィールドに次のように入力します。

        • 単一のインスタンスまたはロードバランサに対して稼働時間チェックを発行するには、[Single] を選択し、メニューを使用して特定のインスタンスまたはロードバランサを選択します。
        • モニタリング グループに稼働時間チェックを発行するには、[Group] を選択し、メニューを使用してグループ名を選択します。
    5. 省略可: 稼働時間チェックを実行する頻度を設定するには、[Check frequency] フィールドを使用します。

    6. 省略可: チェッカー リージョンを選択するか、SSL 証明書、認証、ヘッダー、および HTTP チェックと HTTPS チェックのポートを構成するには、[More target options] をクリックします。

      • リージョン: 稼働時間チェックがリクエストを受信するリージョンを選択します。稼働時間チェックには、少なくとも 3 つのチェッカーが必要です。3 つのチェッカーがある米国を除くすべてのリージョンには、1 つのチェッカーがあります。デフォルト設定の [グローバル] にはすべてのリージョンが含まれています。
      • ICMP Pings: 最大 3 回の ping を送信するように稼働時間チェックを構成します。詳細については、ICMP ping を使用するをご覧ください。
      • リクエスト メソッド: HTTP チェックの場合、リクエスト メソッドを選択します。
      • 本文: HTTP POST チェックの場合、URL エンコードされた本文を入力します。エンコードは自分で行う必要があります。他のすべてのチェックでは、このフィールドは空のままにします。
      • Host header: 仮想ホストをチェックする場合に入力します。このフィールドは TCP チェックには使用できません。
      • Port: ポート番号を指定します。
      • Custom Headers: カスタム ヘッダーを追加し、必要に応じて暗号化します。暗号化すると、ヘッダーの値はフォームに表示されません。 認証に関連するヘッダーを他のユーザーに表示しないように暗号化を使用します。
      • 認証: これらの値は Authorization ヘッダーとして送信されます。このフィールドは TCP チェックには使用できません。

        次のいずれかを選択します。

        • [基本認証]: 単一のユーザー名とパスワードを指定します。フォームではパスワードは常に非表示です。
        • サービス エージェント認証: 有効にすると、モニタリング サービス エージェントID トークンが生成されます。このオプションは、HTTPS チェックでのみ使用できます。
      • SSL 証明書の検証: URL リソースの HTTPS を選択した場合、デフォルトでは HTTPS 経由での接続を試行し、SSL 証明書を検証します。URL に無効な証明書がある場合、稼働時間チェックは失敗します。証明書が無効になる理由は次のとおりです。

        • 有効期限が切れた証明書
        • 自己署名証明書
        • ドメイン名が一致しない証明書
        • 認証局情報アクセス(AIA)拡張機能を使用している証明書。

        HTTPS 稼働時間チェックによって SSL 証明書を検証させるには、[SSL 証明書を検証する] を選択します。

        SSL 証明書の検証を無効にするには、[SSL 証明書の検証] チェックボックスをオフにします。

        AIA 拡張機能を使用した SSL 証明書がある場合は、SSL 証明書の検証を無効にする必要があります。これらのタイプの証明書はサポートされておらず、検証シーケンスは失敗します。 通常、エラーメッセージは「10000 ミリ秒の SSL ハンドシェイク エラーで応答」です。

        指標 monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires を使用して、証明書が期限切れになる前に通知するアラート ポリシーを作成できます。詳細については、サンプル ポリシー: 稼働時間チェック ポリシーをご覧ください。

        [SSL 証明書を検証する] チェックボックスを選択オンにします。

  4. [続行] をクリックし、レスポンス要件を構成します。このセクションの設定にはすべてデフォルト値があります。

    • [レスポンスのタイムアウト] フィールドを使用して、稼働時間チェックのタイムアウト期間を変更します。この期間内に複数のロケーションからレスポンスを受け取らなかった場合、稼働時間チェックは失敗となります。

    • コンテンツ マッチングを実行するように稼働時間チェックを構成するには、トグルラベルが [コンテンツ マッチングが有効] になっていることを確認します。

      • オプションのメニューから [レスポンスのコンテンツのマッチタイプ] を選択します。 このフィールドは、レスポンスのコンテンツと返されたデータをどのように比較するかを指定します。たとえば、レスポンスのコンテンツが abcd で、コンテンツのマッチタイプが [Contains] であるとします。稼働時間チェックが成功するのは、レスポンス データに abcd が含まれている場合のみです。詳細については、レスポンス データを検証するをご覧ください。
      • [レスポンスのコンテンツ] を入力します。レスポンスのコンテンツには 1024 バイト以下の文字列を指定する必要があります。API では、このフィールドでは ContentMatcher オブジェクトです。
    • 稼働時間チェックが原因でログエントリが作成されないようにするには、[チェックの失敗をログに出力] をオフにします。

    • HTTP 稼働時間チェックの場合は、許容されるレスポンス コードを構成します。デフォルトでは、HTTP 稼働時間チェックで 2xx レスポンスはすべて正常なレスポンスと見なします。

  5. [続行] をクリックして通知を構成します。

    稼働時間チェックが失敗した場合に通知を受け取るには、アラート ポリシーを作成して、そのポリシーの通知チャネルを構成します。

    1. 省略可: アラート ポリシーの名前を更新します。
    2. 省略可: [Duration] フィールドで、稼働時間チェックの失敗の通知を送信するまでの時間を選択します。デフォルトでは、2 つ以上のリージョンが 1 分以上の稼働時間チェックの失敗を報告したときに通知が送信されます。
    3. [通知チャネル] というラベルのボックスで、 [メニュー] をクリックし、追加するチャネルを選択して、[OK] をクリックします。

      メニューでは、通知がチャネルタイプごとにアルファベット順にグループ化されます。

    アラート ポリシーを作成しない場合は、切り替えボタンのテキストが [アラートを作成しない] になっていることを確認します。

  6. [続行] をクリックし、稼働時間チェックを完了します。

    1. 稼働時間チェックのわかりやすいタイトルを入力します。

    2. 省略可: 稼働時間チェックにユーザー定義のラベルを追加する手順は次のとおりです。

      1. [ユーザーラベルを表示] をクリックします。
      2. [Key] フィールドにラベルの名前を入力します。ラベル名の先頭は小文字にする必要があり、小文字、数字、アンダースコア、ダッシュを使用できます。たとえば、「severity」と入力します。
      3. [Value] フィールドにラベルの値を入力します。ラベルの値には、英小文字、数字、アンダースコア、ダッシュを使用できます。たとえば、「critical」と入力します。
      4. 追加するラベルごとに、[ユーザーラベルを追加します] をクリックして、ラベルのキーと値を入力します。
    3. 稼働時間チェックの構成を確認するには、[TEST] をクリックします。結果が期待どおりでない場合は、チェックの失敗を参照して構成を修正し、検証ステップを繰り返します。

    4. [作成] をクリックします。[Create] を選択していて必須フィールドに値が入力されていない場合、エラー メッセージが表示されます。

gcloud

稼働時間チェックを作成するには、gcloud monitoring uptime create コマンドを実行します。

gcloud monitoring uptime create DISPLAY_NAME REQUIRED_FLAGS OPTIONAL_FLAGS

前述のコマンドを実行する前に、次のようにしてください。

  • DISPLAY_NAME は、稼働時間チェックの名前に置き換えます。

  • 稼働時間チェックでプローブされるリソースを指定するように REQUIRED_FLAGS を構成します。たとえば、次のコマンドは、特定のプロジェクトの URL EXAMPLE.com をテストする稼働時間チェックを作成します。

    gcloud monitoring uptime create DISPLAY_NAME \
    --resource-labels=host=EXAMPLE.com,project_id=PROJECT_ID \
    --resource-type=uptime-url
    

    上のコマンドでは、リソースタイプ uptime-url で必要とされる各ラベルの値を指定しています。

  • デフォルト値をオーバーライドするように OPTIONAL_FLAGS フラグを構成します。たとえば、プロトコルが http でない場合は、--protocol フラグを設定する必要があります。

API

稼働時間チェックを作成するには、projects.uptimeCheckConfigs.create メソッドを呼び出します。メソッドのパラメータを次のように設定します。

  • parent: 必須。稼働時間チェックを作成するプロジェクトの名前を指定する必要があります。PROJECT_ID を実際の Google Cloud プロジェクト ID に置き換えます。書式は次のとおりです。

    projects/PROJECT_ID
    
  • リクエスト本文には、新しい稼働時間チェックの UptimeCheckConfig オブジェクトを含める必要があります。このページでは、いくつかのフィールドについて説明します。このオブジェクトとそのフィールドの詳細については、UptimeCheckConfig のドキュメントをご覧ください。

    • 構成オブジェクトの name フィールドは空白のままにします。このフィールドは、システムがレスポンス構成オブジェクトを作成するときに設定します。

    • HTTP または HTTPS チェックを構成する場合は、UptimeCheckConfig オブジェクトの HttpCheck フィールドに入力する必要があります。このオブジェクトでは、requestMethod フィールドを GET または POST に設定します。このフィールドを省略するか METHOD_UNSPECIFIED に設定すると、GET リクエストが発行されます。

      POST リクエストを構成する場合は、contentTypecustomContentType(任意)、 body の各フィールドに入力します。

create メソッドは、新しい構成に応じた UptimeCheckConfig オブジェクトを返します。

作成された稼働時間チェックの構成が想定どおりに機能しない場合は、このページのチェックの失敗セクションをご覧ください。

C#

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

public static object CreateUptimeCheck(string projectId, string hostName,
    string displayName)
{
    // Define a new config.
    var config = new UptimeCheckConfig()
    {
        DisplayName = displayName,
        MonitoredResource = new MonitoredResource()
        {
            Type = "uptime_url",
            Labels = { { "host", hostName } }
        },
        HttpCheck = new UptimeCheckConfig.Types.HttpCheck()
        {
            Path = "/",
            Port = 80,
        },
        Timeout = TimeSpan.FromSeconds(10).ToDuration(),
        Period = TimeSpan.FromMinutes(5).ToDuration()
    };
    // Create a client.
    var client = UptimeCheckServiceClient.Create();
    ProjectName projectName = new ProjectName(projectId);
    // Create the config.
    var newConfig = client.CreateUptimeCheckConfig(
        projectName,
        config,
        CallSettings.FromExpiration(
            Expiration.FromTimeout(
                TimeSpan.FromMinutes(2))));
    Console.WriteLine(newConfig.Name);
    return 0;
}

Java

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

private static void createUptimeCheck(
    String projectId, String displayName, String hostName, String pathName) throws IOException {
  CreateUptimeCheckConfigRequest request =
      CreateUptimeCheckConfigRequest.newBuilder()
          .setParent(ProjectName.format(projectId))
          .setUptimeCheckConfig(
              UptimeCheckConfig.newBuilder()
                  .setDisplayName(displayName)
                  .setMonitoredResource(
                      MonitoredResource.newBuilder()
                          .setType("uptime_url")
                          .putLabels("host", hostName))
                  .setHttpCheck(HttpCheck.newBuilder().setPath(pathName).setPort(80))
                  .setTimeout(Duration.newBuilder().setSeconds(10))
                  .setPeriod(Duration.newBuilder().setSeconds(300)))
          .build();
  try (UptimeCheckServiceClient client = UptimeCheckServiceClient.create()) {
    UptimeCheckConfig config = client.createUptimeCheckConfig(request);
    System.out.println("Uptime check created: " + config.getName());
  } catch (Exception e) {
    usage("Exception creating uptime check: " + e.toString());
    throw e;
  }
}

Go

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


// createGet creates an example uptime check on a GET request.
func createGet(w io.Writer, projectID string) (*monitoringpb.UptimeCheckConfig, error) {
	ctx := context.Background()
	client, err := monitoring.NewUptimeCheckClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("NewUptimeCheckClient: %w", err)
	}
	defer client.Close()
	req := &monitoringpb.CreateUptimeCheckConfigRequest{
		Parent: "projects/" + projectID,
		UptimeCheckConfig: &monitoringpb.UptimeCheckConfig{
			DisplayName: "new GET uptime check",
			Resource: &monitoringpb.UptimeCheckConfig_MonitoredResource{
				MonitoredResource: &monitoredres.MonitoredResource{
					Type: "uptime_url",
					Labels: map[string]string{
						"host": "example.com",
					},
				},
			},
			CheckRequestType: &monitoringpb.UptimeCheckConfig_HttpCheck_{
				HttpCheck: &monitoringpb.UptimeCheckConfig_HttpCheck{
					RequestMethod: monitoringpb.UptimeCheckConfig_HttpCheck_GET,
					Path:          "/",
					Port:          80,
				},
			},
			Timeout: &duration.Duration{Seconds: 10},
			Period:  &duration.Duration{Seconds: 300},
		},
	}
	config, err := client.CreateUptimeCheckConfig(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("CreateUptimeCheckConfig GET: %w", err)
	}
	fmt.Fprintf(w, "Successfully created GET uptime check %q\n", config.GetDisplayName())
	return config, nil
}

// createPost creates an example uptime check on a POST request.
func createPost(w io.Writer, projectID string) (*monitoringpb.UptimeCheckConfig, error) {
	ctx := context.Background()
	client, err := monitoring.NewUptimeCheckClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("NewUptimeCheckClient: %w", err)
	}
	defer client.Close()
	req := &monitoringpb.CreateUptimeCheckConfigRequest{
		Parent: "projects/" + projectID,
		UptimeCheckConfig: &monitoringpb.UptimeCheckConfig{
			DisplayName: "new POST uptime check",
			Resource: &monitoringpb.UptimeCheckConfig_MonitoredResource{
				MonitoredResource: &monitoredres.MonitoredResource{
					Type: "uptime_url",
					Labels: map[string]string{
						"host": "example.com",
					},
				},
			},
			CheckRequestType: &monitoringpb.UptimeCheckConfig_HttpCheck_{
				HttpCheck: &monitoringpb.UptimeCheckConfig_HttpCheck{
					RequestMethod: monitoringpb.UptimeCheckConfig_HttpCheck_POST,
					ContentType:   monitoringpb.UptimeCheckConfig_HttpCheck_URL_ENCODED,
					Path:          "/",
					Port:          80,
					Body:          []byte(base64.URLEncoding.EncodeToString([]byte("key: value"))),
				},
			},
			Timeout: &duration.Duration{Seconds: 10},
			Period:  &duration.Duration{Seconds: 300},
		},
	}
	config, err := client.CreateUptimeCheckConfig(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("CreateUptimeCheckConfig POST: %w", err)
	}
	fmt.Fprintf(w, "Successfully created POST uptime check %q\n", config.GetDisplayName())
	return config, nil
}

Node.js

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');

// Creates a client
const client = new monitoring.UptimeCheckServiceClient();

/**
 * TODO(developer): Uncomment and edit the following lines of code.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const hostname = 'mydomain.com';

const request = {
  // i.e. parent: 'projects/my-project-id'
  parent: client.projectPath(projectId),
  uptimeCheckConfig: {
    displayName: 'My Uptime Check',
    monitoredResource: {
      // See the Uptime Check docs for supported MonitoredResource types
      type: 'uptime_url',
      labels: {
        host: hostname,
      },
    },
    httpCheck: {
      path: '/',
      port: 80,
    },
    timeout: {
      seconds: 10,
    },
    period: {
      seconds: 300,
    },
  },
};

// Creates an uptime check config for a GCE instance
const [uptimeCheckConfig] = await client.createUptimeCheckConfig(request);
console.log('Uptime check created:');
console.log(`ID: ${uptimeCheckConfig.name}`);
console.log(`Display Name: ${uptimeCheckConfig.displayName}`);
console.log('Resource: %j', uptimeCheckConfig.monitoredResource);
console.log('Period: %j', uptimeCheckConfig.period);
console.log('Timeout: %j', uptimeCheckConfig.timeout);
console.log(`Check type: ${uptimeCheckConfig.check_request_type}`);
console.log(
  'Check: %j',
  uptimeCheckConfig.httpCheck || uptimeCheckConfig.tcpCheck
);
console.log(
  `Content matchers: ${uptimeCheckConfig.contentMatchers
    .map(matcher => matcher.content)
    .join(', ')}`
);
console.log(`Regions: ${uptimeCheckConfig.selectedRegions.join(', ')}`);

PHP

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Api\MonitoredResource;
use Google\Cloud\Monitoring\V3\Client\UptimeCheckServiceClient;
use Google\Cloud\Monitoring\V3\CreateUptimeCheckConfigRequest;
use Google\Cloud\Monitoring\V3\UptimeCheckConfig;

/**
 * Example:
 * ```
 * create_uptime_check($projectId, 'myproject.appspot.com', 'Test Uptime Check!');
 * ```
 *
 * @param string $projectId Your project ID
 * @param string $hostName
 * @param string $displayName
 */
function create_uptime_check($projectId, $hostName = 'example.com', $displayName = 'New uptime check')
{
    $projectName = 'projects/' . $projectId;
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $monitoredResource = new MonitoredResource();
    $monitoredResource->setType('uptime_url');
    $monitoredResource->setLabels(['host' => $hostName]);

    $uptimeCheckConfig = new UptimeCheckConfig();
    $uptimeCheckConfig->setDisplayName($displayName);
    $uptimeCheckConfig->setMonitoredResource($monitoredResource);
    $createUptimeCheckConfigRequest = (new CreateUptimeCheckConfigRequest())
        ->setParent($projectName)
        ->setUptimeCheckConfig($uptimeCheckConfig);

    $uptimeCheckConfig = $uptimeCheckClient->createUptimeCheckConfig($createUptimeCheckConfigRequest);

    printf('Created an uptime check: %s' . PHP_EOL, $uptimeCheckConfig->getName());
}

Python

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

def create_uptime_check_config_get(
    project_id: str, host_name: str = None, display_name: str = None
) -> uptime.UptimeCheckConfig:
    """Creates a new uptime check configuration

    Args:
        project_id: Google Cloud project id where the uptime check is created
        host_name: An example label's value for the "host" label
        display_name: A human friendly name of the configuration

    Returns:
        A structure that describes a new created uptime check
    """
    config = monitoring_v3.UptimeCheckConfig()
    config.display_name = display_name or "New GET uptime check"
    config.monitored_resource = {
        "type": "uptime_url",
        "labels": {"host": host_name or "example.com"},
    }
    config.http_check = {
        "request_method": monitoring_v3.UptimeCheckConfig.HttpCheck.RequestMethod.GET,
        "path": "/",
        "port": 80,
    }
    config.timeout = {"seconds": 10}
    config.period = {"seconds": 300}

    client = monitoring_v3.UptimeCheckServiceClient()
    new_config = client.create_uptime_check_config(
        request={"parent": project_id, "uptime_check_config": config}
    )
    pprint.pprint(new_config)
    return new_config


def create_uptime_check_config_post(
    project_id: str, host_name: str = None, display_name: str = None
) -> uptime.UptimeCheckConfig:
    """Creates a new uptime check configuration

    Args:
        project_id: Google Cloud project id where the uptime check is created
        host_name: An example label's value for the "host" label
        display_name: A human friendly name of the configuration

    Returns:
        A structure that describes a new created uptime check
    """
    config = monitoring_v3.UptimeCheckConfig()
    config.display_name = display_name or "New POST uptime check"
    config.monitored_resource = {
        "type": "uptime_url",
        "labels": {"host": host_name or "example.com"},
    }
    config.http_check = {
        "request_method": monitoring_v3.UptimeCheckConfig.HttpCheck.RequestMethod.POST,
        "content_type": monitoring_v3.UptimeCheckConfig.HttpCheck.ContentType.URL_ENCODED,
        "body": "foo=bar".encode("utf-8"),
        "path": "/",
        "port": 80,
    }
    config.timeout = {"seconds": 10}
    config.period = {"seconds": 300}

    client = monitoring_v3.UptimeCheckServiceClient()
    new_config = client.create_uptime_check_config(
        request={"parent": project_id, "uptime_check_config": config}
    )
    pprint.pprint(new_config)
    return new_config

Ruby

Monitoring への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

def create_uptime_check_config project_id: nil, host_name: nil, display_name: nil
  require "google/cloud/monitoring"

  client = Google::Cloud::Monitoring.uptime_check_service
  project_name = client.project_path project: project_id
  config = {
    display_name:       display_name.nil? ? "New uptime check" : display_name,
    monitored_resource: {
      type:   "uptime_url",
      labels: { "host" => host_name.nil? ? "example.com" : host_name }
    },
    http_check:         { path: "/", port: 80 },
    timeout:            { seconds: 10 },
    period:             { seconds: 300 }
  }
  new_config = client.create_uptime_check_config \
    parent:              project_name,
    uptime_check_config: config
  puts new_config.name
  new_config
end

Terraform

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

稼働時間チェックと、そのチェックをモニタリングするアラート ポリシーを作成するには、次の操作を行います。

  1. Terraform 構成ファイルを編集して google_monitoring_uptime_check_config リソースを追加し、構成ファイルを適用します。

    次の例は、公開 URL を確認する構成を示しています。

    resource "google_monitoring_uptime_check_config" "example" {
        display_name = "example"
        timeout      = "60s"
    
        http_check {
            port = "80"
            request_method = "GET"
        }
    
        monitored_resource {
            type = "uptime_url"
            labels = {
                project_id = "PROJECT_ID"
                host="EXAMPLE.com"
            }
        }
    
        checker_type = "STATIC_IP_CHECKERS"
    }
    
  2. 省略可: 通知チャンネルとアラート ポリシーを作成します。

    次の手順では、Google Cloud コンソールを使用して通知チャネルとアラート ポリシーを作成します。このアプローチでは、アラート ポリシーが稼働時間チェックによって生成されたデータのみをモニタリングします。

    1. 通知チャネルを作成する方法は、次のとおりです。

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

        [アラート] に移動

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

      2. [通知チャンネルを管理] を選択します。
      3. 追加するチャネルの種類に移動し、[追加] をクリックして、ダイアログを完了します。
    2. アラート ポリシーを作成するには:

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

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

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

      2. 稼働時間チェックを見つけて、 [その他] を選択し、[アラート ポリシーを追加] を選択します。
      3. ダイアログで [通知と名前] セクションに移動し、[通知チャンネル] を展開して選択します。
      4. アラート ポリシーに名前を付けて、[ポリシーを作成] をクリックします。

    アラート ポリシーを作成するには、構成ファイルに google_monitoring_alert_policy リソースを追加し、新しい構成を適用します。

稼働時間チェックの結果が Monitoring に送信され始めるまでに、最大 5 分の遅延が発生する可能性があります。その間、稼働時間チェック ダッシュボードには「データがありません」というステータスが表示されます。

ICMP ping を使用する

失敗した公開稼働時間チェックをトラブルシューティングするには、稼働時間チェック中に最大 3 つの ICMP ping を送信するように稼働時間チェックを構成できます。ping を使用すると、ネットワーク接続の問題やアプリケーションのタイムアウトなど、さまざまな原因による障害を区別できます。

デフォルトでは、稼働時間チェックは ping を送信しません。各 ping により、稼働時間チェックにレイテンシが発生します。非公開稼働時間チェックでは ping を送信できません。

公開稼働時間チェックが失敗した場合、ping の結果は Cloud Logging ログに書き込まれます。ping が失敗すると、次のフィールドがログエントリの httpRequest フィールドに追加されます。

  • rtt_usec: 失敗した ping リクエストのラウンドトリップ時間。
  • unreachable_count: ステータス コード ICMP_DEST_UNREACH を返した ping リクエストの数。
  • no_answer_count: タイムアウトして応答が返されなかった ping リクエストの数。

成功した稼働時間チェックの ping の結果はログに記録されません。

ping を構成する

各稼働時間チェック構成には、HttpCheck オブジェクトまたは TcpCheck オブジェクトが含まれます。これらの両方のオブジェクトに pingConfig フィールドが含まれます。このフィールドを使用して、各チェックに含める ICMP ping の回数を指定します(最大 3 回)。デフォルトでは、ping は送信されません。

ping を構成するには、次のいずれかを行います。

  • Google Cloud コンソールを使用する場合は、[その他のターゲット オプション] を展開し、[ICMP Pings] フィールドに値を入力します。

  • Cloud Monitoring API を使用する場合は、次の構造の PingConfig オブジェクトを使用します。

    {
      "pingsCount": integer
    }
    

    稼働時間チェック構成に Monitoring API を使用する方法については、稼働時間チェックを作成する: API または稼働時間チェックを編集する: API をご覧ください。

稼働時間チェックの確認

Google Cloud コンソールで稼働時間チェックを作成する際、保存前にその構成をテストできます。

チェックの成功

次の条件に当てはまる場合、稼働時間チェックが成功します。

  • HTTP ステータスが、選択した条件に一致する。
  • レスポンスに必要なコンテンツが指定されていない、もしくは、レスポンスを検索して必要なコンテンツが見つかった。

チェックの失敗

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

  • 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 アドレスを一覧表示するをご覧ください。タイムアウト上限は、[レスポンスの検証] オプションの一部として指定されます。

    ネットワークの輻輳が原因でリクエストのタイムアウトが発生することがあります。たとえば、一時的なネットワーク輻輳により、1 つのチェッカーは失敗するが、他のすべてのチェッカーは成功することがあります。アラート ポリシーでデフォルト構成を使用している場合、1 つのチェッカーでエラーが発生しても通知は発生しません。

稼働時間チェックが ping を送信するように構成されている場合、失敗した稼働時間チェックの ping の結果は Cloud Logging に書き込まれます。詳細については、ICMP ping を使用するをご覧ください。

次のステップ