创建公开拨测

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

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

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

准备工作

  • 保护您的服务的防火墙会影响您使用拨测。

    • 如果您检查的资源不是公开提供的,您必须将资源的防火墙配置为允许正常运行时间检查服务器的流量传入。请参阅列出拨测服务器 IP 地址以下载 IP 地址列表。
    • 如果您正在检查的资源没有外部 IP 地址,则公开拨测将无法访问该资源。请考虑改用非公开拨测
  • 正常运行时间检查不会加载页面资产或运行 JavaScript,并且正常运行时间检查的默认配置不包含身份验证。

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

    要确保检查成功,必须满足以下条件:

    • HTTP 状态为 Success
    • 数据不包含所需内容,或者所需内容已存在。
  • 创建拨测时,您必须至少指定三个拨测工具。

    拨测区域 USA 有 3 个拨测工具。拨测区域 EUROPESOUTH_AMERICAASIA_PACIFIC 各有一个拨测工具。

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

创建拨测

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

控制台

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

  1. 在 Google Cloud Console 中,选择 Monitoring 或点击以下按钮:
    转到 Monitoring
  2. 在导航窗格中,选择拨测

  3. 点击创建正常运行时间检查

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

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

  5. 可选:要在拨测中添加用户定义的标签,请执行以下操作:

    1. 点击 更多元数据选项
    2. 点击,然后输入标签的名称。标签名称必须以小写字母开头,可以包含小写字母、数字、下划线和短划线。例如,输入 severity
    3. 点击,然后输入标签的值。标签值可以包含小写字母、数字、下划线和短划线。例如,输入 critical
    4. 对于其他每个标签,点击添加用户标签,然后输入标签的键和值。
  6. 点击下一步,然后指定拨测目标:

    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 处理程序发出正常运行时间检查,请将路径字段的值设置为 /hello

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

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

      • 对于 Kubernetes LoadBalancer Service 资源,在 Kubernetes 服务字段中输入服务名称。

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

      • 对于 Elastic Load Balancer实例资源,填写以下字段:

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

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

      • 区域:选择拨测将从中接收请求的区域。正常运行时间检查必须至少有 3 个检查工具。除美国有 3 个检查工具外,其他所有区域都只有 1 个检查工具。默认设置全球包括所有区域。
      • 请求方法:对于 HTTP 检查,请选择请求方法。
      • 正文:对于 HTTP POST 检查,请输入网址编码正文;您必须自行进行编码。对于其他所有检查,请将此字段留空。
      • 常规:填写此字段以检查虚拟主机。此字段不适用于 TCP 检查。
      • Port:指定端口号。
      • 自定义标头:提供自定义标头,并根据需要对其进行加密。加密后表单中标头的值会被隐藏。 对您不想向他人显示的身份验证相关标头使用加密。

      • Authentication:提供一个用户名和密码。这些值将作为 Authorization 标头发送。如果您在此处设置了值,请不要另外再设置 Authorization 标头;如果您设置了 Authorization 标头,则不要在此处设置值。密码将始终隐藏在表单中。此字段不适用于 TCP 检查。

      • 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 证书复选框。

    7. 点击下一步

  7. 配置响应要求:

    • 可选:使用响应超时字段设置拨测的超时期限。如果在此期限内未收到多个位置的响应,则拨测会失败。

    • 可选:如需将拨测配置为执行内容匹配,请确保切换标签为已启用内容匹配

      • 从选项菜单中选择响应内容匹配类型。此字段用于确定如何将响应内容与返回的数据进行比较。例如,如果响应内容为 abcd 且内容匹配类型为包含,则在响应数据包含 abcd 时正常运行时间检查会成功。如果响应不包含 abcd,拨测将失败。如需了解详情,请参阅验证响应数据
      • 输入响应内容。此值必须是不超过 1024 个字节的字符串。在 API 中,这是 ContentMatcher 对象。
    • 可选:为防止因拨测而产生的日志条目,请清除日志检查失败选项。

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

    • 点击下一步

  8. 创建提醒政策。当提醒政策监控拨测时,如果拨测失败,则系统会创建突发事件,并向附加到该政策的所有通知渠道发送通知。例如,如果您向政策添加了电子邮件地址,则系统会向该地址发送电子邮件。您可以在此步骤中创建提醒政策,也可以在创建检查后创建提醒政策。

    我们建议您为正常运行时间检查创建提醒政策。但是,如需跳过此步骤,请确保切换按钮对应的文本为不创建提醒。点击按钮更改切换状态。

    要创建提醒政策作为此流程的一部分,请执行以下操作:

    1. 确保切换按钮文本为创建提醒。如有必要,请点击该按钮。

    2. 在名称字段中,输入提醒政策的名称或使用默认名称。

    3. 要向提醒政策添加一个或多个通知渠道,请在通知渠道文本框中点击菜单。选择要添加的渠道,然后点击 确定。系统会针对每种渠道类型按字母顺序将通知渠道分组。

      如果您要添加到提醒政策的通知渠道未列出,请点击管理通知渠道

      显示“刷新”和“管理渠道”按钮的通知对话框。

      系统会将您转到新的浏览器标签中的通知渠道窗口。添加通知渠道,然后返回此标签,点击刷新 ,然后选择要添加到提醒政策的通知渠道。 如需了解详情,请参阅通知渠道

    4. 可选:在时长字段中,选择在创建突发事件之前拨测必须失败的时长。默认情况下,将提醒政策配置为至少 2 个区域报告拨测失败的时长达到 1 分钟时创建突发事件。

    如需了解如何停用、修改和删除提醒政策,请参阅管理政策

  9. 要验证您的正常运行时间检查配置,请点击测试。 如果结果与预期不符,请参阅检查失败,更正您的配置,然后重复验证步骤。

  10. 点击创建。在您保存拨测并且未填充必填字段时,系统会显示错误消息。保存更改后,系统会显示拨测已创建 (Uptime check created) 对话框。

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 请求,则填写 contentTypebody 字段。

create 方法会返回新配置的 UptimeCheckConfig 对象。

如果创建的正常运行时间配置未按照预期方式工作,请参阅本页面中的检查失败部分。

C#

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

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


// 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: %v", 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: %v", 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: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Successfully created POST uptime check %q\n", config.GetDisplayName())
	return config, nil
}

Node.js

// 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

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

/**
 * 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')
{
    $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);

    $uptimeCheckConfig = $uptimeCheckClient->createUptimeCheckConfig(
        $uptimeCheckClient->projectName($projectId),
        $uptimeCheckConfig
    );

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

Python

def create_uptime_check_config_get(project_name, host_name=None, display_name=None):
    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_name, "uptime_check_config": config})
    pprint.pprint(new_config)
    return new_config

def create_uptime_check_config_post(project_name, host_name=None, display_name=None):
    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_name, "uptime_check_config": config})
    pprint.pprint(new_config)
    return new_config

Ruby

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

正常运行时间检查结果最长可能会延迟 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

如需将公共正常运行时间检查配置为包含 ping,您必须使用 Cloud Monitoring API 创建拨测配置或修改现有配置。您无法使用 Google Cloud Console 配置 ping。

每个拨测配置都包含一个 HttpCheck 对象或一个 TcpCheck 对象。这两个对象都包含 pingConfig 字段。使用此字段指定每次检查要包含的 ICMP ping 数量(最多 3 个)。默认情况下,系统不会发送任何 ping。

如需设置 pingConfig 字段的值,请使用具有以下结构的 PingConfig 对象:

{
  "pingsCount": integer
}

如需详细了解如何将 Monitoring API 用于拨测配置,请参阅创建拨测:API修改拨测:API

验证正常运行时间检查

在 Google Cloud Console 中创建拨测时,您可以在保存之前测试配置。

成功的检查

如果以下两个条件均成立,则正常运行时间检查会成功:

  • HTTP 状态为 Success
  • 响应不包含所需内容,或者在响应中成功搜索到所需内容。

失败的检查

以下是导致正常运行时间检查失败的原因:

  • 连接错误 - 拒绝 (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

后续步骤