상태 점검 로깅 정보

엔드포인트의 상태가 변경되는 경우 부하 분산 상태 점검의 로그를 가져올 수 있습니다. 다음과 같은 경우 상태 점검 로그를 사용할 수 있습니다.

  • 엔드포인트 상태의 실시간 디버깅 및 문제해결
  • 엔드포인트의 상태 파악
  • 감사 및 규정 준수 목적

상태 점검은 상태 전환 정보를 Logging으로 로깅합니다. 상태 점검별로 로깅을 사용 설정 또는 중지합니다.

Logging에서 상태 점검 로그를 보려면 상태 점검에 적용되는 로그 제외가 없도록 해야 합니다. GCE Instance GroupNetwork Endpoint Group 로그가 허용되는지 확인하는 방법에 대한 안내는 제외 필터를 참조하세요.

로깅 사용 설정 및 중지

이 섹션에서는 새 상태 점검이나 기존 상태 점검에 로깅을 사용 설정하는 방법과 기존 상태 점검에서 로깅을 중지하는 방법을 설명합니다.

새 상태 점검에 로깅 사용 설정

콘솔

  1. Google Cloud 콘솔에서 상태 점검 페이지로 이동합니다.

    상태 점검으로 이동

  2. 상태 점검 만들기를 클릭합니다.

  3. 로그에서 사용을 선택합니다.

  4. 상태 점검 설정을 계속합니다.

gcloud

gcloud compute health-checks create PROTOCOL HEALTH_CHECK_NAME \
    --enable-logging

--enable-logging 플래그는 해당 상태 점검에 로깅을 사용 설정합니다.

Terraform

로깅을 사용하여 다양한 프로토콜의 상태 점검을 만들려면 google_compute_health_check 리소스를 사용합니다.

resource "google_compute_health_check" "health_check_tcp_with_logging" {
  provider = google-beta

  name = "health-check-tcp"

  timeout_sec        = 1
  check_interval_sec = 1

  tcp_health_check {
    port = "22"
  }

  log_config {
    enable = true
  }
}

리전 부하 분산기의 경우 google_compute_region_health_check 리소스를 사용합니다.

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

기존 상태 점검에 로깅 사용 설정

콘솔

  1. Google Cloud 콘솔에서 상태 점검 페이지로 이동합니다.

    상태 확인으로 이동

  2. 상태 점검의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 로그에서 사용을 선택합니다.

  5. 저장을 클릭합니다.

gcloud

gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --enable-logging

--enable-logging 플래그는 해당 상태 점검에 로깅을 사용 설정합니다.

기존 상태 점검에 로깅 사용 중지

콘솔

  1. Google Cloud 콘솔에서 상태 점검 페이지로 이동합니다.

    상태 확인으로 이동

  2. 상태 점검의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 로그사용 중지를 선택합니다.

  5. 저장을 클릭합니다.

gcloud

gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --no-enable-logging

--no-enable-logging 플래그는 해당 상태 점검에 대한 로깅을 사용 중지합니다.

로그 보기

  1. 로그를 보려면 로그 탐색기로 이동합니다.

    상태 점검 로그는 인스턴스 그룹 또는 네트워크 엔드포인트 그룹에 의해 색인이 생성됩니다.

  2. 모든 로그를 보려면 리소스 메뉴에서 백엔드 유형에 따라 GCE Instance Group 또는 Network Endpoint Group을 선택합니다.

  3. 또는 다음을 쿼리 필드에 붙여넣습니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
    

부하 분산기 상태 점검에 대한 로그 기반 측정항목 내보내기를 구성할 수 있습니다.

필터를 사용하여 로그 보기

더 상세한 검색 기반의 로그를 가져올 수도 있습니다. 예를 들어 다음 필터는 지정된 백엔드 인스턴스 IP 주소의 모든 로그를 보여줍니다.

  logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.ipAddress="IP_ADDRESS"

부울 형식의 로그 필드는 true 값이 있을 때만 표시됩니다. 불리언 필드의 값이 false면 해당 필드는 로그에서 생략됩니다.

로그 필드에는 UTF-8 인코딩이 적용됩니다. UTF-8 문자를 제외하고는 모두 물음표로 대체됩니다.

로깅되는 내용

상태 점검 로그 항목에는 엔드포인트 상태 모니터링 및 디버깅에 유용한 정보가 포함됩니다. 로그 항목은 다음과 같은 유형의 정보를 담고 있습니다.

  • 심각도, 프로젝트 ID, 프로젝트 번호, 타임스탬프등과 같이 대부분의 로그에 표시되는 일반 정보
  • 다음 표에 설명되어 있는 상태 점검 전용 필드

상태 점검 상태

엔드포인트는 HEALTHY 또는 UNHEALTHY로 간주됩니다. 기본 상태입니다. 각 기본 상태 내에 상세한 상태가 여러 개 있습니다.

분산 Envoy 상태 점검을 사용하는 하이브리드 NEG 및 리전별 인터넷 NEG는 자세한 상태를 지원하지 않습니다.

다음 표에서는 기본 상태와 상세한 상태 간의 매핑을 보여줍니다.

기본 상태 상세한 상태
HEALTHY HEALTHY
DRAINING
UNHEALTHY UNKNOWN
UNHEALTHY
TIMEOUT

상태 변경으로 인해 부하 분산기의 동작이 항상 변경되는 것은 아닙니다. 다음과 같은 경우를 생각해 보세요.

  1. 서버가 잘못된 응답을 제공하므로 엔드포인트가 UNHEALTHY로 간주됩니다.
  2. 그런 다음 서버에서 응답을 중지하며 새 상태는 TIMEOUT입니다.
  3. 상세한 TIMEOUT 상태가 기본 UNHEALTHY 상태에 매핑되므로 부하 분산기는 엔드포인트를 UNHEALTHY로 간주합니다.

다음 표에서는 각 상태의 정의를 제공합니다.

상세한 상태 점검 상태 의미 기본 상태
HEALTHY 엔드포인트에 연결할 수 있고 상태 점검에 의해 정의된 요구사항을 준수합니다. HEALTHY
UNHEALTHY 엔드포인트에 연결할 수 있지만 상태 점검에 의해 정의된 요구사항을 준수하지 않습니다. UNHEALTHY
DRAINING 엔드포인트가 드레이닝되는 중입니다. 엔드포인트에 대한 기존 연결은 완료될 수 있지만 새 연결은 거부됩니다. 엔드포인트가 HEALTHY로 간주됩니다. HEALTHY
TIMEOUT 엔드포인트에 연결할 수 없습니다. 상태 점검 유형에 따라 엔드포인트에 대한 연결을 설정할 수 없거나 서버가 지정된 제한 시간 내에 응답하지 않았습니다. 엔드포인트가 UNHEALTHY로 간주됩니다. UNHEALTHY
UNKNOWN 상태 점검 시스템이 엔드포인트를 인식하지만 상태를 알 수 없습니다. 엔드포인트가 UNHEALTHY로 간주됩니다. UNHEALTHY

각 엔드포인트를 프로브하는 여러 상태 검사기가 있습니다. Google Cloud는 로깅 전에 로그 항목의 중복을 제거하여 고유한 로그만 생성됩니다.

상태 점검기가 다시 시작되면 엔드포인트 상태가 실제로 변경되지 않았더라도 로깅된 상태가 UNKNOWN에서 이전에 나열된 알려진 상태 중 하나로 변경되는 경우가 있습니다. Google Cloud는 최선의 휴리스틱을 사용하여 이러한 로그 항목을 표시하지 않습니다.

연결 드레이닝을 사용하는 경우 상태 점검 로그는 엔드포인트 상태 DRAINING을 통해 생성되지 않습니다. 이는 상태 점검 로그가 상태 점검 프로브에서 관찰한 결과를 반영하며 연결 드레이닝은 상태 점검 프로브에서 관찰된 결과에 영향을 미치지 않기 때문입니다. 연결 드레이닝은 새 상태가 DRAINING임을 부하 분산기에 알리고 상태 점검기에서 관찰한 엔드포인트의 실제 상태를 효과적으로 재정의합니다.

Cloud Logging API를 사용하여 로그와 상호작용할 수 있습니다. API는 특정 필드가 설정된 로그를 대화형으로 필터링하고 일치하는 로그를 Cloud Logging, Cloud Storage, BigQuery, Pub/Sub로 내보내는 방법을 제공합니다. Cloud Logging API에 대한 자세한 내용은 Cloud Logging API 개요를 참조하세요.

상태 점검 로그 항목

LogEntry jsonPayload는 다음 정보가 포함된 healthCheckProbeResult 필드로 채워집니다.

필드 유형 설명
ipAddress string 각 백엔드 VM의 기본 네트워크 인터페이스와 연결된 기본 내부 IP 주소입니다. 사람이 읽을 수 있는 문자열입니다.
healthCheckProtocol enum(HealthCheckProtocol) 엔드포인트를 상태 점검하는 데 사용되는 상태 점검 프로토콜입니다. 예시: TCP, HTTP, HTTPS
healthState enum(HealthState) 엔드포인트의 현재 상태: HEALTHY 또는 UNHEALTHY입니다.
previousHealthState enum(HealthState) 엔드포인트의 이전 상태: HEALTHY또는 UNHEALTHY입니다.
detailedHealthState enum(DetailedHealthState) 엔드포인트의 현재 세부 상태입니다. 가능한 목록을 보려면 상태 점검 상태를 참조하세요.

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

previousDetailedHealthState enum(DetailedHealthState) 엔드포인트의 이전 세부 상태입니다. 가능한 목록을 보려면 상태 점검 상태를 참조하세요.

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

probeRequest string

HTTP, HTTPS, HTTP/2의 경우 이는 URL 요청 경로입니다(리소스 구성의 requestPath 필드).

TCP/SSL의 경우 이는 상태 점검 연결이 설정된 후 전송되는 구성된 선택 문자열입니다(리소스 구성의 request 필드).

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

probeCompletionTimestamp google.protobuf.Timestamp 프로브 완료 타임스탬프입니다.
connectLatency google.protobuf.Duration 연결 중심 상태 점검 프로토콜(TCP, SSL, HTTP, HTTPS, HTTP/2)의 연결을 설정하는 데 소요된 시간입니다.

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

responseLatency google.protobuf.Duration 프로버가 측정한 요청과 응답 사이의 지연 시간입니다.

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

probeResultText string 프로브 결과와 관련된 설명 텍스트입니다. '연결 시간 초과' 또는 'HTTP 응답: 잘못된 게이트웨이'와 같이 표시되거나 비어 있을 수 있습니다.

하이브리드 NEG 및 리전별 인터넷 NEG에 대한 분산형 Envoy 상태 점검은 지원되지 않습니다.

probeSourceIp string 상태 점검 프로브가 전송된 IP입니다.

분산형 Envoy 상태 점검의 경우 프록시 전용 서브넷의 프록시 IP 주소에 해당합니다.

targetIp string 프로브 대상인 IP 주소로, ipAddress와 다를 수 있습니다. 프로브의 대상 IP 주소는 부하 분산기의 유형에 따라 달라집니다. 자세한 내용은 상태 점검 개요의 프로브 패킷 대상을 참조하세요.
targetPort int 프로브의 대상이었던 포트이며, 프로브의 기본 포트이거나 상태 점검을 만들 때 지정한 포트일 수 있습니다.

필터 예시

이 섹션에서는 일반적인 로그 필터의 예시를 제공합니다.

특정 인스턴스 그룹의 모든 상태 점검 결과 찾기

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"  AND
resource.type="gce_instance_group" AND
resource.labels.instance_group_name="INSTANCE_GROUP_NAME"

특정 NEG의 모든 상태 점검 결과 찾기

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"  AND
resource.type="gce_network_endpoint_group" AND
resource.labels.network_endpoint_group_id="ENDPOINT_GROUP_ID"

백엔드 인스턴스 IP 주소 10.128.15.201의 모든 상태 점검 전환 찾기

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.ipAddress="10.128.15.201"

이전에는 HEALTHY였지만 현재는 TIMEOUT인 모든 엔드포인트 찾기

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.previousDetailedHealthState="HEALTHY"
jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT"

특정 기간의 상태 로그 찾기

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
timestamp>"2019-02-14T02:20:00.0Z"
timestamp<"2019-02-14T03:30:00.0Z"

제한사항

  • 로그는 엔드포인트 상태 전환에 대해서만 생성됩니다.
  • 기존 상태 점검은 지원되지 않습니다.
  • 대상 풀은 지원되지 않습니다.
  • 엔드포인트 상태가 UNKNOWN이면 로그가 생성되지 않습니다.
  • VM 마이그레이션의 경우 엔드포인트 상태가 UNHEALTHY 상태로 전환될 때 생성되는 로그 항목이 표시되지 않을 수 있습니다.
  • 엔드포인트가 삭제되면 로그가 생성되지 않습니다. 예를 들어 VM을 중지하는 경우입니다.

다음 단계