管理正常运行时间检查

正常运行时间检查是向资源发送的请求,用于查看资源是否响应。您可以使用正常运行时间检查来确定虚拟机实例、App Engine 服务、网址或 AWS 负载平衡器的可用性。

您可以创建提醒政策来在正常运行时间检查失败时创建突发事件,以监控资源的可用性。您可以将提醒政策配置为通过电子邮件或其他渠道通知您,并且该通知可以包含未响应资源的详细信息。您还可以选择在 Monitoring 正常运行时间检查信息中心中观察正常运行时间检查的结果。

本页面介绍如何执行以下操作:

  • 创建新的正常运行时间检查。
  • 查看正常运行时间检查信息中心。
  • 修改正常运行时间检查。
  • 删除正常运行时间检查。

如需查看指向价格页面以及描述如何监控正常运行时间检查的页面的链接,请参阅后续步骤部分。

准备工作

  1. 能否使用正常运行时间检查取决于保护您的服务的防火墙。

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

    对于 HTTP 和 HTTPS,如果响应是指向其他网址的重定向,则检查将从该网址中检索数据。最后,正常运行时间检查会评估数据以确定检查是成功还是失败。

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

    • HTTP 状态为 Success
    • 数据不包含所需内容,或者所需内容已存在。

创建正常运行时间检查

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

控制台

如需使用 Google Cloud Console 创建正常运行时间检查,请执行以下操作:

  1. 在 Cloud Console 中,选择 Monitoring

    转到“监控”

  2. 点击正常运行时间检查

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

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

  4. 输入正常运行时间检查的说明性标题,然后点击下一步

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

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

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

      • 网址:任何 IPv4 地址或主机名。路径和端口分开输入。
      • App Engine:App Engine 应用(模块)。
      • Instance:Compute Engine 或 AWS EC2 实例。
      • 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

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

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

        • 要向单个实例或负载平衡器发出正常运行时间检查,请在适用对象字段中选择单个,然后使用菜单选择特定实例或负载平衡器。
        • 要向 Monitoring 组发出正常运行时间检查,请在适用对象字段中选择,然后使用菜单选择组名称。
    5. 检查频率字段控制正常运行时间检查的执行频率。您可以保留默认值,也可以从选项菜单中选择一个值。

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

      • 区域:选择正常运行时间检查将从中接收请求的区域。正常运行时间检查必须至少有 3 个检查工具。除美国有 3 个检查工具外,其他所有区域都只有 1 个检查工具。默认设置全球包括所有区域。
      • 常规:填写此字段以检查虚拟主机。此字段不适用于 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. 点击下一步

  6. 配置响应要求:

    • 从选项菜单中选择响应超时。您可以选择介于 160 秒之间的任何值。如果在此超时期限内未收到多个位置的响应,则正常运行时间检查失败。

    • 对于内容匹配,请确保切换标签为已启用内容匹配

      • 从选项菜单中选择响应内容匹配类型。此字段用于确定如何将响应内容与返回的数据进行比较。例如,如果响应内容为 abcd 且内容匹配类型为包含,则在响应数据包含 abcd 时正常运行时间检查会成功。如果响应不包含 abcd,则正常运行时间检查会失败。
      • 输入响应内容。此值必须是不超过 1024 个字节的字符串。在 API 中,这是 ContentMatcher 对象。
    • 如果您不希望将正常运行时间检查发送到 Cloud Logging,请取消选中日志检查失败

    • 点击下一步

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

    如果您不想在此流程中创建提醒政策,请确保切换按钮对应的文本为不创建提醒。点击按钮更改切换状态。

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

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

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

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

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

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

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

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

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

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

  9. 点击创建。如果缺少必需数据,则无法成功保存,同时对话框按钮旁边会显示需要数据的字段列表。保存更改后,系统会显示正常运行时间检查已创建 (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.getDisplayName());
  } 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”。

正常运行时间检查的标识符

创建正常运行时间检查后,Monitoring 会为其分配一个称为“正常运行时间检查 ID”的标识符。此标识符可嵌入新正常运行时间检查的资源名称中:

projects/PROJECT_ID/uptimeCheckConfigs/UPTIME_CHECK_ID

您可以调用创建或列出正常运行时间检查的方法,然后从其响应中获取正常运行时间检查 ID。您还可以在配置部分的正常运行时间详情窗口中找到正常运行时间检查 ID。

验证正常运行时间检查

在 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 地址。超时限值通过 Advanced OptionsHealthcheck 部分指定。

查看正常运行时间检查

要查看正常运行时间检查,请执行以下操作:

控制台

要查看单个正常运行时间检查的详细状态,请执行以下操作:

  1. 在 Cloud Console 中,选择 Monitoring

    转到“监控”

  2. 点击正常运行时间检查

  3. 要查看正常运行时间详情窗口,请找到要查看的正常运行时间检查,然后点击正常运行时间检查名称。

    以下屏幕截图显示了名称为“我的正常运行时间检查”(My Uptime Check) 的正常运行时间检查的正常运行时间详细信息:

    正常运行时间检查信息中心示例。

    正常运行时间详情窗口包含以下信息:

    • 选定的时间间隔。默认情况下,时间间隔为 1 小时
    • 正常运行时间检查的名称。在示例中,名称为我的正常运行时间检查 (My Uptime Check)
    • 正常运行时间百分比和平均延迟时间。 正常运行时间百分比值是按照 (S/T)*100 计算出的百分比,其中 S 表示检查响应的成功次数,T 是所有位置的检查响应总数。对于群组检查,ST 的值分别是所有当前组成员中相应值的总和。

      例如,在 25 分钟时段内,从所有区域运行一分钟时长的正常运行时间检查会从 6 个位置收到请求,每个位置 25 个,共计 150 个请求。如果信息中心报告的正常运行时间百分比为 83.3%,则表示 150 个请求中有 125 个成功。

    • 已通过检查 (Passed checks)正常运行时间检查延迟时间 (Uptime check latency) 窗格会以图形方式显示已通过检查的数量和每项检查的延迟时间随时间变化的情况。

    • 当前状态窗格会显示最近检查的状态。 区域旁边内含对勾的绿色圆圈表示该区域中最近一次检查成功运行;内含 x 的红色圆圈则表示失败。

    • 配置窗格显示正常运行时间检查的配置。 此数据是在创建正常运行时间检查时分配的。 检查 Id 值对应于 API 调用中的 UPTIME_CHECK_ID 值。

    • 提醒政策窗格列出了关联的提醒政策的相关信息。 在示例信息中心中,已配置一个提醒政策。

C#

public static object GetUptimeCheckConfig(string configName)
{
    var client = UptimeCheckServiceClient.Create();
    UptimeCheckConfig config = client.GetUptimeCheckConfig(configName);
    if (config == null)
    {
        Console.Error.WriteLine(
            "No configuration found with the name {0}", configName);
        return -1;
    }
    Console.WriteLine("Name: {0}", config.Name);
    Console.WriteLine("Display Name: {0}", config.DisplayName);
    Console.WriteLine("Http Path: {0}", config.HttpCheck.Path);
    return 0;
}

Java

private static void getUptimeCheckConfig(String projectId, String checkName) throws IOException {
  try (UptimeCheckServiceClient client = UptimeCheckServiceClient.create()) {
    String fullCheckName = UptimeCheckConfigName.format(projectId, checkName);
    UptimeCheckConfig config = client.getUptimeCheckConfig(fullCheckName);
    if (config != null) {
      System.out.println(config.toString());
    } else {
      System.out.println(
          "No uptime check config found with name " + checkName + " in project " + projectId);
    }
  } catch (Exception e) {
    usage("Exception getting uptime check: " + e.toString());
    throw e;
  }
}

Go


// get is an example of getting an uptime check. resourceName should be
// of the form `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`.
func get(w io.Writer, resourceName 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.GetUptimeCheckConfigRequest{
		Name: resourceName,
	}
	config, err := client.GetUptimeCheckConfig(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("GetUptimeCheckConfig: %v", err)
	}
	fmt.Fprintf(w, "Config: %v", config)
	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 uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';

const request = {
  // i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
  name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};

console.log(`Retrieving ${request.name}`);

// Retrieves an uptime check config
const [uptimeCheckConfig] = await client.getUptimeCheckConfig(request);
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;

/**
 * Example:
 * ```
 * get_uptime_check($projectId, $configName);
 * ```
 *
 * @param string $projectId Your project ID
 * @param string $configName
 */
function get_uptime_check($projectId, $configName)
{
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $uptimeCheck = $uptimeCheckClient->getUptimeCheckConfig($configName);

    print('Retrieved an uptime check:' . PHP_EOL);
    print($uptimeCheck->serializeToJsonString() . PHP_EOL);
}

Python

def get_uptime_check_config(config_name):
    client = monitoring_v3.UptimeCheckServiceClient()
    config = client.get_uptime_check_config(request={"name": config_name})
    pprint.pprint(config)

Ruby

def get_uptime_check_config config_name
  require "google/cloud/monitoring"

  client = Google::Cloud::Monitoring.uptime_check_service
  config = client.get_uptime_check_config name: config_name
  pp config.to_h
  config
end

修改正常运行时间检查

无法更改正常运行时间检查协议、资源类型以及受监控的资源。如果要修改这些字段,必须使用正确的配置创建正常运行时间检查。但是,正常运行时间检查中的所有其他字段都可以在创建检查后进行修改。

要修改与正常运行时间检查关联的提醒政策,请在 Monitoring 导航窗格中点击 提醒,选择要修改的政策,然后点击修改

要修改正常运行时间检查,请执行以下操作:

控制台

  1. 在 Cloud Console 中,选择 Monitoring

    转到“监控”

  2. 点击正常运行时间检查

  3. 找到要修改的正常运行时间检查,然后执行以下任一操作:

    • 点击更多 并选择修改
    • 查看正常运行时间检查详情,然后点击修改
  4. 根据需要更改字段的值。您无法修改所有字段。如果检查的自定义标头值处于隐藏状态,您就无法显示这些值。

  5. 要验证检查是否有效,请点击测试。如果测试失败,请参阅检查失败以了解可能的原因。

  6. 点击保存

API

调用 projects.uptimeCheckConfigs.patch 方法。为该方法设置参数,如下所示:

  • uptimeCheckConfig.name:必需。这是 REST 网址的一部分,是待修改正常运行时间检查的资源名称:

    projects/PROJECT_ID/uptimeCheckConfigs/UPTIME_CHECK_ID
    

    您可以从 createlist 方法的响应中获取 UPTIME_CHECK_ID。该 ID 不会显示在 Cloud Console 中。

  • updateMask:可选。这是一个查询参数:?updateMask=[FIELD_LIST][FIELD_LIST]UptimeCheckConfig 对象中应更改的字段的英文逗号分隔列表。例如:

    "resource.type,httpCheck.path"
    
  • 请求正文必须包含带有新字段值的 UptimeCheckConfig

如果设置了 updateMask,则只有 updateMask 中列出的字段会替换现有配置中的相应字段。如果一个字段具有子字段,并且该字段已在字段掩码中列出但其子字段均未列出,则该字段的所有子字段都将替换相应的字段。

如果未设置 updateMask,则请求正文中的配置将替换整个现有配置。

patch 方法会返回已更改配置的 UptimeCheckConfig 对象。

C#

public static object UpdateUptimeCheck(string configName,
    string newHttpPath, string newDisplayName)
{
    var client = UptimeCheckServiceClient.Create();
    var config = client.GetUptimeCheckConfig(configName);
    var fieldMask = new FieldMask();
    if (newDisplayName != null)
    {
        config.DisplayName = newDisplayName;
        fieldMask.Paths.Add("display_name");
    }
    if (newHttpPath != null)
    {
        config.HttpCheck.Path = newHttpPath;
        fieldMask.Paths.Add("http_check.path");
    }
    client.UpdateUptimeCheckConfig(config);
    return 0;
}

Java

private static void updateUptimeCheck(
    String projectId, String displayName, String hostName, String pathName) throws IOException {
  String fullCheckName = UptimeCheckConfigName.format(projectId, displayName);

  UpdateUptimeCheckConfigRequest request =
      UpdateUptimeCheckConfigRequest.newBuilder()
          .setUpdateMask(FieldMask.newBuilder().addPaths("http_check.path"))
          .setUptimeCheckConfig(
              UptimeCheckConfig.newBuilder()
                  .setName(fullCheckName)
                  .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.updateUptimeCheckConfig(request);
    System.out.println("Uptime check updated: \n" + config.toString());
  } catch (Exception e) {
    usage("Exception updating uptime check: " + e.toString());
    throw e;
  }
}

Go


// update is an example of updating an uptime check. resourceName should be
// of the form `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`.
func update(w io.Writer, resourceName, displayName, httpCheckPath 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()
	getReq := &monitoringpb.GetUptimeCheckConfigRequest{
		Name: resourceName,
	}
	config, err := client.GetUptimeCheckConfig(ctx, getReq)
	if err != nil {
		return nil, fmt.Errorf("GetUptimeCheckConfig: %v", err)
	}
	config.DisplayName = displayName
	config.GetHttpCheck().Path = httpCheckPath
	req := &monitoringpb.UpdateUptimeCheckConfigRequest{
		UpdateMask: &field_mask.FieldMask{
			Paths: []string{"display_name", "http_check.path"},
		},
		UptimeCheckConfig: config,
	}
	config, err = client.UpdateUptimeCheckConfig(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("UpdateUptimeCheckConfig: %v", err)
	}
	fmt.Fprintf(w, "Successfully updated %v", resourceName)
	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 uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';
// const displayName = 'A New Display Name';
// const path = '/some/path';

const request = {
  // i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
  name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};

console.log(`Updating ${request.name} to ${displayName}`);

// Updates the display name and path on an uptime check config
request.uptimeCheckConfig = {
  name: request.name,
  displayName: displayName,
  httpCheck: {
    path: path,
  },
};

request.updateMask = {
  paths: ['display_name', 'http_check.path'],
};

const [response] = await client.updateUptimeCheckConfig(request);
console.log(`${response.name} config updated.`);

PHP

use Google\Cloud\Monitoring\V3\UptimeCheckServiceClient;
use Google\Protobuf\FieldMask;

/**
 * Example:
 * ```
 * update_uptime_checks($projectId);
 * ```
 */
function update_uptime_checks($projectId, $configName, $newDisplayName = null, $newHttpCheckPath = null)
{
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $uptimeCheck = $uptimeCheckClient->getUptimeCheckConfig($displayName);
    $fieldMask = new FieldMask();
    if ($newDisplayName) {
        $fieldMask->getPaths()[] = 'display_name';
        $uptimeCheck->setDisplayName($newDisplayName);
    }
    if ($newHttpCheckPath) {
        $fieldMask->getPaths()[] = 'http_check.path';
        $uptimeCheck->getHttpCheck()->setPath($newHttpCheckPath);
    }

    $uptimeCheckClient->updateUptimeCheckConfig($uptimeCheck, $fieldMask);

    print($uptimeCheck->serializeToString() . PHP_EOL);
}

Python

def update_uptime_check_config(
    config_name, new_display_name=None, new_http_check_path=None
):
    client = monitoring_v3.UptimeCheckServiceClient()
    config = client.get_uptime_check_config(request={"name": config_name})
    field_mask = field_mask_pb2.FieldMask()
    if new_display_name:
        field_mask.paths.append("display_name")
        config.display_name = new_display_name
    if new_http_check_path:
        field_mask.paths.append("http_check.path")
        config.http_check.path = new_http_check_path
    client.update_uptime_check_config(request={"uptime_check_config": config, "update_mask": field_mask})

Ruby

def update_uptime_check_config config_name:         nil,
                               new_display_name:    nil,
                               new_http_check_path: nil
  require "google/cloud/monitoring"

  client = Google::Cloud::Monitoring.uptime_check_service
  config = { name: config_name }
  field_mask = { paths: [] }
  unless new_display_name.to_s.empty?
    field_mask[:paths].push "display_name"
    config[:display_name] = new_display_name
  end
  unless new_http_check_path.to_s.empty?
    field_mask[:paths].push "http_check.path"
    config[:http_check] = { path: new_http_check_path }
  end
  client.update_uptime_check_config uptime_check_config: config,
                                    update_mask:         field_mask
end

新的正常运行时间检查结果最长可能会延迟 5 分钟显示。在此期间,之前的正常运行时间检查的结果会显示在信息中心内并应用于提醒政策中。

删除正常运行时间检查

如果您尝试使用 Cloud Console 删除正常运行时间检查,但存在依赖于正常运行时间检查的提醒政策,则删除操作将失败。从使用该检查的所有提醒政策中移除正常运行时间检查后,重试删除。

如果您尝试使用 Cloud Monitoring API 删除正常运行时间检查,则即使存在依赖于该检查的提醒政策,系统也会删除正常运行时间检查。不生成任何错误。不会针对缺失检查创建任何突发事件。在删除正常运行时间检查之前,确保没有依赖于此检查的提醒政策。

要删除正常运行时间检查,请执行以下操作:

控制台

  1. 在 Cloud Console 中,选择 Monitoring

    转到“监控”

  2. 点击正常运行时间检查

  3. 找到要修改的正常运行时间检查,然后执行以下任一操作:

    • 点击更多 并选择删除
    • 查看正常运行时间检查详情,然后点击删除

API

调用 projects.uptimeCheckConfigs.delete 方法。填写参数,如下所示:

  • name:必需。这是待删除正常运行时间检查配置的资源名称:

    projects/PROJECT_ID/uptimeCheckConfigs/UPTIME_CHECK_ID
    

    您可以从 createlist 方法的响应中获取 UPTIME_CHECK_ID。该 ID 不会显示在 Cloud Console 中。

C#

public static object DeleteUptimeCheckConfig(string configName)
{
    var client = UptimeCheckServiceClient.Create();
    client.DeleteUptimeCheckConfig(configName);
    Console.WriteLine($"Deleted {configName}");
    return 0;
}

Java

private static void deleteUptimeCheckConfig(String projectId, String checkName)
    throws IOException {
  try (UptimeCheckServiceClient client = UptimeCheckServiceClient.create()) {
    client.deleteUptimeCheckConfig(UptimeCheckConfigName.format(projectId, checkName));
  } catch (Exception e) {
    usage("Exception deleting uptime check: " + e.toString());
    throw e;
  }
}

Go


// delete is an example of deleting an uptime check. resourceName should be
// of the form `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`.
func delete(w io.Writer, resourceName string) error {
	ctx := context.Background()
	client, err := monitoring.NewUptimeCheckClient(ctx)
	if err != nil {
		return fmt.Errorf("NewUptimeCheckClient: %v", err)
	}
	defer client.Close()
	req := &monitoringpb.DeleteUptimeCheckConfigRequest{
		Name: resourceName,
	}
	if err := client.DeleteUptimeCheckConfig(ctx, req); err != nil {
		return fmt.Errorf("DeleteUptimeCheckConfig: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted %q", resourceName)
	return 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 uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';

const request = {
  // i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
  name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};

console.log(`Deleting ${request.name}`);

// Delete an uptime check config
await client.deleteUptimeCheckConfig(request);
console.log(`${request.name} deleted.`);

PHP

use Google\Cloud\Monitoring\V3\UptimeCheckServiceClient;

/**
 * Example:
 * ```
 * delete_uptime_check($projectId, $configName);
 * ```
 *
 * @param string $projectId Your project ID
 * @param string $configName
 */
function delete_uptime_check($projectId, $configName)
{
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $uptimeCheckClient->deleteUptimeCheckConfig($configName);

    printf('Deleted an uptime check: ' . $configName . PHP_EOL);
}

Python

# `config_name` is the `name` field of an UptimeCheckConfig.
# See https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs#UptimeCheckConfig.
def delete_uptime_check_config(config_name):
    client = monitoring_v3.UptimeCheckServiceClient()
    client.delete_uptime_check_config(request={"name": config_name})
    print("Deleted ", config_name)

Ruby

def delete_uptime_check_config config_name
  require "google/cloud/monitoring"

  client = Google::Cloud::Monitoring.uptime_check_service
  client.delete_uptime_check_config name: config_name
  puts "Deleted #{config_name}"
end

后续步骤

  • 要查看正常运行时间检查的价格和限制,请参阅价格和限制
  • 要查看所有正常运行时间检查的列表,请参阅查看正常运行时间检查
  • 要获取可能用于执行正常运行时间检查的 IP 地址列表,请参阅获取 IP 地址
  • 要使用 API 确定正常运行时间检查的状态,请监控指标 monitoring.googleapis.com/uptime_check/check_passed。请参阅 Google Cloud 指标列表,了解详细信息。