전역 외부 애플리케이션 부하 분산기 로깅 및 모니터링

이 문서에서는 기본 애플리케이션 부하 분산기, 전역 외부 애플리케이션 부하 분산기, Cloud CDN과 함께 Cloud LoggingCloud Monitoring을 구성하고 사용하는 방법을 설명합니다.

로깅

외부 애플리케이션 부하 분산기 백엔드 서비스에 대한 로그를 사용 설정, 사용 중지, 조회할 수 있습니다. 백엔드 버킷이 있는 외부 애플리케이션 부하 분산기의 경우 로깅이 자동으로 사용 설정되며 중지할 수 없습니다.

각 백엔드 서비스에 대해 로깅을 사용 설정하거나 사용 중지합니다. 모든 요청을 로깅할지 아니면 무작위로 샘플링된 비율만 로깅할지 구성할 수 있습니다.

외부 애플리케이션 부하 분산기에 적용되는 로그 제외 규칙이 없는지 확인해야 합니다. Cloud HTTP Load Balancer 로그가 허용되는지 확인하는 방법은 리소스 유형 제외 보기를 참조하세요.

새 백엔드 서비스에 로깅 사용 설정

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 부하 분산기의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 백엔드 구성을 클릭합니다.

  5. 백엔드 서비스 만들기를 선택합니다.

  6. 필수 백엔드 서비스 필드를 작성합니다.

  7. 로깅 섹션에서 로깅 사용 설정 체크박스를 선택합니다.

  8. 샘플링 레이트 필드에서 샘플링 가능성을 설정합니다. 0.0부터 1.0까지 숫자를 설정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅됨을 의미합니다. 기본값은 1.0입니다.

  9. 백엔드 서비스 수정을 완료하려면 업데이트를 클릭합니다.

  10. 부하 분산기 수정을 완료하려면 업데이트를 클릭합니다.

gcloud: 전역 모드

gcloud compute backend-services create 명령어를 사용하여 백엔드 서비스를 만들고 로깅을 사용 설정합니다.

gcloud compute backend-services create BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --load-balancing-scheme=EXTERNAL_MANAGED

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 전역 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --enable-logging은 해당 백엔드 서비스의 로깅을 사용 설정합니다.
  • --logging-sample-rate를 사용하여 0.0부터 1.0까지 값을 지정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅되어 있음을 의미합니다. --enable-logging 매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.

gcloud: 기본 모드

gcloud compute backend-services create 명령어를 사용하여 백엔드 서비스를 만들고 로깅을 사용 설정합니다.

gcloud compute backend-services create BACKEND_SERVICE \
 --global \
 --enable-logging \
 --logging-sample-rate=VALUE \
 --load-balancing-scheme=EXTERNAL

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 기본 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --enable-logging은 해당 백엔드 서비스의 로깅을 사용 설정합니다.
  • --logging-sample-rate를 사용하여 0.0부터 1.0까지 값을 지정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅되어 있음을 의미합니다. --enable-logging 매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.

기존 백엔드 서비스에 로깅 사용 설정

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 부하 분산기의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 백엔드 구성을 클릭합니다.

  5. 백엔드 서비스 옆에 있는 수정을 클릭합니다.

  6. 로깅 섹션에서 로깅 사용 설정 체크박스를 선택합니다.

  7. 샘플링 레이트 필드에서 샘플링 가능성을 설정합니다. 0.0부터 1.0까지 숫자를 설정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅됨을 의미합니다. 기본값은 1.0입니다.

  8. 백엔드 서비스 수정을 완료하려면 업데이트를 클릭합니다.

  9. 부하 분산기 수정을 완료하려면 업데이트를 클릭합니다.

gcloud: 전역 모드

gcloud compute backend-services update 명령어를 사용하여 기존 백엔드 서비스에 로깅을 사용 설정하세요.

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 전역 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --enable-logging은 해당 백엔드 서비스의 로깅을 사용 설정합니다.
  • --logging-sample-rate를 사용하여 0.0부터 1.0까지 값을 지정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅되어 있음을 의미합니다. --enable-logging 매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.

gcloud: 기본 모드

gcloud compute backend-services update 명령어를 사용하여 기존 백엔드 서비스에 로깅을 사용 설정하세요.

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 기본 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --enable-logging은 해당 백엔드 서비스의 로깅을 사용 설정합니다.
  • --logging-sample-rate를 사용하여 0.0부터 1.0까지 값을 지정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅되어 있음을 의미합니다. --enable-logging 매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은 1.0입니다.

기존 백엔드 서비스에 로깅 사용 중지 또는 수정

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 부하 분산기의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 백엔드 구성을 클릭합니다.

  5. 백엔드 서비스 옆에 있는 수정을 클릭합니다.

  6. 로깅을 완전히 중지하려면 로깅 섹션에서 로깅 사용 설정 체크박스를 선택 해제합니다.

  7. 로깅을 사용 설정된 상태로 두면 샘플링 레이트 필드에 다른 샘플링 가능성을 설정할 수 있습니다. 0.0부터 1.0까지 숫자를 설정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅됨을 의미합니다. 기본값은 1.0입니다. 저장된 로그 수를 20%로 줄이려면 값을 0.2로 설정합니다.

  8. 백엔드 서비스 수정을 완료하려면 업데이트를 클릭합니다.

  9. 부하 분산기 수정을 완료하려면 업데이트를 클릭합니다.

gcloud: 전역 모드

gcloud compute backend-services update 명령어를 사용하여 백엔드 서비스에 대한 로깅을 사용 중지합니다.

로깅을 완전히 사용 중지

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 전역 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --region은 백엔드 서비스가 리전별임을 나타냅니다. 리전 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용하세요.
  • --no-enable-logging은 해당 백엔드 서비스에 로깅을 사용 중지합니다.

로깅 샘플링 레이트 수정

gcloud compute backend-services update BACKEND_SERVICE \
 --global \
 --logging-sample-rate=VALUE

gcloud: 기본 모드

gcloud compute backend-services update 명령어를 사용하여 백엔드 서비스에 대한 로깅을 사용 중지합니다.

로깅을 완전히 사용 중지

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 기본 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --no-enable-logging은 해당 백엔드 서비스에 로깅을 사용 중지합니다.

로깅 샘플링 레이트 수정

gcloud compute backend-services update BACKEND_SERVICE \
 --global \
 --logging-sample-rate=VALUE

각 항목의 의미는 다음과 같습니다.

  • --global은 백엔드 서비스가 전역임을 나타냅니다. 기본 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용합니다.
  • --logging-sample-rate를 사용하여 0.0부터 1.0까지 값을 지정할 수 있습니다. 0.0은 로깅된 요청이 없음을 의미하고 1.0은 모든 요청이 로깅되어 있음을 의미합니다. --enable-logging 매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를 0.0으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다.

로그 보기


Google Cloud 콘솔에서 이 태스크에 대한 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


HTTP(S) 로그는 전달 규칙URL 맵 순서로 색인을 생성합니다.

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

로그 탐색기로 이동

  • 모든 로그를 보려면 리소스 필터 메뉴에서 Cloud HTTP 부하 분산기 > 모든 전달 규칙을 선택합니다.

  • 하나의 전달 규칙의 로그를 보려면 단일 전달 규칙 이름을 선택합니다.

  • URL 맵 하나의 로그를 보려면 전달 규칙을 선택한 후 URL 맵을 선택합니다.

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

로그 필드에는 UTF-8 인코딩이 적용됩니다. UTF-8 문자를 제외하고는 모두 물음표로 대체됩니다. 기본 애플리케이션 부하 분산기 및 전역 외부 애플리케이션 부하 분산기의 경우 리소스 로그(resource.type="http_load_balancer")를 사용하여 로그 기반 측정항목을 내보낼 수 있습니다. 생성된 측정항목은 https_lb_rule 리소스 대신 Cloud Monitoring 대시보드에서 사용할 수 있는 '애플리케이션 부하 분산기 규칙(로그 기반 측정항목)' 리소스(l7_lb_rule)를 기반으로 합니다.

로깅되는 내용

외부 애플리케이션 부하 분산기 로그 항목에는 HTTP(S) 트래픽 모니터링과 디버깅에 유용한 정보가 포함됩니다. 로그 레코드에는 모든 로그 레코드의 기본 필드인 필수 필드가 포함됩니다.

필드 필드 형식 필드 유형: 필수 또는 선택적 설명
severity
insertID
logName
LogEntry 필수 로그 항목에 설명된 일반 필드입니다.
timestamp string (Timestamp format) 선택사항 첫 번째 레이어 GFE에서 요청을 수신하는 시간입니다.
httpRequest HttpRequest 필수 HTTP 요청을 로깅하는 데 사용되는 공통 프로토콜입니다.

resource.type="http_load_balancer"에는 HttpRequest.protocol이 채워지지 않습니다.

.
리소스 MonitoredResource 필수

MonitoredResource는 로그 항목과 연결된 리소스 유형입니다.

MonitoredResourceDescriptor는 유형 이름과 라벨 집합을 사용하여 MonitoredResource 객체의 스키마를 설명합니다. 자세한 내용은 리소스 라벨을 참조하세요.

jsonPayload object (Struct format) 필수 JSON 객체로 표현되는 로그 항목 페이로드입니다. JSON 객체에는 다음 필드가 포함되어 있습니다.
  • statusDetails
  • backendTargetProjectNumber
문자열 필수 statusDetails 필드에는 부하 분산기가 해당 HTTP 상태를 반환한 이유를 설명하는 문자열이 들어 있습니다. 이러한 로그 문자열에 대한 자세한 내용은 statusDetails HTTP 성공 메시지statusDetails HTTP 실패 메시지를 참조하세요.
문자열 필수 backendTargetProjectNumber 필드에는 백엔드 대상(백엔드 서비스 또는 백엔드 버킷)이 생성된 프로젝트 번호가 있습니다. 이 필드는 projects/PROJECT_NUMBER 형식입니다.

리소스 라벨

다음 표에는 resource.type="http_load_balancer"에 대한 리소스 라벨이 나와 있습니다.

필드 유형 설명
backend_service_name 문자열 백엔드 서비스 이름입니다.
forwarding_rule_name 문자열 전달 규칙 객체의 이름
project_id 문자열 이 리소스와 연결된 Google Cloud 프로젝트의 식별자입니다.
target_proxy_name 문자열 전달 규칙에서 참조하는 대상 프록시 객체의 이름입니다.
url_map_name 문자열 백엔드 서비스를 선택하도록 구성된 URL 맵 객체의 이름입니다.
zone 문자열 부하 분산기가 실행되는 영역입니다. 영역은 global입니다.

statusDetails HTTP 성공 메시지

statusDetails(성공) 의미 일반적인 동반 응답 코드
byte_range_caching HTTP 요청은 Cloud CDN 바이트 범위 캐싱을 사용하여 제공되었습니다. 모든 캐시 가능 응답 코드가 가능합니다.
response_from_cache HTTP 요청이 Cloud CDN 캐시에서 제공되었습니다. 모든 캐시 가능 응답 코드가 가능합니다.
response_from_cache_validated 백엔드가 검증한 Cloud CDN 캐시된 항목에서 반환 코드를 설정했습니다. 모든 캐시 가능 응답 코드가 가능합니다.
response_sent_by_backend HTTP 요청이 백엔드에 성공적으로 프록시되었으며 백엔드에서 응답을 반환했습니다. HTTP 응답 코드는 백엔드에서 실행되는 소프트웨어에 의해 설정됩니다.

statusDetails HTTP 실패 메시지

statusDetails(실패) 의미 일반적인 동반 응답 코드
aborted_request_due_to_backend_early_response 백엔드가 오류 코드와 함께 조기 응답을 보내 본문 요청이 취소되었습니다. 응답이 클라이언트로 전달되었습니다. 요청이 종료되었습니다. 4XX 또는 5XX
backend_connection_closed_after_partial_response_sent 부분 응답이 클라이언트로 전송된 후 백엔드 연결이 예기치 않게 종료되었습니다.

HTTP 응답 코드는 백엔드에서 실행되는 소프트웨어에 의해 설정됩니다. HTTP 응답 코드가 0(영)이면 백엔드가 불완전한 HTTP 헤더를 전송했음을 의미합니다.

HTTP(S) 연결이 WebSocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다.

backend_connection_closed_before_data_sent_to_client 응답이 클라이언트에 프록시되기 전에 백엔드가 예기치 않게 부하 분산기와의 연결을 닫았습니다.

502

HTTP(S) 연결이 Websocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다.

backend_early_response_with_non_error_status 백엔드가 전체 요청 본문을 수신하기 전에 오류가 아닌 응답(1XX 또는 2XX)을 요청에 전송했습니다. 502
backend_interim_response_not_supported 백엔드에서 중간 응답이 지원되지 않는 컨텍스트에서 중간 1XX 응답을 요청에 전송했습니다.

502

backend_response_corrupted 백엔드가 보낸 HTTP 응답 본문에 잘못된 분할 전송 인코딩이 있거나 응답 본문이 다른 이유로 손상되었습니다. 손상 특성에 따라 모든 응답 코드가 가능합니다. 대부분 502입니다.
backend_response_headers_too_long 백엔드가 보낸 HTTP 응답 헤더가 허용 한도를 초과했습니다. 자세한 내용은 외부 애플리케이션 부하 분산기의 헤더 크기 섹션을 참조하세요. 502
backend_timeout

응답을 생성하는 동안 백엔드가 제한시간을 초과했습니다.

WebSocket 연결의 경우:

  • 전역 외부 애플리케이션 부하 분산기의 경우 백엔드 서비스 제한 시간이 초과된 후 GFE가 유휴 상태의 WebSocket 연결을 닫으면 오류가 발생합니다.
  • 기본 애플리케이션 부하 분산기의 경우 백엔드 서비스 제한 시간이 초과된 후 GFE가 유휴 상태 또는 활성 상태의 WebSocket 연결을 닫으면 오류가 발생합니다.

502

HTTP(S) 연결이 Websocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다.

banned_by_security_policy Google Cloud Armor 비율 기반 차단 규칙에 의해 요청이 차단되었습니다. 429
body_not_allowed 클라이언트가 본문과 함께 HTTP 요청을 전송했지만 사용된 HTTP 메서드가 본문을 허용하지 않습니다. 400
byte_range_caching_aborted 이전에 리소스를 캐시할 수 있음을 나타내고 바이트 범위를 지원하는 응답이 부하 분산기에 수신되었습니다. Cloud CDN에 일치하지 않는 응답(예: 응답 코드가 예상된 206 Partial Content가 아닌 응답)이 수신되었습니다. 이 문제는 바이트 범위 요청을 사용하여 캐시 채우기를 수행하려고 시도할 때 발생했습니다. 그 결과 부하 분산기가 클라이언트에 대한 응답을 취소했습니다. 2XX
byte_range_caching_forwarded_backend_response 이전에 리소스를 캐시할 수 있음을 나타내고 바이트 범위를 지원하는 응답이 부하 분산기에 수신되었습니다. Cloud CDN에 일치하지 않는 응답(예: 응답 코드가 예상된 206 Partial Content가 아닌 응답)이 수신되었습니다. 이 문제는 바이트 범위 요청을 사용하여 캐시 채우기를 수행하려고 시도할 때 발생했습니다. 그런 후 부하 분산기가 일치하지 않는 응답을 클라이언트로 전달했습니다.

백엔드에서 반환되었습니다. 모든 응답 코드가 가능합니다.

byte_range_caching_retrieval_abandoned 클라이언트가 Cloud CDN에서 시작한 바이트 범위 요청 또는 유효성 검사 요청을 취소했습니다.

백엔드에서 반환되었습니다. 모든 응답 코드가 가능합니다.

byte_range_caching_retrieval_from_backend_failed_after_partial_response Cloud CDN에서 시작한 바이트 범위 요청 또는 유효성 검사 요청에 오류가 발생했습니다. 자세한 백엔드 상태는 Cloud CDN에서 시작한 요청에 해당하는 Cloud Logging 로그 항목을 참조하세요. 2XX
cache_lookup_failed_after_partial_response 내부 오류 때문에 부하 분산기가 Cloud CDN 캐시의 전체 응답을 제공할 수 없습니다. 2XX
cache_lookup_timeout_after_partial_response 클라이언트가 시의적절하게 콘텐츠를 검색하지 않아서 Cloud CDN 캐시 조회 스트림 시간이 초과되었습니다. 2XX
client_disconnected_after_partial_response 부하 분산기가 부분 응답을 전송한 후 클라이언트와의 연결이 끊어졌습니다.

백엔드에서 반환되었습니다. 모든 응답 코드가 가능합니다.

HTTP(S) 연결이 Websocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다.

client_disconnected_before_any_response 부하 분산기가 응답을 보내기 전에 클라이언트와의 연결이 끊어졌습니다.

0

HTTP(S) 연결이 Websocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다.

client_timed_out 요청 또는 응답을 프록시하는 동안 진전이 없어 Google 프런트엔드(GFE)가 클라이언트 연결을 유휴 상태로 설정했습니다. 0 또는 408
client_cert_invalid_rsa_key_size 클라이언트 리프 또는 중간 인증서에 잘못된 RSA 키 크기가 있습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_unsupported_elliptic_curve_key 클라이언트 또는 중간 인증서는 지원되지 않는 타원 곡선을 사용하고 있습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_unsupported_key_algorithm 클라이언트 또는 중간 인증서가 RSA가 아니거나 ECDSA가 아닌 알고리즘을 사용합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_pki_too_large 검증에 사용되는 PKI에는 동일한 소유자 및 소유자 공개 키 정보를 공유하는 중간 인증서가 3개 이상 있습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_chain_max_name_constraints_exceeded 검증을 위해 제공된 중간 인증서에 10개가 넘는 이름 제약조건이 있었습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_chain_invalid_eku 클라이언트 인증서 또는 발급기관에는 clientAuth를 포함하는 Extended Key Usage(EKU)가 없습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_validation_timed_out 인증서 체인을 검증하는 동안 시간 제한을 초과했습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_validation_search_limit_exceeded 인증서 체인을 검증하는 동안 깊이 또는 반복 한도에 도달합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_validation_not_performed TrustConfig를 설정하지 않고 mTLS를 구성했습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_not_provided 클라이언트가 핸드셰이크 중에 요청된 인증서를 제공하지 않았습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
client_cert_validation_failed 클라이언트 인증서가 TrustConfig와 함께 검증에 실패합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. 0
config_not_found

부하 분산기에 프로젝트 구성이 없습니다. 이 문제는 특히 새 리소스를 추가하는 구성 변경 후 간헐적으로 발생할 수 있습니다.

두 개의 프록시 레이어가 있기 때문에 첫 번째 계층의 GFE가 두 번째 계층의 GFE에 도달하지 못하는 경우가 있습니다. 이는 진행중인 출시, 부하 분산기 과부하, 간헐적 구성 관련 문제와 같은 내부 오류 때문일 수 있습니다.

404, 502, 503
direct_response 부하 분산기가 요청을 재정의하고 고정된 응답을 반환했습니다. 문제의 특성에 따라 HTTP 응답 코드가 표시될 수 있습니다. 예를 들어 HTTP 410 응답 코드는 결제 연체로 인해 백엔드를 사용할 수 없음을 의미합니다.
denied_by_security_policy Google Cloud Armor 보안 정책으로 인해 부하 분산기가 이 요청을 거부했습니다. 보안 정책에서 구성되었습니다.
error_uncompressing_gzipped_body gzip으로 압축한 HTTP 응답의 압축을 푸는 도중 오류가 발생했습니다. 503
failed_to_connect_to_backend 부하 분산기가 백엔드에 연결할 수 없습니다. 여기에는 연결 단계 동안의 시간 제한이 포함됩니다.

503: 전역 외부 애플리케이션 부하 분산기

502: 기본 애플리케이션 부하 분산기

failed_to_pick_backend 부하 분산기가 요청을 처리할 수 있는 정상적인 백엔드를 선택하지 못했습니다. 502
failed_to_negotiate_alpn 부하 분산기와 백엔드가 TLS를 통해 서로 통신하는 데 사용할 애플리케이션 레이어 프로토콜(예: HTTP/2)을 협상할 수 없습니다. 502
headers_too_long 요청 헤더가 허용된 최대값보다 큽니다. 413
http_version_not_supported 지원되지 않는 HTTP 버전입니다. 현재는 HTTP 0.9, 1.0, 1.1, 2.0만 지원됩니다. 400
internal_error 부하 분산기의 내부 오류입니다. 일반적으로 부하 분산기 인프라의 일시적인 오류를 나타냅니다. 쿼리를 다시 시도합니다. 4XX
invalid_external_origin_endpoint 잘못된 외부 백엔드 구성입니다. 인터넷 NEG 구성을 검토하고 유효한 FQDN/IP 주소 및 포트를 지정하는지 확인합니다. 4XX
invalid_request_headers 클라이언트의 HTTP 요청 헤더가 유효하지 않습니다. 400
invalid_http2_client_header_format 클라이언트의 HTTP/2 헤더가 유효하지 않습니다. 400
multiple_iap_policies 여러 IAP(Identity-Aware Proxy) 정책을 결합할 수 없습니다. 백엔드 서비스에 IAP 정책을 연결하고 서버리스 객체에 연결된 다른 정책이 있는 경우 정책 중 하나를 삭제하고 다시 시도하세요. 서버리스 객체에는 App Engine, Cloud Run, Cloud Functions가 포함됩니다. 500
malformed_chunked_body 요청 본문이 잘못 분할 인코딩되었습니다. 411
request_loop_detected 부하 분산기가 요청 루프를 감지했습니다. 이 루프는 백엔드가 요청을 다시 부하 분산기로 전달하는 잘못된 구성으로 인해 발생할 수 있습니다. 502
required_body_but_no_content_length HTTP 요청에 본문이 필요하지만 요청 헤더에 콘텐츠 길이나 전송 인코딩 분할 헤더가 없습니다. 400 또는 403
secure_url_rejected https:// URL이 있는 요청을 일반 텍스트 HTTP/1.1 연결로 수신했습니다. 400
ssl_certificate_san_verification_failed 부하 분산기가 백엔드에서 제시한 SSL 인증서에서 구성된 호스트 이름과 일치하는 SAN(Subject Alternate Name)을 찾을 수 없습니다. 502
ssl_certificate_chain_verification_failed 백엔드에서 제시한 SSL 인증서가 SSL 인증서 확인에 실패했습니다. 502
throttled_by_security_policy Google Cloud Armor 제한 규칙에 의해 요청이 차단되었습니다. 429
unsupported_method 클라이언트가 지원되지 않는 HTTP 요청 메서드를 제공했습니다. 400
unsupported_100_continue 클라이언트 요청에는 이를 지원하지 않는 프로토콜의 'Expect: 100-continue' 헤더가 포함되어 있습니다. 400
upgrade_header_rejected 클라이언트 HTTP 요청에 업그레이드 헤더가 있어 거부되었습니다. 400
websocket_closed Websocket 연결이 닫혔습니다. 101
websocket_handshake_failed Websocket 핸드셰이크가 실패했습니다. 핸드셰이크 실패의 특성에 적용 가능한 모든 응답 코드가 가능합니다.
request_body_too_large HTTP 요청 본문이 백엔드에서 지원되는 최댓값을 초과했습니다. VM 백엔드에 적용되지 않습니다. 413
handled_by_identity_aware_proxy 이 응답은 액세스를 허용하기 전 클라이언트 본인 인증 동안 IAP(Identity-Aware Proxy)에 의해 생성되었습니다. 200, 302, 400, 401, 403, 500, 502
serverless_neg_routing_failed 서버리스 NEG 요청을 전달할 수 없습니다. 이 오류는 NEG에 지정된 리전에 도달할 수 없거나 리소스 이름(예: Cloud Functions 이름)을 찾을 수 없을 때 발생할 수 있습니다. 404, 502
fault_filter_abort 이 오류는 고객이 오류 필터를 구성했으며 지정된 요청에 대해 오류 필터가 트리거된 경우에 발생할 수 있습니다. 값은 200부터 599까지여야 합니다.

mTLS 클라이언트 인증서 검증 로그 보기

상호 TLS 클라이언트 인증서 유효성 검사 중에 닫힌 연결의 로깅된 오류를 보려면 다음 단계를 완료하세요.

콘솔 쿼리

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리 표시 전환을 클릭합니다.

  3. 다음을 쿼리 필드에 붙여넣습니다. FORWARDING_RULE_NAME을 전달 규칙의 이름으로 바꿉니다.

    jsonPayload.statusDetails=~"client_cert"
    jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    resource.labels.forwarding_rule_name=FORWARDING_RULE_NAME
    
  4. 쿼리 실행을 클릭합니다.

백엔드 버킷 로깅

Logging은 백엔드 버킷이 있는 부하 분산기에서 자동으로 사용 설정됩니다. 백엔드 버킷의 로깅을 수정하거나 사용 중지할 수 없습니다.

Google Cloud Armor 로깅

statusDetail HTTP 실패 메시지 표에는 Google Cloud Armor에 적용되는 일부 메시지가 있습니다. Google Cloud Armor 로그에 대한 자세한 내용은 요청 로깅 사용을 참조하세요.

공유 VPC 배포 로깅

애플리케이션 부하 분산기 로그 및 측정항목은 일반적으로 전달 규칙이 있는 프로젝트로 내보내집니다. 따라서 서비스 관리자(백엔드 서비스가 생성된 프로젝트의 소유자 또는 사용자)는 기본적으로 부하 분산기의 로그 및 측정항목에 액세스할 수 없습니다. IAM 역할을 사용하여 서비스 관리자에게 해당 권한을 부여할 수 있습니다. 사용 가능한 IAM 역할과 액세스 권한을 제공하는 단계에 대한 자세한 내용은 Monitoring에 액세스 권한 부여를 참조하세요.

로그와 상호작용

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

모니터링

부하 분산기는 모니터링 데이터를 Cloud Monitoring으로 내보냅니다.

모니터링 측정항목을 사용하여 다음을 수행할 수 있습니다.

  • 부하 분산기의 구성, 사용, 성능 평가
  • 문제해결
  • 리소스 사용률 및 사용자 환경 개선

Cloud Monitoring의 사전 정의된 대시보드 외에도 Cloud Monitoring API를 통해 커스텀 대시보드를 만들고, 알림을 설정하고, 측정항목을 쿼리할 수 있습니다.

사전 정의된 Cloud Monitoring 대시보드 보기

Cloud Monitoring에서는 부하 분산기 모니터링을 위해 사전 정의된 대시보드를 제공합니다. 이러한 대시보드는 Cloud Monitoring에 의해 자동으로 채워집니다.

다음 단계를 수행하여 사전 정의된 대시보드에 액세스합니다.

  1. Google Cloud 콘솔에서 Monitoring으로 이동합니다.

    Monitoring으로 이동

  2. Monitoring 탐색창에서 대시보드를 클릭합니다.

  3. 카테고리에서 GCP를 클릭합니다.

    • 모든 Google Cloud 부하 분산기의 대시보드 목록을 보려면 Google Cloud 부하 분산기라는 대시보드를 선택합니다. 특정 부하 분산기의 대시보드를 보려면 목록에서 부하 분산기를 찾아 해당 이름을 클릭합니다.

    • 외부 애플리케이션 부하 분산기에 대해서만 사전 정의된 대시보드를 보려면 외부 HTTP(S) 부하 분산기라는 대시보드를 선택합니다. 이 페이지에서는 프로젝트에 있는 모든 외부 애플리케이션 부하 분산기에 대해 5XX 응답 비율 및 백엔드 지연 시간을 표시하는 대시보드를 보여줍니다. 또한 프로젝트에서 모든 외부 애플리케이션 부하 분산기에 대한 대시보드 목록을 제공합니다.

      클릭하여 각 부하 분산기의 대시보드에 연결할 수 있습니다. 각 대시보드에는 다음이 포함됩니다.

      • 응답 코드 클래스별로 세분화된 응답을 표시하는 자동 입력된 그래프(5XX, 4XX, 3XX, 2XX)
      • 총 지연 시간
      • 백엔드 지연 시간
      • 프런트엔드 RTT
      • 요청 수
      • 부하 분산기의 로그 링크
  4. 타사 서비스의 대시보드를 보려면 대시보드 페이지로 돌아갑니다. 카테고리에서 기타를 클릭합니다.

    • 특정 타사 서비스 대시보드를 보려면 목록에서 대시보드를 찾아 이름을 클릭합니다.

알림 정책 정의


Google Cloud 콘솔에서 이 태스크에 대한 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


알림 정책을 만들어 측정항목 값을 모니터링하고 측정항목이 조건을 위반하면 이에 대한 알림을 수신할 수 있습니다.

  1. Google Cloud 콘솔에서  알림 페이지로 이동합니다.

    알림으로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Monitoring인 결과를 선택합니다.

  2. 알림 채널을 만들지 않고 알림을 받으려면 알림 채널 수정을 클릭하고 알림 채널을 추가합니다. 채널을 추가한 후 알림 페이지로 돌아갑니다.
  3. 알림 페이지에서 정책 만들기를 클릭합니다.
  4. 측정항목을 선택하려면 측정항목 선택 메뉴를 확장한 후 다음을 수행합니다.
    1. 메뉴를 관련 항목으로 제한하려면 필터 표시줄에 Global External Application Load Balancer Rule을 입력합니다. 메뉴를 필터링한 후 결과가 없으면 활성 리소스 및 측정항목만 표시 전환을 중지합니다.
    2. 리소스 유형에서 전역 외부 애플리케이션 부하 분산기 규칙을 선택합니다.
    3. 측정항목 카테고리측정항목을 선택한 후 적용을 선택합니다.
  5. 다음을 클릭합니다.
  6. 알림 트리거 구성 페이지의 설정에 따라 알림이 트리거되는 시점이 결정됩니다. 조건 유형을 선택하고 필요한 경우 기준점을 지정합니다. 자세한 내용은 측정항목 기준점 알림 정책 만들기를 참조하세요.
  7. 다음을 클릭합니다.
  8. 선택사항: 알림 정책에 알림을 추가하려면 알림 채널을 클릭합니다. 대화상자의 메뉴에서 하나 이상의 알림 채널을 선택한 다음 확인을 클릭합니다.
  9. 선택사항: 이슈 자동 종료 기간을 업데이트합니다. 이 필드는 측정항목 데이터가 없어 Monitoring에서 이슈를 닫을 시간을 결정합니다.
  10. 선택사항: 문서를 클릭한 후 알림 메시지에 포함할 정보를 추가합니다.
  11. 알림 이름을 클릭하고 알림 정책 이름을 입력합니다.
  12. 정책 만들기를 클릭합니다.
자세한 내용은 알림 정책을 참조하세요.

Cloud Monitoring 커스텀 대시보드 정의

부하 분산기의 측정항목에 대해 커스텀 Cloud Monitoring 대시보드를 만들 수 있습니다.

  1. Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.

    Monitoring으로 이동

  2. 대시보드 > 대시보드 만들기를 선택합니다.

  3. 차트 추가를 클릭한 후 차트에 제목을 지정합니다.

  4. 표시할 시계열을 식별하려면 리소스 유형 및 측정항목 유형을 선택합니다.

    1. 리소스 및 측정항목 섹션에서 차트를 클릭한 후 측정항목 선택 섹션에서 사용 가능한 옵션 중에서 선택합니다.
      • 전역 외부 애플리케이션 부하 분산기의 경우 전역 외부 애플리케이션 부하 분산기 규칙 리소스 유형을 선택합니다.
    2. 적용을 클릭합니다.
  5. 모니터링 필터를 지정하려면 필터 > 필터 추가를 클릭합니다.

  6. 저장을 클릭합니다.

측정항목 보고 빈도 및 보관

외부 애플리케이션 부하 분산기의 측정항목은 1분 단위로 일괄적으로 Cloud Monitoring으로 내보내집니다. Monitoring 데이터는 6주간 보관됩니다. 측정항목은 샘플링된 트래픽을 기반으로 합니다. 샘플링 레이트는 동적이며 조정할 수 없습니다. 대시보드는 1H(1시간), 6H(6시간), 1D(1일), 1W(1주), 6W(6주)라는 기본 주기로 데이터 분석을 제공합니다. 6W에서 1분 사이의 주기로 수동으로 분석을 요청할 수도 있습니다.

측정항목 모니터링

외부 애플리케이션 부하 분산기의 다음 측정항목을 모니터링할 수 있습니다.

전역 외부 애플리케이션 부하 분산기의 다음 측정항목이 Cloud Monitoring에 보고됩니다. 이러한 측정항목 앞에는 loadbalancing.googleapis.com/이 추가됩니다.

측정항목 이름 설명
요청 수 https/request_count 외부 애플리케이션 부하 분산기에서 제공하는 요청 수
요청 바이트 수 https/request_bytes_count 클라이언트에서 외부 애플리케이션 부하 분산기로 보낸 요청 바이트 수
응답 바이트 수 https/response_bytes_count 외부 애플리케이션 부하 분산기에서 클라이언트로 보낸 응답의 바이트 수
총 지연 시간 https/total_latencies

지연 시간의 분포입니다. 지연 시간은 수신된 요청의 첫 번째 바이트와 GFE에서 보낸 응답의 마지막 바이트 사이의 시간입니다.

총 지연 시간은 요청/응답으로 측정됩니다. Connection: keep-alive를 사용하는 같은 연결에서의 요청 간 일시중지는 측정에 영향을 주지 않습니다. 이 측정은 일반적으로 Cloud Monitoring 뷰에서 95번째 백분위수까지 떨어집니다.

WebSocket 연결의 경우 이 필드는 연결의 전체 시간 기간을 나타냅니다.

예를 들어 영국에서 초당 요청이 1개인 부하 분산기는 지연 시간이 100ms이며, 미국에서 초당 요청이 9개인 부하 분산기는 지연 시간이 50ms입니다. 1분 동안 영국에서는 요청 60개가, 미국에서는 요청 540개가 들어옵니다. 모니터링 측정항목은 모든 측정기준에 대한 분포를 유지합니다. 다음과 같은 정보를 요청할 수 있습니다.

  • 평균 전체 지연 시간(300/600) - 50ms
  • 평균 영국 지연 시간(30/60) - 100ms
  • 95번째 백분위수 전체 지연 시간(570/600) - 100ms
프런트엔드 RTT* https/frontend_tcp_rtt 클라이언트와 GFE 간의 각 연결에 대해 측정된 평활 왕복 시간(RTT)의 분포입니다(GFE의 TCP 스택으로 측정됨). 평활 RTT는 RTT 측정에서 발생할 수 있는 변이와 이상을 처리하는 알고리즘입니다.
백엔드 지연 시간* https/backend_latencies

GFE가 첫 번째 요청 바이트를 백엔드로 보낸 시점으로부터 GFE가 백엔드로부터 응답의 마지막 바이트를 수신할 때까지 측정한 지연 시간의 분포입니다.

WebSocket 연결의 경우 백엔드 지연 시간이 WebSocket 세션의 전체 기간에 적용됩니다.

응답 코드 클래스 비율 각 응답 코드 클래스(2XX, 4XX, ...)에 포함되는 총 외부 애플리케이션 부하 분산기 응답의 비율입니다. Cloud Monitoring에서 이 값은 기본 대시보드를 통해서만 사용할 수 있습니다. 커스텀 대시보드에서는 지원되지 않습니다. API를 사용하여 알림을 설정할 수 있습니다.
백엔드 요청 수 https/backend_request_count 외부 애플리케이션 부하 분산기에서 백엔드로 전송된 요청 수
백엔드 요청 바이트 수 https/backend_request_bytes_count 외부 애플리케이션 부하 분산기에서 백엔드로 전송된 요청의 바이트 수
백엔드 응답 바이트 수 https/backend_response_bytes_count 백엔드(캐시 포함)에서 외부 애플리케이션 부하 분산기로 전송된 응답의 바이트 수

* 프런트엔드 RTT와 백엔드의 지연 시간 합은 총 지연 시간 이하로 보장되지 않습니다. HTTP 응답이 ACK 처리될 때 GFE에서 클라이언트로 소켓을 통해 RTT를 폴링하긴 하지만 이러한 측정 중 일부는 커널 보고에 의존하며 커널이 주어진 HTTP 응답에 대한 RTT 측정을 한다고 보장할 수 없기 때문입니다. 최종 결과는 이전 HTTP 응답, SYN/ACK, 현재 HTTP 요청의 실제 타이밍에 영향을 주지 않는 SSL 핸드셰이크의 영향을 받는 안정화된 RTT 값입니다.

WebSocket 연결을 모니터링하려면 WebSocket에 대한 백엔드 서비스를 만듭니다.

측정항목의 필터링 측정기준

외부 애플리케이션 부하 분산기의 측정항목에 필터를 적용할 수 있습니다.

측정항목은 각 기본 애플리케이션 부하 분산기와 전역 외부 애플리케이션 부하 분산기에 대해 집계됩니다. 집계된 측정항목은 resource.type="http_load_balancer" 또는 resource.type="https_lb_rule"에 대한 다음 측정기준으로 필터링할 수 있습니다.

속성 설명
backend_scope 연결을 제공한 백엔드 서비스 인스턴스 그룹의 Google Cloud 범위(리전 또는 영역)입니다.

사용할 수 있는 인스턴스 그룹이 없거나 다른 항목이 요청을 제공했다면 백엔드 서비스 인스턴스 그룹의 리전이나 영역 대신 다음 값 중 하나가 표시됩니다.

  • FRONTEND_5XX - GFE가 백엔드를 선택하기 전에 내부 오류가 발생했습니다. GFE가 '5XX'를 클라이언트에 반환했습니다.
  • INVALID_BACKEND - GFE에서 요청을 할당할 정상적인 백엔드를 찾을 수 없어 요청자에게 `5XX` 응답을 반환했습니다.
  • NO_BACKEND_SELECTED - 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류나 기타 중단이 발생했습니다.
  • MULTIPLE_BACKENDS - 요청이 여러 백엔드에서 제공되었을 수도 있습니다. 이는 Cloud CDN이 캐시에서 요청을 부분적으로 처리하고 하나 이상의 바이트 범위 요청도 백엔드로 보낸 경우에 발생할 수 있습니다. backend_scope 분석을 사용하여 각 부하 분산기-백엔드 요청을 시각화하세요.

이 분석을 선택하면 차트에 프런트엔드 측정항목(클라이언트-부하 분산기)이 아닌 백엔드 측정항목(부하 분산기-백엔드)이 표시됩니다.
proxy_continent HTTP(S) 연결을 종료한 HTTP(S) GFE의 대륙입니다. (예: America, Europe, Asia)
backend_type

클라이언트의 요청을 처리한 백엔드 그룹의 이름입니다. INSTANCE GROUP, NETWORK_ENDPOINT_GROUP일 수 있으며 백엔드가 할당되지 않은 경우 UNKNOWN이 반환됩니다. 사용할 수 있는 백엔드 그룹이 없거나 다른 항목이 요청을 처리한 경우 백엔드 그룹 대신 다음 값 중 하나가 표시됩니다.

  • FRONTEND_5XX - GFE가 백엔드를 선택하기 전에 내부 오류가 발생했습니다. GFE가 '5XX'를 클라이언트에 반환했습니다.
  • INVALID_BACKEND - GFE에서 요청을 할당할 정상적인 백엔드를 찾을 수 없어 요청자에게 `5XX` 응답을 반환했습니다.
  • NO_BACKEND_SELECTED - 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류나 기타 중단이 발생했습니다.
  • MULTIPLE_BACKENDS - 요청이 여러 백엔드에서 제공되었을 수도 있습니다. 이는 Cloud CDN이 캐시에서 요청을 부분적으로 처리하고 하나 이상의 바이트 범위 요청도 백엔드로 보낸 경우에 발생할 수 있습니다. backend_scope 분석을 사용하여 각 부하 분산기-백엔드 요청을 시각화하세요.
backend_target_type 요청을 처리한 백엔드 서비스의 이름입니다. 백엔드가 할당되지 않은 경우 BACKEND_SERVICE, BACKEND_BUCKET, UNKNOWN일 수 있으며, 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류 또는 기타 중단이 발생한 경우에는 NO_BACKEND_SELECTED일 수 있습니다.
matched_url_path_rule HTTP(S) 요청의 프리픽스와 일치하는 URL 맵 경로 규칙입니다(영문 기준 최대 50자).
forwarding_rule_name 클라이언트가 요청을 보내는 데 사용한 전달 규칙의 이름입니다.
url_map_name

URL 맵 키의 일부로 구성된 URL 맵 경로 규칙 또는 라우팅 규칙입니다. UNMATCHED 또는 UNKNOWN으로 대체할 수 있습니다.

  • UNMATCHED는 URL 경로 규칙과 일치하지 않는 요청을 나타내므로 url_map_name은 기본 경로 규칙을 사용합니다.
  • UNKNOWN은 내부 오류를 나타냅니다.
target_proxy_name 전달 규칙에서 참조하는 대상 HTTP(S) 프록시 객체의 이름입니다.
backend_target_name 백엔드 대상 이름입니다. 대상은 백엔드 서비스 또는 백엔드 버킷에 있습니다 백엔드가 할당되지 않은 경우 UNKNOWN이 반환됩니다.
backend_name 백엔드 인스턴스 그룹, 버킷 또는 NEG의 이름입니다. 백엔드가 할당되지 않은 경우 UNKNOWN이 반환되고, 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류 또는 기타 중단이 발생한 경우에는 NO_BACKEND_SELECTED가 반환됩니다.
backend_scope_type

백엔드 그룹 범위의 유형입니다. 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류나 기타 중단이 발생한 경우 GLOBAL, REGION, ZONE, MULTIPLE_BACKENDS 또는 NO_BACKEND_SELECTED일 수 있으며, 그렇지 않은 경우 다른 가능한 backend_type이 출력됩니다.

MULTIPLE_BACKENDS는 청크 캐싱이 사용될 때 사용됩니다. 단일 클라이언트 요청을 지원하기 위해 여러 쿼리가 서로 다른 데이터 청크에 대해 동일한 백엔드로 전송됩니다.

다음 단계