创建公开拨测

本文档介绍了如何创建公开拨测。公开拨测可以从全球多个位置向可公开访问的网址或 Google Cloud 资源发出请求,以查看资源是否响应。如需了解如何为专用网络创建正常运行时间检查,请参阅创建专用拨测

公开拨测可以确定以下受监控的资源的可用性:

如需查看有关管理和监控拨测的信息链接,请参阅本文档的后续步骤部分。

拨测简介

对于 HTTP 和 HTTPS,将遵循所有网址重定向,并使用拨测收到的最终响应来评估任何成功标准。对于 HTTPS 检查,SSL 证书过期时间根据最终响应中收到的服务器证书计算。

为确保拨测成功,必须满足以下条件:

  • HTTP 状态必须与您指定的条件相符。
  • 响应数据不包含所需内容,或者所需内容已存在。

拨测不会加载页面资源或运行 JavaScript,且拨测的默认配置不包括身份验证。

准备工作

  1. 如需获取创建拨测所需的权限,请让管理员授予您项目的以下 IAM 角色:

    • Monitoring Editor (roles/monitoring.editor) - Google Cloud 控制台用户
    • Monitoring Uptime Check Configurations Editor (roles/monitoring.uptimeCheckConfigEditor) - API 用户
    • Monitoring AlertPolicy Editor (roles/monitoring.alertPolicyEditor) - API 用户
    • Monitoring NotificationChannel Editor (roles/monitoring.notificationChannelEditor) - API 用户

    如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  2. 验证您要检查的资源是否具有公共端点或者位于可配置的防火墙后面。

    对于所有其他配置,您必须创建专用拨测。如需了解详情,请参阅创建专用拨测

  3. 当您的资源设有防火墙时,请将防火墙配置为允许来自拨测服务器的 IP 地址的传入流量。如需了解详情,请参阅列出正常运行时间检查服务器 IP 地址

  4. 配置您要用于接收通知的通知渠道。我们建议您创建多种类型的通知渠道。如需了解详情,请参阅创建和管理通知渠道

  5. 为拨测确定至少三个检查工具。 正常运行时间检查区域 USA 包括 USA_OREGONUSA_IOWAUSA_VIRGINIA 区域。每个 USA_* 区域都有一个检查工具,而 USA 则包含全部三个检查工具。其他正常运行时间检查区域 EUROPESOUTH_AMERICAASIA_PACIFIC,每个区域都有一个检查工具。

    如果您在使用 Google Cloud 控制台时选择全球,或者在使用 API 时选择了 REGION_UNSPECIFIED,则系统会从所有拨测区域发出拨测。

创建拨测

本部分介绍如何创建和配置拨测。

如需为至少已配置一个 TCP 或 HTTP/s 端口的外部负载均衡器创建拨测,您可以按照以下说明操作。您也可以前往该服务的服务详情页面,然后点击创建拨测。当您从服务详情页面开始操作时,系统会预填充服务专用字段。

控制台

如需使用 Google Cloud 控制台创建拨测,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  拨测

    前往拨测

  2. 点击创建拨测

    创建正常运行时间检查对话框。

  3. 指定正常运行时间检查的目标:

    1. 选择协议。您可以选择 HTTPHTTPSTCP

    2. 选择以下资源类型之一:

      • 网址:任何 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 发送请求。在此表达式中,对于网址资源,target 是主机名或 IP 地址。对于 App Engine 资源,target 是派生自服务名称的主机名。对于实例和负载均衡器资源,target 是根据您为资源或资源组提供的名称派生的 IP 地址。

        如果您将 path 字段留空或将值设置为 /,则将向 http://target/ 发出请求。

        例如,如需对网址资源 example.com/tester 发出拨测,请将主机名字段设置为 example.com,并将路径字段设置为 /tester

        假设您已使用支持 //hello 的调度程序将服务器部署到 App Engine。要向“/”处理程序发出拨测,请将 Path 字段留空。如需向 /hello 处理程序发出正常运行时间检查,请将 Path 字段的值设置为 /hello

    4. 输入特定于资源的字段:

      • 对于网址资源,请在主机名字段中输入主机名。例如,输入 example.com

      • 对于 App Engine 资源,请在服务字段中输入服务名称。

      • 对于 Elastic Load BalancerInstance 资源,请按如下所示填写 Applies to 字段:

        • 如需对单个实例或负载均衡器发出拨测,请选择单个,然后使用该菜单选择特定实例或负载均衡器。
        • 要向 Monitoring 组发出拨测,请选择,然后使用菜单选择组名称。
    5. 可选:如需设置拨测的执行频率,请使用检查频率字段。

    6. 可选:如需选择检查工具区域,或为 HTTP 和 HTTPS 检查配置 SSL 证书、身份验证、标头和端口,请点击更多目标选项

      • 区域:选择拨测将从中接收请求的区域。拨测必须至少包含三个检查工具。除美国外,所有区域都有一种检查工具,它有三个检查工具。默认设置是全球,包括所有区域。
      • ICMP Pings:将正常运行时间检查配置为最多发送三个 ping。如需了解详情,请参阅使用 ICMP ping
      • Request Method(请求方法):对于 HTTP 检查,请选择请求方法。
      • 正文:对于 HTTP POST 检查,请输入网址编码正文;您必须自行进行编码。对于其他所有检查,请将此字段留空。
      • Host header(主机标头):填写此字段以检查虚拟主机。 此字段不适用于 TCP 检查。
      • Port:指定端口号。
      • 自定义标头:提供自定义标头,并根据需要对其进行加密。加密后,表单中的标头值将会被隐藏。对您不想向他人显示的身份验证相关标头使用加密。
      • Authentication:这些值会作为 Authorization 标头发送。此字段不适用于 TCP 检查。

        根据需要选择下列其中一项:

        • 基本身份验证:提供单个用户名和密码。密码将始终隐藏在表单中。
        • 服务代理身份验证:启用后,系统会为监控服务代理生成身份令牌。此选项仅适用于 HTTPS 检查。
      • SSL 证书验证:如果您为网址资源选择了 HTTPS,则默认情况下,该服务会尝试通过 HTTPS 进行连接,并验证 SSL 证书。 如果网址包含无效证书,拨测将会失败。 证书无效的原因包括:

        • 证书已过期
        • 自签名证书
        • 证书域名不匹配
        • 使用授权信息访问 (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 字段中,选择在发送通知之前拨测必须失败的时长。默认情况下,当至少两个区域报告拨测失败且时间至少为一分钟时,系统会发送通知。
    3. 在标有通知渠道的框中,点击 菜单,选择要添加的渠道,然后点击确定

      在该菜单中,通知渠道将针对每种渠道类型按字母顺序分组。

    如果您不想创建提醒政策,请确保切换按钮的文本为 Do not create an alert

  6. 点击继续并完成拨测:

    1. 为拨测输入一个描述性标题。

    2. 可选:如需为拨测添加用户定义的标签,请执行以下操作:

      1. 点击 显示用户标签
      2. 字段中,输入标签的名称。 标签名称必须以小写字母开头,可以包含小写字母、数字、下划线和短划线。例如,输入 severity
      3. 字段中,输入标签的值。标签值可以包含小写字母、数字、下划线和短划线。例如,输入 critical
      4. 对于其他标签,请点击添加用户标签,然后输入标签的键和值。
    3. 要验证您的正常运行时间检查配置,请点击测试。 如果结果与预期不符,请参阅检查失败,更正您的配置,然后重复验证步骤。

    4. 点击创建。如果您选择创建,但未填充必填字段,则系统会显示错误消息。

gcloud

如需创建正常运行时间检查,请运行 gcloud monitoring uptime create 命令:

gcloud monitoring uptime create DISPLAY_NAME REQUIRED_FLAGS OPTIONAL_FLAGS

在运行上一个命令之前,请执行以下操作:

  • DISPLAY_NAME 替换为您的拨测的名称。

  • 配置 REQUIRED_FLAGS 以指定拨测探测的资源。例如,以下命令会创建正常运行时间检查,用于测试特定项目的网址 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 字段设置为 GETPOST。如果省略此字段或将其设置为 METHOD_UNSPECIFIED,则发出 GET 请求。

      如果您要配置 POST 请求,请填写 contentType、可选 customContentTypebody 字段。

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 资源,然后应用该配置文件。

    以下示例展示了用于检查公共网址的配置:

    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 资源并应用新配置来创建提醒政策。

正常运行时间检查结果最长可能会延迟 5 分钟才开始流入 Monitoring。在此期间,正常运行时间检查信息中心会将状态报告为“no data available”。

使用 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 地址
  • Name or service not found:主机名可能不正确。
  • 403 Forbidden:服务向正常运行时间检查工具返回错误代码。例如,在 Amazon Linux 中,默认的 Apache 网络服务器配置会返回此代码;但在其他一些 Linux 版本中,该网络服务器配置会返回代码 200 (Success)。请参阅 Amazon Linux 的 LAMP 教程或您网络服务器的文档。
  • 404 Not found:路径可能不正确。
  • 408 Request timeout 或无响应:端口号可能不正确、服务可能未运行、服务可能无法访问或者超时值可能太小。检查您的防火墙是否允许来自正常运行时间服务器的流量;请参阅列出正常运行时间检查服务器 IP 地址。超时限制是响应验证选项的一部分。

如果您的拨测配置为发送 ping,则拨测失败的 ping 结果会写入 Cloud Logging。如需了解详情,请参阅使用 ICMP ping

后续步骤