查看正常运行时间检查

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

  • 查看正常运行时间检查的状态。
  • 获取正常运行时间检查使用的 IP 地址列表。

要创建、更新和删除正常运行时间检查,请参阅管理正常运行时间检查页面。每个工作区最多可以有 100 个正常运行时间检查。

正常运行时间检查概览

Monitoring 提供了一个可显示所有正常运行时间检查的概览页面,以及针对各个检查的详细信息中心。

要查看概览,请转到 Uptime Checks > Uptime Checks Overview

转至正常运行时间检查概览

对于每个正常运行时间检查,您可以看到每个位置最近一次的检查结果,如以下屏幕截图所示:

正常运行时间检查监控

信息中心

要获取单个正常运行时间检查的详细状态,请在概览中或左侧导航栏的 Uptime Checks 菜单中的列表中点击任一检查。以下是一个示例信息中心:

正常运行时间检查详情

Location results 区域显示所有适用区域中正常运行时间检查的结果。区域旁边的绿点表示该区域中最近一次检查成功运行;红点表示失败。如将鼠标悬停在该点上,页面会显示上次运行的延迟时间以及 HTTP 响应代码(如果适用)。

Check config 区域包含正常运行时间检查的说明,包括 Check ID。此 ID 是在创建该正常运行时间检查时分配的。该值对应于 API 调用中的 [UPTIME_CHECK_ID] 值。

API

要检索现有的正常运行时间检查配置,请使用 projects.uptimeCheckConfigs.list

在 API 中,正常运行时间检查由其 [UPTIME_CHECK_ID] 标识,它是正常运行时间检查显示名的重新拼写。例如,显示名“my uptime check”可能会变成 ID“my-uptime-check”,或者这一对应关系也可能更为复杂。

在 Stackdriver Monitoring 控制台的 Uptime Overview 中显示的名称由您指定。

正常运行时间百分比

Uptime 值是按照 (S/T)*100 计算的百分比,其中 S 是成功检查响应的数量,T 是所有位置的检查响应的总数。

对于群组检查,ST 的值分别是所有当前组成员中相应值的总和。

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

获取正常运行时间检查 IP 地址

如果您要检查受防火墙保护的服务,则可以对服务防火墙进行配置,令其接受来自用于正常运行时间检查的当前一组 IP 地址的流量。要获取 IP 地址,请使用以下说明:

Console

1. 转到您的项目的 Uptime Checks 页面。

  1. Add Uptime Check 旁边的 More 菜单中,选择 Download Source IPs

    正常运行时间检查下载 IP

API

  1. 调用 Monitoring API 的 uptimeCheckIps.list 方法。

  2. 该方法将为每个 IP 地址返回以下信息:

    • 区域:USAEUROPESOUTH_AMERICAASIA_PACIFIC
    • 区域内更具体的位置。
    • IPv4 或 IPv6 格式的 IP 地址,而不是范围。

C#

public static object ListUptimeCheckIps()
{
    var client = UptimeCheckServiceClient.Create();
    var ips = client.ListUptimeCheckIps(new ListUptimeCheckIpsRequest());
    foreach (UptimeCheckIp ip in ips)
    {
        Console.WriteLine("{0,20} {1}", ip.IpAddress, ip.Location);
    }
    return 0;
}

Java

private static void listUptimeCheckIPs() throws IOException {
  try (UptimeCheckServiceClient client = UptimeCheckServiceClient.create()) {
    ListUptimeCheckIpsPagedResponse response =
        client.listUptimeCheckIps(ListUptimeCheckIpsRequest.newBuilder().build());
    for (UptimeCheckIp config : response.iterateAll()) {
      System.out.println(config.getRegion() + " - " + config.getIpAddress());
    }
  } catch (Exception e) {
    usage("Exception listing uptime IPs: " + e.toString());
    throw e;
  }
}

Go

// listIPs is an example of listing uptime check IPs.
func listIPs(w io.Writer) error {
	ctx := context.Background()
	client, err := monitoring.NewUptimeCheckClient(ctx)
	if err != nil {
		return fmt.Errorf("NewUptimeCheckClient: %v", err)
	}
	defer client.Close()
	req := &monitoringpb.ListUptimeCheckIpsRequest{}
	it := client.ListUptimeCheckIps(ctx, req)
	for {
		config, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("ListUptimeCheckIps: %v", err)
		}
		fmt.Fprintln(w, config)
	}
	fmt.Fprintln(w, "Done listing uptime check IPs")
	return nil
}

Node.js

// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');

// Creates a client
const client = new monitoring.UptimeCheckServiceClient();

// List uptime check IPs
const [uptimeCheckIps] = await client.listUptimeCheckIps();
uptimeCheckIps.forEach(uptimeCheckIp => {
  console.log(
    uptimeCheckIp.region,
    uptimeCheckIp.location,
    uptimeCheckIp.ipAddress
  );
});

PHP

use Google\Cloud\Monitoring\V3\UptimeCheckServiceClient;

/**
 * Example:
 * ```
 * list_uptime_check_ips($projectId);
 * ```
 */
function list_uptime_check_ips($projectId)
{
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $pages = $uptimeCheckClient->listUptimeCheckIps();

    foreach ($pages->iteratePages() as $page) {
        $ips = $page->getResponseObject()->getUptimeCheckIps();
        foreach ($ips as $ip) {
            printf(
                'ip address: %s, region: %s, location: %s' . PHP_EOL,
                $ip->getIpAddress(),
                $ip->getRegion(),
                $ip->getLocation()
            );
        }
    }
}

Python

def list_uptime_check_ips():
    client = monitoring_v3.UptimeCheckServiceClient()
    ips = client.list_uptime_check_ips()
    print(tabulate.tabulate(
        [(ip.region, ip.location, ip.ip_address) for ip in ips],
        ('region', 'location', 'ip_address')
    ))

Ruby

def list_ips
  require "google/cloud/monitoring/v3"
  client = Google::Cloud::Monitoring::V3::UptimeCheck.new

  # Iterate over all results.
  client.list_uptime_check_ips.each do |element|
    puts "#{element.location} #{element.ip_address}"
  end
end

返回的信息通常包含大约 20 个 IP 地址。正常运行时间检查可能来自其中的任一个 IP 地址,但对于每个时间间隔,每个地理位置上仅会用到一个地址。正常运行时间检查信息中心列出了地理位置,如上一部分所示。您还可以使用基于网络的免费服务来确定您下载的 IP 地址的注册位置。

正常运行时间检查所使用的 IP 地址可能会改变,但通常情况下每一刻钟改变不会超过一次,并且会给出通知。

识别正常运行时间检查流量

要识别来自正常运行时间检查服务器的请求,您可以使用您的服务的请求日志中的以下信息:

  • ipip 字段包含正常运行时间检查服务器使用的一个地址。请参阅获取 IP 地址
  • User-AgentUser-Agent 标头值始终为以下值:

    GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)
    

    指定 User-Agent 自定义标头会导致表单验证错误,以及无法保存检查配置。