创建公开拨测

本文档介绍了如何创建公开拨测。公开拨测可以从全球多个位置向可公开访问的网址或 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 控制台时选择全球,或选择 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 时,将 Hostname(主机名)字段设置为 example.com,并且 Path 字段设置为 /tester

        假设您已使用支持 //hello 的调度程序将服务器部署到 App Engine。要将拨测发送到 “/”处理程序时,请将 Path 字段留空。要发出 /hello 处理程序时,请将拨测设置为 Path 字段设置为 /hello

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

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

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

      • 对于 Elastic Load BalancerInstance 资源,填写 应用于字段,如下所示:

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

    6. 可选:选择检查工具区域或配置 SSL HTTP 和 HTTPS 的证书、身份验证、标头和端口 点击更多定位选项

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

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

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

        • 证书已过期
        • 自签名证书
        • 证书的域名不匹配
        • 使用授权信息访问 (AIA) 的证书 。

        要强制执行 HTTPS 拨测来验证 SSL 证书,请执行以下操作: 选择验证 SSL 证书

        要停用 SSL 证书验证,请清除 验证 SSL 证书

        如果您有 AIA 扩展 则必须停用 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. 可选:在时长字段中,选择拨测的时长 必须失败后才能发送通知。默认情况下,通知 当至少两个区域报告某服务的拨测失败时发送 持续时间至少为一分钟
    3. 在标有通知渠道的框中, 点击 菜单,选择要添加的频道。 然后点击确定

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

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

  6. 点击 Continue 并完成拨测:

    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 标志以替换默认值 值。例如,当--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
  • 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,则对于 失败的拨测会写入 Cloud Logging。如需更多信息 请参阅使用 ICMP ping

后续步骤