상태 확인 로깅

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

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

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

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

제한사항

  • 로그는 엔드포인트 상태 전환에 대해서만 생성됩니다.
  • 기존 상태 확인은 지원되지 않습니다.
  • 대상 풀은 지원되지 않습니다.

로깅 사용 설정 및 중지

새 상태 확인에 로깅 사용 설정

Console

  1. Google Cloud Console의 상태 확인 페이지로 이동합니다.
    상태 확인 페이지로 이동
  2. 상태 확인 만들기를 클릭합니다.
  3. 로그 라디오 버튼을 On으로 설정합니다.
  4. 상태 확인 설정을 계속합니다.

gcloud

gcloud beta compute health-checks create PROTOCOL HEALTH_CHECK_NAME \
   --enable-logging \
 ... other values

여기에서

  • --enable-logging은 해당 상태 확인의 로깅을 사용 설정합니다.

기존 상태 확인에 로깅 사용 설정

Console

  1. Google Cloud Console의 상태 확인 페이지로 이동합니다.
    상태 확인 페이지로 이동
  2. 상태 확인의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 로그 라디오 버튼을 On으로 설정합니다.
  5. 저장을 클릭합니다.

gcloud

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

여기에서

  • --enable-logging은 해당 상태 확인의 로깅을 사용 설정합니다.

기존 상태 확인에 로깅 사용 중지 또는 수정

Console

  1. Google Cloud Console의 상태 확인 페이지로 이동합니다.
    상태 확인 페이지로 이동
  2. 상태 확인의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 로그 라디오 버튼을 Off로 설정합니다.
  5. 저장을 클릭합니다.

gcloud

로깅을 완전히 사용 중지

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

여기에서

  • --no-enable-logging은 해당 상태 확인에 대한 로깅을 사용 중지합니다.

로그 보기

로그를 확인하려면 로그 뷰어로 이동하세요.

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

모든 로그를 보려면 첫 번째 풀다운 메뉴에서 백엔드 유형에 따라 GCE 인스턴스 그룹 또는 네트워크 엔드포인트 그룹을 선택합니다.

또는 로그 뷰어로 이동하여 라벨 또는 텍스트 검색 기준 필터링 필드에 다음 내용을 붙여넣습니다. 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, 프로젝트 번호, 타임스탬프 등 대부분의 로그에 포함되는 일반 정보
  • 다음 표에 설명되어 있는 상태 확인 전용 필드

상태 확인 상태

상태 확인은 엔드포인트가 한 상태에서 다른 상태로 변경될 때마다 로그를 생성합니다. 하지만 상태가 변경되었기 때문에 부하 분산기의 동작이 변경되지 않을 수 있습니다. 서버가 잘못된 응답을 제공하는 중이지만 완전히 응답을 멈추었기 때문에 엔드포인트가 UNHEALTHY로 간주되면 상태 확인은 TIMEOUT의 새 상태로 로그를 전송하되 부하 분산기는 여전히 엔드포인트를 비정상으로 간주합니다.

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

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

상태 확인 로그 항목

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

필드
ipAddress string 각 백엔드 VM의 기본 네트워크 인터페이스와 연결된 기본 내부 IP 주소입니다. 사람이 읽을 수 있는 문자열입니다.
healthCheckProtocol HealthCheckProtocol 엔드포인트를 상태 확인하는 데 사용되는 상태 확인 프로토콜입니다(예: TCP, HTTP, HTTPS).
healthState HealthState 엔드포인트의 현재 상태(HEALTHY 또는 UNHEALTHY)입니다.
previousHealthState HealthState 엔드포인트의 이전 상태(HEALTHY 또는 UNHEALTHY)입니다.
detailedHealthState DetailedHealthState 엔드포인트의 현재 세부 상태입니다. 가능한 목록을 보려면 상태 확인 상태를 참조하세요.
previousDetailedHealthState DetailedHealthState 엔드포인트의 이전 세부 상태입니다. 가능한 목록을 보려면 상태 확인 상태를 참조하세요.
probeRequest string HTTP, HTTPS, HTTP2의 경우 이는 URL 요청 경로입니다(리소스 구성의 requestPath 필드). TCP/SSL의 경우 이는 상태 확인 연결이 설정된 후 전송되는 구성된 선택 문자열입니다(리소스 구성의 request 필드).
probeCompletionTimestamp Timestamp 프로브 완료 타임스탬프입니다.
connectLatency Duration 연결 중심 상태 확인 프로토콜(TCP, SSL, HTTP, HTTPS, HTTP/2)의 연결을 설정하는 데 소요된 시간입니다.
responseLatency Duration 프로버가 측정한 요청과 응답 사이의 지연 시간입니다.
probeResultText string 프로브 결과와 관련된 설명 텍스트입니다. '연결 시간 초과' 또는 'HTTP 응답: 잘못된 게이트웨이'와 같이 표시되거나 비어 있을 수 있습니다.
probeSourceIp string 상태 확인 프로브가 전송된 IP입니다.
targetIp 프로브 대상인 string IP 주소로, ipAddress와 다를 수 있습니다. 프로브의 대상 IP 주소는 부하 분산기의 유형에 따라 달라집니다.
  • 내부 TCP/UDP 부하 분산기와 네트워크 부하 분산기의 경우, 상태 확인 패킷의 대상 위치는 부하 분산기의 전달 규칙의 IP 주소입니다.
  • 인스턴스 그룹을 백엔드로 사용하는 외부 HTTP(S) 부하 분산기, TCP 프록시 부하 분산기, SSL 프록시 부하 분산기의 경우 상태 확인 패킷의 대상 위치는 각 백엔드 VM의 기본 네트워크 인터페이스와 연결된 기본 내부 IP 주소입니다.
  • 네트워크 엔드포인트 그룹을 백엔드로 사용하는 외부 HTTP(S) 부하 분산기, TCP 프록시 부하 분산기, SSL 프록시 부하 분산기의 경우 상태 확인 패킷의 대상 위치는 기본 또는 보조(별칭 IP) 주소가 될 수 있는 엔드포인트의 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"

다음 단계