管理運作時間檢查

Stackdriver 可從全球各地存取服務,以驗證服務的可用性。您可在快訊政策中使用這些運作時間檢查中的結果,也可以直接在 Monitoring 運作時間檢查資訊主頁中監控結果。

本頁面說明如何執行下列操作:

  • 建立新運作時間檢查。
  • 列出現有的運作時間檢查。
  • 編輯運作時間檢查。
  • 刪除運作時間檢查。

如要查看運作時間檢查的狀態,或取得可能用來執行運作時間檢查的 IP 位址清單,請參閱取得 IP 位址。如要使用 API 判斷運作時間檢查的狀態,請監控 monitoring.googleapis.com/uptime_check/check_passed 指標。詳情請參閱 GCP 指標清單

事前準備

  1. 使用運作時間檢查時,會受到保護服務的任何防火牆的影響。

    • 如果您正在檢查的資源並非公開提供的資源,則必須將資源的防火牆設定為允許來自運作時間檢查伺服器的連入流量。如要下載 IP 位址的清單,請參閱取得 IP 位址
    • 如果您正在檢查的資源沒有外部 IP 位址,則運作時間檢查無法進行連線。
  2. 運作時間檢查不會載入頁面資產或執行 JavaScript。運作時間檢查的預設設定不包含驗證。您可以使用進階選項啟用驗證。

    針對 HTTP 與 HTTPS,運作時間檢查會發出 GET 指令並擷取原始資料。如果 GET 回應重新導向至其他網址,檢查會從該網址擷取資料。最後,運作時間檢查會評估資料,判定檢查成功還是失敗。

    如要成功,必須符合兩個條件:

    • HTTP 狀態為 Success
    • 資料沒有必要內容,或存在必要內容。您可以使用「進階選項」來指定必要內容。

建立運作時間檢查

本節說明如何建立及設定運作時間檢查。

主控台

  1. 在 Stackdriver Monitoring 主控台中,依序前往「Uptime checks」(運作時間檢查) >「Uptime checks overview」(運作時間檢查總覽)

    前往「Uptime checks overview」(運作時間檢查總覽)

  2. 按一下右上角的 [Add uptime check] (新增運作時間檢查)

  3. 在「New uptime check」(新運作時間檢查) 視窗中,填入檢查相關欄位,如本頁面的基本選項一節所述。

    建立運作時間檢查

  4. 如需存取通訊埠、自訂標頭和驗證的設定,請按一下 [Advanced options] (進階選項)。詳情請參閱本頁面的進階選項一節。

  5. 如要查看運作時間檢查的結果,請按一下 [Test] (測試)。如果結果與您的期望不符,請參閱下方的檢查失敗部分,更正您的設定,並重複執行測試。

  6. 按一下 [Save] (儲存)。請務必填寫所有必填欄位,才能儲存運作時間檢查。如果 [Save] (儲存) 按鈕遭到停用,請檢查是否有遺漏的值。您必須在「Hostname」(主機名稱) 欄位中輸入值。

API

呼叫 projects.uptimeCheckConfigs.create 方法。如下設定方法的參數:

  • 父項:必填。這必須是要建立運作時間檢查的專案名稱。將 [PROJECT_ID] 替換為您的 GCP 專案 ID。格式如下:

    projects/[PROJECT_ID]
    
  • 要求主體必須包含新運作時間檢查的 UptimeCheckConfig 物件。本頁面的基本選項進階選項部分提供此物件的欄位說明。

    請將設定物件的 name 欄位保留空白,因為該欄位將在傳回的設定物件中設定。

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();
    string projectName = new ProjectName(projectId).ToString();
    // Create the config.
    var newConfig = client.CreateUptimeCheckConfig(projectName, config,
        CallSettings.FromCallTiming(CallTiming.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

// create creates an example uptime check.
func create(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 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{
					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: %v", err)
	}
	fmt.Fprintf(w, "Successfully created 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(project_name, host_name=None,
                               display_name=None):
    config = monitoring_v3.types.uptime_pb2.UptimeCheckConfig()
    config.display_name = display_name or 'New uptime check'
    config.monitored_resource.type = 'uptime_url'
    config.monitored_resource.labels.update(
        {'host': host_name or 'example.com'})
    config.http_check.path = '/'
    config.http_check.port = 80
    config.timeout.seconds = 10
    config.period.seconds = 300

    client = monitoring_v3.UptimeCheckServiceClient()
    new_config = client.create_uptime_check_config(project_name, 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/v3"

  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  project_name = Google::Cloud::Monitoring::V3::UptimeCheckServiceClient.project_path 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 }
  }
  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  new_config = client.create_uptime_check_config project_name, config
  puts new_config.name
  new_config
end

在運作時間檢查結果開始流入 Monitoring 之前,可能會有長達 25 分鐘的延遲。在該期間,運作時間檢查資訊主頁會將狀態回報為「no data available」(目前沒有任何資料)。

基本選項

如要建立新運作時間檢查,請為運作時間檢查的設定指定值。請於在 Stackdriver Monitoring 主控台中建立運作時間檢查時填入表單。當您在 API 中建立運作時間檢查時,請將對應的參數提供給 UptimeCheckConfig 物件。

  1. 「Title」(標題):可識別檢查的名稱。例如:Example.com uptime check

  2. 「Check Type」(檢查類型):選取 [HTTP]、[HTTPS] 或 [TCP] 通訊協定。

    如果您選擇 [HTTPS],服務會嘗試透過 HTTPS 連線,但不會驗證 SSL 憑證。例如,過期或自行簽署的憑證不會導致檢查失敗。

  3. 「Resource type」(資源類型):選擇下列其中一種資源類型:

    • [App Engine]:App Engine 應用程式 (模組)。
    • [Elastic Load Balancer] (彈性負載平衡器):AWS 負載平衡器。
    • [Instance] (執行個體):Compute Engine 或 AWS EC2 執行個體。在 API 中,執行個體分為 gce_instanceaws_ec2_instance
    • [URL] (網址):任何 IPv4 位址或主機名稱。路徑與通訊埠需分開輸入。
  4. 根據您的檢查類型與資源類型填入連線資訊:

    • 「Applies to」(套用對象) (App Engine、ELB 或執行個體):您可將運作時間檢查套用至單一資源或一組資源,例如「所有執行個體」。如果您選擇的是單一資源,請從選單列出的現有資源中選擇一個資源。如果您使用 API,請填入監控的資源與所需資源標籤,如受控資源清單一文所述。

    • 「Module」(模組) (App Engine):指定您的應用程式模組。

    • 「Hostname」(主機名稱) (除 App Engine 以外的所有項目):指定服務的主機名稱。例如,輸入 example.com

    • 「Path」(路徑) (HTTP、HTTPS):輸入主機或資源內的路徑,或使用預設路徑。例如,如要探測 example.com,請將此欄位保留空白。如要探測 example.com/tester,請輸入 /tester。請勿加入前置字串 example.com。在 API 中,請將此欄位保留空白,以使用預設值 /

    • 「Port」(通訊埠) (HTTP、HTTPS、TCP):選擇連線的通訊埠。

      • 針對 HTTP 與 HTTPS 檢查,此選項位於 [Advanced Options] (進階選項) 之下。
      • 在 API 中,請將此欄位保留空白,以使用預設值:TCP 或 HTTP 檢查為 80,HTTPS 檢查為 443。
    • 「Response content contains the text」(回應內容包含文字) (HTTP、HTTPS、TCP):填入字串 (最長 1024 個位元組),檢查回應中存在此字串即表示成功。如果字串沒有出現在回應中的任何位置,即表示檢查失敗。

      • 針對 HTTP 與 HTTPS 檢查,此欄位會出現在 [Advanced Options] (進階選項) 之下。
      • 在 API 中,這是 ContentMatcher 物件。
  5. 「Check every」(檢查時間間隔):[1 minute] (1 分鐘)、[5 minutes] (5 分鐘)、[10 minutes] (10 分鐘) 或 [15 minutes] (15 分鐘)。例如,如果您選擇 5 分鐘,則每個地理位置會每隔 5 分鐘嘗試連線至您的服務一次。使用預設的 6 個位置,並每 5 分鐘檢查一次,您的服務每分鐘平均會看見 1.2 次要求。每 1 分鐘檢查一次,您的服務每分鐘平均會看見 6 次要求。

進階選項

「Advanced options」(進階選項) 部分適用於 HTTP、HTTPS 與 TCP 檢查類型。

針對 HTTP 與 HTTPS,運作時間檢查會發出 GET 指令並擷取原始資料。如果 GET 回應重新導向至其他網址,檢查會從該網址擷取資料。最後,運作時間檢查會評估資料,判定檢查成功還是失敗。

如要成功,必須符合兩個條件:

  1. HTTP 狀態為 Success
  2. 資料沒有必要內容,或存在必要內容。您可以使用「Advanced options」(進階選項) 來指定必要內容。

這些設定是選用設定,會因檢查類型而不同:

  • 「HTTP Host Header」(HTTP 主機標頭):填入此欄位可檢查虛擬主機。這個欄位不適用於 TCP 檢查。

  • 「Port」(通訊埠):指定通訊埠編號。針對 TCP 檢查,此欄位會出現在 [Basic Options] (基本選項) 中。

  • 「Response content contains the text」(回應內容包含文字):填入字串 (最長 1024 個位元組),檢查回應中存在此字串即表示成功。針對 TCP 檢查,此欄位會出現在 [Basic Options] (基本選項) 之下。

  • 「Locations」(位置):選取適用的地理地區,您的檢查會在此位置接收要求。您必須選取足夠的地區,才能擁有至少三個有效位置。建立檢查時,每個地區中的位置都會列在地區名稱之下。所選地區中的新檢查工具位置會自動將要求傳送至設定的目的地。如要一律從所有可用位置傳送要求,請選取 [Global] (通用)。如要從現有地區中的所有位置傳送要求,而不從新地區中的新位置傳送要求,請選取所有現有地區,但不選取 [Global] (通用)

  • 「Custom Headers」(自訂標頭):提供自訂標頭,並視需要進行加密。加密後,表單中會隱藏標頭的值。如果您不希望團隊的其他成員看到驗證相關的標頭,可以使用加密功能。這個欄位不適用於 TCP 檢查。

  • 「Healthcheck Timeout」(健康狀態檢查逾時):指定逾時時間,範圍從 160 秒。如果來自多個位置的健康狀態檢查未在設定的逾時期限內取得回應,運作時間檢查將會失敗。如果只有一個健康狀態檢查未取得回應,則運作時間檢查不會失敗。

  • 「Authentication」(驗證):提供單一使用者名稱和密碼。這些值會做為授權標頭傳送。如果您在此處設定值。請不要設定單獨的授權標頭;如果您設定了授權標頭,請勿在此處設定值。表單中將一律隱藏密碼。這個欄位不適用於 TCP 檢查。

運作時間檢查的 ID

建立運作時間檢查時,Stackdriver 會指派一個 ID,稱為運作時間檢查 ID。此 ID 會嵌入到新運作時間檢查的資源名稱內:

projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]

可以透過方法叫用回應來取得運作時間檢查 ID,以建立或列出運作時間檢查。在 Stackdriver Monitoring 主控台頁面上也有運作時間檢查 ID,位在「Check config」(檢查設定) 面板的「Check ID」(檢查 ID) 欄位中。

驗證您的運作時間檢查

在 Stackdriver Monitoring 主控台中建立運作時間檢查時,您可以在儲存設定之前測試設定。

檢查成功

如果兩個條件為 true,即表示運作時間檢查成功:

  • HTTP 狀態為 Success
  • 回應沒有必要內容,或者在回應中搜尋必要內容成功。

檢查失敗

以下列舉一些運作時間檢查失敗的可能原因:

  • 連線錯誤 - 遭到拒絕:如果您使用預設的 HTTP 連線類型,請檢查您是否已安裝回應 HTTP 要求的網路伺服器。如果您尚未安裝網路伺服器,則可能會在新的執行個體上發生此情形;請參閱 Compute Engine 快速入門導覽課程。如果您使用 HTTPS 連線類型,則可能必須執行其他設定步驟。針對防火牆問題,請參閱取得 IP 位址
  • 找不到名稱或服務:主機名稱可能不正確。
  • 403 禁止:服務將錯誤代碼傳回至運作時間檢查工具。例如,預設的 Apache 網路伺服器設定會在 Amazon Linux 之下傳回此代碼,但在其他某些 Linux 版本之下會傳回代碼 200 (成功)。請參閱 Amazon Linux 的 LAMP 教學課程或網路伺服器的說明文件。
  • 404 找不到:路徑可能不正確。
  • 408 要求逾時,或沒有回應:通訊埠編號可能不正確、服務可能並未執行、服務可能無法存取,或逾時可能太低。請檢查您的防火牆是否允許來自運作時間伺服器的流量;請參閱取得 IP 位置。逾時限制在 [Advanced Options] (進階選項) 中的 Healthcheck (健康狀態檢查) 部分中指定。

建立快訊政策

如果您希望收到運作時間失敗的通知,請為新的運作時間檢查建立快訊政策。詳情請參閱運作時間檢查的快訊一文。

列出運作時間檢查

如要列出目前的運作時間檢查,請執行以下操作:

主控台

  1. 如要查看運作時間檢查清單,在 Stackdriver Monitoring 主控台中,依序前往「Uptime checks」(運作時間檢查) >「Uptime checks overview」(運作時間檢查總覽)。您的運作時間檢查可能會列在多個頁面上。

    前往「Uptime checks overview」(運作時間檢查總覽)

  2. 如要篩選檢查清單,請執行下列其中一項操作:

    • 在「Filter」(篩選器) 欄位中輸入文字,以標題中含有的文字限制檢查的清單。
    • 使用「Filter」(篩選器) 欄位左側的按鈕篩選特定群組的成員。

    按一下要查看的運作時間檢查,即可顯示檢查的相關詳細資訊。

API

如要取得運作時間設定的清單,請呼叫 projects.uptimeCheckConfigs.list 方法。請指定以下參數:

  • 父項:您要列出運作時間檢查的專案。格式為:

    projects/[PROJECT_ID]
    

如要取得特定運作時間檢查,請呼叫 projects.uptimeCheckConfigs.get 方法。請指定以下參數:

  • 名稱:運作時間檢查設定的完整名稱。

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    您可從 createlist 方法的回應中取得 [UPTIME_CHECK_ID]。ID 不會顯示在 Stackdriver Monitoring 主控台中。

C#

public static object ListUptimeCheckConfigs(string projectId)
{
    var client = UptimeCheckServiceClient.Create();
    var configs = client.ListUptimeCheckConfigs(
        new ProjectName(projectId).ToString());
    foreach (UptimeCheckConfig config in configs)
    {
        Console.WriteLine(config.Name);
    }
    return 0;
}

Java

private static void listUptimeChecks(String projectId) throws IOException {
  ListUptimeCheckConfigsRequest request = ListUptimeCheckConfigsRequest
      .newBuilder()
      .setParent(ProjectName.format(projectId))
      .build();
  try (UptimeCheckServiceClient client = UptimeCheckServiceClient.create()) {
    ListUptimeCheckConfigsPagedResponse response = client.listUptimeCheckConfigs(request);
    for (UptimeCheckConfig config : response.iterateAll()) {
      System.out.println(config.getDisplayName());
    }
  } catch (Exception e) {
    usage("Exception listing uptime checks: " + e.toString());
    throw e;
  }
}

Go

// list is an example of listing the uptime checks in projectID.
func list(w io.Writer, projectID string) error {
	ctx := context.Background()
	client, err := monitoring.NewUptimeCheckClient(ctx)
	if err != nil {
		return fmt.Errorf("NewUptimeCheckClient: %v", err)
	}
	defer client.Close()
	req := &monitoringpb.ListUptimeCheckConfigsRequest{
		Parent: "projects/" + projectID,
	}
	it := client.ListUptimeCheckConfigs(ctx, req)
	for {
		config, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("ListUptimeCheckConfigs: %v", err)
		}
		fmt.Fprintln(w, config)
	}
	fmt.Fprintln(w, "Done listing uptime checks")
	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 request = {
  parent: client.projectPath(projectId),
};

// Retrieves an uptime check config
const [uptimeCheckConfigs] = await client.listUptimeCheckConfigs(request);

uptimeCheckConfigs.forEach(uptimeCheckConfig => {
  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:
 * ```
 * list_uptime_checks($projectId);
 * ```
 */
function list_uptime_checks($projectId)
{
    $uptimeCheckClient = new UptimeCheckServiceClient([
        'projectId' => $projectId,
    ]);

    $pages = $uptimeCheckClient->listUptimeCheckConfigs(
        $uptimeCheckClient->projectName($projectId)
    );

    foreach ($pages->iteratePages() as $page) {
        foreach ($page as $uptimeCheck) {
            print($uptimeCheck->getName() . PHP_EOL);
        }
    }
}

Python

def list_uptime_check_configs(project_name):
    client = monitoring_v3.UptimeCheckServiceClient()
    configs = client.list_uptime_check_configs(project_name)

    for config in configs:
        pprint.pprint(config)

Ruby

def list_uptime_check_configs project_id
  require "google/cloud/monitoring/v3"

  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  project_name = Google::Cloud::Monitoring::V3::UptimeCheckServiceClient.project_path project_id
  configs = client.list_uptime_check_configs project_name

  configs.each { |config| puts config.name }
end

您也可以擷取單一運作時間檢查:

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.uptimeCheckConfigPath(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(config_name)
    pprint.pprint(config)

Ruby

def get_uptime_check_config config_name
  require "google/cloud/monitoring/v3"

  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  config = client.get_uptime_check_config config_name
  pp config.to_hash
  config
end

編輯運作時間檢查

如要編輯運作時間檢查,請執行以下操作:

主控台

  1. 在 Stackdriver Monitoring 主控台中,依序前往「Uptime checks」(運作時間檢查) >「Uptime checks overview」(運作時間檢查總覽)。您的運作時間檢查可能會列在多個頁面上。

    前往「Uptime checks overview」(運作時間檢查總覽)

  2. 在「Uptime checks overview」(運作時間檢查總覽) 中,前往運作時間檢查摘要的右側,然後按一下 [Edit] (編輯)

  3. 視需要變更欄位的值。您無法修改所有欄位。如果檢查的自訂標頭值為隱藏狀態,即表示您無法查看這些值。

  4. 如要確認檢查狀態,請按一下 [Test] (測試)。如果測試失敗,請參閱檢查失敗瞭解可能原因。

  5. 按一下 [Save] (儲存)。

API

呼叫 projects.uptimeCheckConfigs.patch 方法。如下設定方法的參數:

  • uptimeCheckConfig.name:必填。這是 REST 網址的一部分,也是要編輯的運作時間檢查的資源名稱:

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    您可從 createlist 方法的回應中取得 [UPTIME_CHECK_ID]。ID 不會顯示在 Stackdriver Monitoring 主控台中。

  • 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.uptimeCheckConfigPath(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(config_name)
    field_mask = monitoring_v3.types.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(config, field_mask)

Ruby

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

  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  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 config, update_mask: field_mask
end

在您看見新的運作時間檢查結果之前,可能會有長達 25 分鐘的延遲。在該期間,先前運作時間檢查的結果會顯示在資訊主頁中,並在快訊政策中使用。

刪除運作時間檢查

刪除運作時間檢查前,請從使用檢查的任何快訊政策中移除該檢查。您必須移除運作時間檢查,才能透過 Monitoring 主控台刪除運作時間檢查。如果您透過 API 刪除運作時間檢查,快訊政策會略過遺漏的運作時間檢查。政策不會為遺漏的檢查建立事件。

如要刪除運作時間檢查,請執行下列操作:

主控台

  1. 在 Stackdriver Monitoring 主控台中,依序前往「Uptime checks」(運作時間檢查) >「Uptime checks overview」(運作時間檢查總覽)

    前往「Uptime checks overview」(運作時間檢查總覽)

  2. 在「Uptime checks overview」(運作時間檢查總覽) 中,前往運作時間檢查的右側,然後按一下 [Delete] (刪除)

API

呼叫 projects.uptimeCheckConfigs.delete 方法。如下填寫參數:

  • 名稱:必填。這是要刪除運作時間檢查設定的資源名稱:

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    您可從 createlist 方法的回應中取得 [UPTIME_CHECK_ID]。ID 不會顯示在 Stackdriver Monitoring 主控台中。

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.uptimeCheckConfigPath(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

def delete_uptime_check_config(config_name):
    client = monitoring_v3.UptimeCheckServiceClient()
    client.delete_uptime_check_config(config_name)
    print('Deleted ', config_name)

Ruby

def delete_uptime_check_config config_name
  require "google/cloud/monitoring/v3"

  client = Google::Cloud::Monitoring::V3::UptimeCheck.new
  client.delete_uptime_check_config config_name
  puts "Deleted #{config_name}"
end

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Monitoring
需要協助嗎?請前往我們的支援網頁