创建公开拨测

本文档介绍了如何创建公开拨测。公开拨测可以从全球多个位置向可公开访问的网址或 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,则系统会从所有拨测区域发出拨测。

创建拨测

本部分介绍如何创建和配置正常运行时间检查。

要为符合以下条件的外部负载均衡器创建拨测 则您可以按照以下说明操作。 另一种方法是前往相应服务的服务详情页面,然后点击创建正常运行时间检查。当您从 服务详情页面,系统会预先填充服务专属字段。

控制台

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

  1. 在 Google Cloud 控制台中,前往  拨测页面:

    前往拨测

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  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。如需向“/”处理程序发出正常运行时间检查,请将路径字段留空。要发出 /hello 处理程序时,请将拨测设置为 Path 字段设置为 /hello

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

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

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

      • 对于 Elastic Load Balancer实例资源,请按如下所示填写应用于字段:

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

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

      • 区域:选择正常运行时间检查将从中接收请求的区域。正常运行时间检查必须至少有 3 个检查工具。除美国外,其他所有区域都有一项检查工具, 有三个棋盘格。默认设置(即全局)包含以下内容: 所有区域。
      • ICMP ping:配置正常运行时间检查以发送最多三次 ping。如需了解详情,请参阅使用 ICMP ping
      • 请求方法:对于 HTTP 检查,请选择请求方法。
      • 正文:对于 HTTP POST 检查,请输入网址编码正文;您必须自行进行编码。对于其他所有检查,请将此字段留空。
      • 主机标头:填写此字段以检查虚拟主机。此字段不适用于 TCP 检查。
      • Port:指定端口号。
      • 自定义标头:提供自定义标头,并根据需要对其进行加密。加密后表单中标头的值会被隐藏。对您不想向他人显示的身份验证相关标头使用加密。
      • 身份验证:这些值将作为 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 且内容匹配类型为包含。只有在响应数据包含 abcd 时,正常运行时间检查才会成功。如需了解详情,请参阅 验证响应数据
      • 输入响应内容。响应内容必须是字符串 不能超过 1024 个字节。在 API 中,此字段是 ContentMatcher 对象。
    • 为了防止由于拨测而创建日志条目,请清除日志检查失败

    • 对于 HTTP 拨测,请配置可接受的响应代码。 默认情况下,HTTP 正常运行情况检查会将任何 2xx 响应标记为成功响应。

  5. 点击继续,然后配置通知。

    如需在正常运行时间检查失败时收到通知,请创建提醒政策并为该政策配置通知渠道

    1. 可选:更新提醒政策的名称。
    2. 可选:在时长字段中,选择拨测的时长 必须失败后才能发送通知。默认情况下,当至少两个区域报告正常运行时间检查失败的时长达到 1 分钟时,系统会发送通知。
    3. 在标有通知渠道的框中, 点击 菜单,选择要添加的频道。 然后点击确定

      在此菜单中,通知渠道按字母顺序分组, 每种渠道类型

    如果您不想创建提醒政策,则请确保 该切换按钮的文字为不创建提醒

  6. 点击继续,然后完成正常运行情况检查:

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

    2. 可选:如需向正常运行时间检查添加用户定义的标签,请执行以下操作:

      1. 点击 显示用户标签
      2. Key 字段中,输入标签的名称。 标签名称必须以小写字母开头,并且可以包含 小写字母、数字、下划线和短划线。例如: 输入 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 标志以替换默认值 值。例如,当--protocol 协议不是 http

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 控制台中,转到 提醒页面:

        进入提醒

        如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

      2. 选择管理通知渠道
      3. 前往您要添加的渠道类型,点击添加,然后完成对话框。
    2. 如需创建提醒政策,请执行以下操作:

      1. 在 Google Cloud 控制台中,前往  拨测页面:

        前往拨测

        如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

      2. 找到拨测,选择 更多, 然后选择添加提醒政策
      3. 在对话框中,前往通知和名称部分,展开通知渠道,然后进行选择。
      4. 为提醒政策命名,然后点击创建政策

    您可以通过向配置文件添加 google_monitoring_alert_policy 资源并应用新配置来创建提醒政策。

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

使用 ICMP ping

为帮助您排查失败的公共拨测问题,您可以 拨测发送 检查期间的 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 控制台时 展开 More target options 并在 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 教程 或 Web 服务器的文档
  • 404 Not found:路径可能不正确。
  • 408 Request timeout 或无响应:端口号可能不正确、服务可能未运行、服务可能无法访问或者超时值可能太小。检查您的防火墙是否允许来自正常运行服务器的流量;请参阅列出拨测服务器 IP 地址。超时限制是响应验证选项的一部分。

    由于网络拥塞,可能会发生请求超时。例如, 网络拥塞时,你可能会注意到 一个检查工具失败,但所有其他检查工具成功。 如果提醒政策使用默认配置,单个检查器的失败不会导致系统发送通知。

如果您的正常运行时间检查配置为发送 ping,则失败的正常运行时间检查的 ping 结果会写入 Cloud Logging。如需了解详情,请参阅使用 ICMP ping

后续步骤