업타임 체크 관리

Stackdriver는 전 세계 여러 위치에서 사용자의 서비스에 액세스하여 서비스 가용성을 확인할 수 있습니다. 이러한 업타임 체크 결과를 알림 정책에서 사용하거나 Monitoring 업타임 체크 대시보드에서 결과를 직접 모니터링할 수 있습니다.

이 페이지에서는 다음을 수행하는 방법을 보여줍니다.

  • 새로운 업타임 체크를 만듭니다.
  • 기존 업타임 체크를 나열합니다.
  • 업타임 체크를 편집합니다.
  • 업타임 체크를 삭제합니다.

업타임 체크 상태를 보거나 업타임 체크를 수행하는 데 사용할 수 있는 IP 주소 목록을 가져오려면 IP 주소 가져오기를 참조하세요. API를 사용하여 업타임 체크 상태를 확인하려면 monitoring.googleapis.com/uptime_check/check_passed 측정항목을 모니터링합니다. 자세한 내용은 GCP 측정항목 목록을 참조하세요.

시작하기 전에

  1. 업타임 체크 사용은 서비스를 보호하는 방화벽의 영향을 받습니다.

    • 확인 중인 리소스가 일반에 공개되지 않은 경우, 업타임 체크 서버에서 들어오는 트래픽을 허용하도록 리소스 방화벽을 구성해야 합니다. IP 주소 목록을 다운로드하려면 IP 주소 가져오기를 참조하세요.
    • 확인 중인 리소스에 외부 IP 주소가 없으면 업타임 체크 시 리소스에 연결할 수 없습니다.
  2. 업타임 체크는 페이지 애셋을 로드하거나 자바스크립트를 실행하지 않습니다. 업타임 체크의 기본 구성에는 인증이 포함되어 있지 않습니다. 고급 옵션을 사용하면 인증을 사용 설정할 수 있습니다.

    HTTP와 HTTPS의 경우 업타임 체크는 GET 명령어를 실행하고 원시 데이터를 검색합니다. GET 응답이 다른 URL의 리디렉션인 경우 업타임 체크는 해당 URL의 데이터를 검색합니다. 마지막으로 업타임 체크는 데이터를 평가하여 체크의 성공 여부를 판단합니다.

    성공하려면 다음 2가지 조건을 충족해야 합니다.

    • HTTP 상태가 Success입니다.
    • 데이터에 필수 콘텐츠가 지정되지 않았거나 필수 콘텐츠가 있습니다. 필수 콘텐츠는 고급 옵션을 사용하여 지정합니다.

업타임 체크 만들기

이 섹션에서는 업타임 체크를 만들고 구성하는 방법에 대해 설명합니다.

Console

  1. Stackdriver Monitoring 콘솔에서 업타임 체크 > 업타임 체크 개요로 이동합니다.

    업타임 체크 개요로 이동

  2. 오른쪽 상단에서 업타임 체크 추가를 클릭합니다.

  3. 새 업타임 체크 창에서 이 페이지의 기본 옵션에 설명된 대로 체크 필드를 채웁니다.

    업타임 체크 만들기

  4. 필요하다면 고급 옵션을 클릭하여 포트, 커스텀 헤더, 인증 등의 구성에 액세스할 수 있습니다. 자세한 내용은 이 페이지의 고급 옵션을 참조하세요.

  5. 업타임 체크 결과를 보려면 테스트를 클릭하세요. 결과가 예상과 다른 경우, 아래의 체크 실패 섹션을 참조하여 구성을 수정하고 테스트를 반복하세요.

  6. 저장을 클릭합니다. 필수 필드가 누락되면 업타임 체크를 저장할 수 없습니다. 저장 버튼이 비활성화된 경우, 누락된 값이 있는지 확인합니다. 호스트 이름 필드에 값을 입력해야 합니다.

API

projects.uptimeCheckConfigs.create 메소드를 호출합니다. 메소드 매개변수를 다음과 같이 설정합니다.

  • parent: 필수입니다. 이 매개변수는 업타임 체크를 생성할 프로젝트의 이름이어야 합니다. [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;
}

자바

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분이 지연될 수 있습니다. 이 기간 동안 업타임 체크 대시보드에는 '사용 가능한 데이터 없음' 상태가 보고됩니다.

기본 옵션

새로운 업타임 체크를 만들려면 업타임 체크 구성의 값을 지정합니다. Stackdriver Monitoring 콘솔에서 업타임 체크를 만들 때는 양식을 작성합니다. API에서 업타임 체크를 만들 때는 UptimeCheckConfig 객체에 매개변수를 지정합니다.

  1. 제목: 업타임 체크를 식별하기 위한 이름입니다. 예를 들어 Example.com uptime check로 지정할 수 있습니다.

  2. 체크 유형: HTTP, HTTPS 또는 TCP 프로토콜을 선택하세요.

    HTTPS를 선택하면 서비스는 HTTPS를 통해 연결을 시도하지만 SSL 인증서의 유효성을 확인하지는 않습니다. 예를 들어 만료되었거나 자체 서명된 인증서로 인해 체크가 실패하지는 않습니다.

  3. 리소스 유형: 다음 리소스 유형 중 하나를 선택합니다.

    • App Engine: App Engine 애플리케이션(모듈)입니다.
    • Elastic Load Balancer: AWS 부하 분산기입니다.
    • 인스턴스: Compute Engine 또는 AWS EC2 인스턴스입니다. API에서 이 항목은 gce_instanceaws_ec2_instance로 분할됩니다.
    • URL: 임의의 IPv4 주소 또는 호스트 이름입니다. 경로와 포트는 따로 입력됩니다.
  4. 체크 유형과 리소스 유형에 따라 연결 정보를 작성합니다.

    • 적용 대상(App Engine, ELB, 인스턴스): 리소스 한 개 또는 리소스 그룹(예: 모든 인스턴스)에 업타임 체크를 적용할 수 있습니다. 단일 리소스를 선택한 경우, 메뉴에 나열된 기존 리소스 중에서 하나를 선택합니다. API를 사용하는 경우, 모니터링 리소스 목록에 설명된 대로 모니터링 리소스에 필수 리소스 라벨을 입력합니다.

    • 모듈(App Engine): 애플리케이션 모듈을 지정합니다.

    • 호스트 이름(App Engine을 제외한 모든 유형): 서비스의 호스트 이름을 지정합니다. 예를 들면 example.com을 입력할 수 있습니다.

    • 경로(HTTP, HTTPS): 호스트 또는 리소스 내의 경로를 입력하거나 기본 경로를 사용합니다. 예를 들어 example.com을 조사하려면 이 필드를 비워 둡니다. example.com/tester를 조사하려면 /tester를 입력합니다. 프리픽스 example.com을 포함하지 마세요. API에서 기본값인 /를 사용하려면 이 필드를 비워 둡니다.

    • 포트(HTTP, HTTPS, TCP): 연결할 포트를 선택합니다.

      • HTTP 및 HTTPS 체크의 경우, 이 옵션은 고급 옵션 아래에 있습니다.
      • API에서 기본값(TCP 또는 HTTP 체크는 80, HTTPS 체크는 443)을 사용하려면 이 필드를 비워 둡니다.
    • 응답 콘텐츠에 텍스트 포함(HTTP, HTTPS, TCP): 체크 응답에 표시되어 성공 상태를 나타낼 문자열(최대 1,024바이트)을 입력합니다. 문자열이 응답에 나타나지 않으면 체크가 실패하게 됩니다.

      • HTTP 및 HTTPS 체크의 경우, 이 필드는 고급 옵션 아래에 표시됩니다.
      • API에서 이 항목은 ContentMatcher 객체입니다.
  5. 체크 간격: 1, 5, 10 또는 15분. 예를 들어 5분을 선택하면 각 지리적 위치에서 5분마다 한 번씩 서비스 연결을 시도합니다. 기본 위치 6개를 사용하고 5분마다 체크하면 서비스의 분당 평균 요청 수는 1.2입니다. 1분마다 체크하면 서비스의 분당 평균 요청 수는 6입니다.

고급 옵션

고급 옵션 섹션은 HTTP, HTTPS 및 TCP 확인 유형에 적용됩니다.

HTTP와 HTTPS의 경우 업타임 체크는 GET 명령어를 실행하고 원시 데이터를 검색합니다. GET 응답이 다른 URL의 리디렉션인 경우 업타임 체크는 해당 URL의 데이터를 검색합니다. 마지막으로 업타임 체크는 데이터를 평가하여 확인의 성공 여부를 판단합니다.

성공하려면 다음 2가지 조건을 충족해야 합니다.

  1. HTTP 상태가 Success입니다.
  2. 데이터에 필수 콘텐츠가 지정되지 않았거나 필수 콘텐츠가 있습니다. 필수 콘텐츠는 고급 옵션을 사용하여 지정합니다.

이러한 설정은 선택사항이며 확인 유형에 따라 달라집니다.

  • HTTP 호스트 헤더: 가상 호스트를 확인하려면 이 필드를 입력하세요. TCP 체크에서는 이 필드를 사용할 수 없습니다.

  • 포트: 포트 번호를 지정합니다. TCP 체크의 경우, 이 필드는 기본 옵션에 표시됩니다.

  • 응답 콘텐츠에 텍스트 포함: 체크 응답에 표시되어 성공 상태를 나타낼 문자열(최대 1,024바이트)을 입력합니다. TCP 체크의 경우, 이 필드는 기본 옵션 아래에 표시됩니다.

  • 위치: 체크에서 요청을 수신할 적용 가능한 지리적 리전을 선택합니다. 최소한 3개의 활성 위치를 충분히 포함할 수 있는 리전을 선택해야 합니다. 체크를 만들 때 각 리전의 위치가 리전 이름 아래에 나열됩니다. 선택된 리전에 있는 새로운 체커 위치는 구성된 대상으로 요청을 자동으로 보냅니다. 사용 가능한 모든 위치에서 항상 요청을 보내려면 기본값인 전체를 선택합니다. 기존 리전의 모든 위치에서 요청을 보내지만 새 리전의 새 위치에서는 보내지 않으려면 모든 기존 리전을 선택하고 전체는 선택하지 마세요.

  • 커스텀 헤더: 커스텀 헤더를 제공하고 필요한 경우 이를 암호화합니다. 암호화는 양식에서 헤더 값을 숨깁니다. 팀의 다른 구성원에게 공개하지 않으려는 인증 관련 헤더에 암호화를 사용하세요. TCP 체크에서는 이 필드를 사용할 수 없습니다.

  • 상태 확인 시간 제한: 시간 제한을 1~60초로 지정합니다. 상태 확인이 둘 이상의 위치에서 구성된 제한 시간 내에 응답을 얻지 못하면 업타임 체크가 실패합니다. 상태 확인 하나만 응답을 얻지 못한 경우에는 업타임 체크가 실패하지 않습니다.

  • 인증: 단일 사용자 이름과 암호를 제공합니다. 이 값은 승인 헤더로 전송됩니다. 여기에 값을 설정하는 경우에는 승인 헤더를 별도로 설정하지 말고 승인 헤더를 설정하는 경우에는 여기에 값을 설정하지 마세요. 양식에서 비밀번호는 항상 숨겨져 있습니다. TCP 체크에서는 이 필드를 사용할 수 없습니다.

업타임 체크를 위한 식별자

업타임 체크가 생성되면 Stackdriver는 업타임 체크 ID라는 이름의 식별자를 할당합니다. 이 식별자는 새로운 업타임 체크를 위한 리소스 이름에 삽입됩니다.

projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]

업타임 체크를 생성하거나 나열하는 메소드 호출의 응답에서 업타임 체크 ID를 가져올 수 있습니다. 또한 Stackdriver Monitoring 콘솔 업타임 체크 페이지의 체크 구성 패널 내 ID 확인 필드에서 업타임 체크 ID를 찾을 수도 있습니다.

업타임 체크 검증

Stackdriver Monitoring 콘솔에서 업타임 체크를 만들 때에는 먼저 구성을 테스트한 후에 저장할 수 있습니다.

체크 성공

다음 두 조건을 모두 충족하면 업타임 체크에 성공한 것입니다.

  • HTTP 상태가 Success입니다.
  • 응답에 필수 콘텐츠가 없거나 필수 콘텐츠의 응답 검색이 성공했습니다.

체크 실패

업타임 체크 실패의 몇 가지 가능한 원인들을 설명하면 다음과 같습니다.

  • 연결 오류 - 거부됨: 기본 HTTP 연결 유형을 사용하는 경우, HTTP 요청에 응답하는 웹 서버가 설치되었는지 확인합니다. 이 오류는 웹 서버를 설치하지 않은 경우에 새 인스턴스에서 발생할 수 있습니다. Compute Engine 빠른 시작을 참조하세요. HTTPS 연결 유형을 사용할 경우에는 추가 구성 단계를 수행해야 할 수 있습니다. 방화벽 문제는 IP 주소 가져오기를 참조하세요.
  • 이름 또는 서비스를 찾을 수 없음: 호스트 이름이 잘못되었을 수 있습니다.
  • 403 금지됨: 서비스가 업타임 체커에 오류 코드를 반환합니다. 예를 들어 기본 Apache 웹 서버 구성은 Amazon Linux에서 이 코드를 반환하지만, 다른 Linux 버전에서는 코드 200(성공)을 반환합니다. Amazon Linux용 LAMP 가이드 또는 웹 서버 문서를 참조하세요.
  • 404 찾을 수 없음: 경로가 잘못되었을 수 있습니다.
  • 408 요청 시간 제한 또는 응답 없음: 포트 번호가 잘못되었거나, 서비스가 실행 중이 아니거나, 서비스에 액세스할 수 없거나, 제한시간이 너무 짧습니다. 업타임 서버의 트래픽이 방화벽에서 허용되는지 확인합니다. IP 주소 가져오기를 참조하세요. 시간 제한은 고급 옵션상태 확인 부분에서 지정합니다.

알림 정책 만들기

업타임 체크 실패에 대한 알림을 받으려면 새 업타임 체크의 알림 정책을 만듭니다. 자세한 내용은 업타임 체크 알림을 참조하세요.

업타임 체크 나열

현재 업타임 체크를 나열하려면 다음을 수행합니다.

Console

  1. 업타임 체크 목록을 보려면 Stackdriver Monitoring 콘솔에서 업타임 체크 > 업타임 체크 개요로 이동하세요. 업타임 체크는 여러 페이지에 나열될 수 있습니다.

    업타임 체크 개요로 이동

  2. 체크 목록을 필터링하려면 다음 중 한 가지를 수행하세요.

    • 필터 필드에 텍스트를 입력하여 제목에 있는 텍스트로 확인할 목록을 제한합니다.
    • 필터 필드 왼쪽에 있는 버튼을 사용하면 특정 그룹 구성원을 필터링할 수도 있습니다.

    업타임 체크를 클릭하면 세부정보가 표시됩니다.

API

업타임 구성 목록을 가져오려면 projects.uptimeCheckConfigs.list 메소드를 호출합니다. 다음 매개변수를 지정합니다.

  • parent: 나열하려는 업타임 체크가 포함된 프로젝트입니다. 형식은 다음과 같습니다.

    projects/[PROJECT_ID]
    

특정 업타임 체크를 가져오려면 projects.uptimeCheckConfigs.get 메소드를 호출합니다. 다음 매개변수를 지정합니다.

  • name: 업타임 체크 구성의 전체 이름입니다.

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    create 또는 list 메소드의 응답에서 [UPTIME_CHECK_ID]를 가져올 수 있습니다. Stackdriver Monitoring 콘솔에는 ID가 표시되지 않습니다.

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;
}

자바

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;
}

자바

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

업타임 체크 편집

업타임 체크를 편집하려면 다음을 수행합니다.

Console

  1. Stackdriver Monitoring 콘솔에서 업타임 체크 > 업타임 체크 개요로 이동합니다. 업타임 체크는 여러 페이지에 나열될 수 있습니다.

    업타임 체크 개요로 이동

  2. 업타임 체크 개요의 업타임 체크 요약 오른쪽에 있는 메뉴에서 편집을 클릭합니다.

  3. 필요하다면 필드의 값을 변경합니다. 모든 필드를 수정할 수는 없습니다. 체크의 커스텀 헤더 값이 숨겨져 있다면 이를 표시할 수 없습니다.

  4. 체크가 작동하는지 확인하려면 테스트를 클릭하세요. 테스트가 실패할 경우, 체크 실패에서 가능한 원인을 확인하세요.

  5. 저장을 클릭합니다.

API

projects.uptimeCheckConfigs.patch 메소드를 호출합니다. 다음과 같이 메소드에 매개변수를 설정합니다.

  • uptimeCheckConfig.name: 필수입니다. REST URL의 일부이며, 편집할 업타임 체크의 리소스 이름입니다.

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    create 또는 list 메소드의 응답에서 [UPTIME_CHECK_ID]를 가져올 수 있습니다. Stackdriver Monitoring 콘솔에는 ID가 표시되지 않습니다.

  • 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;
}

자바

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를 통해 업타임 체크를 삭제하면 알림 정책은 누락된 업타임 체크를 무시합니다. 이 정책은 누락된 체크에 대한 이슈를 만들지 않습니다.

업타임 체크를 삭제하려면 다음을 수행합니다.

Console

  1. Stackdriver Monitoring 콘솔에서 업타임 체크 > 업타임 체크 개요로 이동합니다.

    업타임 체크 개요로 이동

  2. 업타임 체크 개요의 업타임 체크 오른쪽에서 삭제를 선택합니다.

API

projects.uptimeCheckConfigs.delete 메소드를 호출합니다. 다음과 같이 매개변수를 작성합니다.

  • name: 필수입니다. 삭제할 업타임 체크 구성의 리소스 이름입니다.

    projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
    

    create 또는 list 메소드의 응답에서 [UPTIME_CHECK_ID]를 가져올 수 있습니다. Stackdriver Monitoring 콘솔에는 ID가 표시되지 않습니다.

C#

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

자바

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
도움이 필요하시나요? 지원 페이지를 방문하세요.