로깅
외부 애플리케이션 부하 분산기 백엔드 서비스에 대한 로그를 사용 설정, 사용 중지, 조회할 수 있습니다. 백엔드 버킷이 있는 외부 애플리케이션 부하 분산기의 경우 로깅이 자동으로 사용 설정되며 중지할 수 없습니다.
각 백엔드 서비스에 대해 로깅을 사용 설정하거나 사용 중지합니다. 모든 요청을 로깅할지 아니면 무작위로 샘플링된 비율만 로깅할지 구성할 수 있습니다.
외부 애플리케이션 부하 분산기에 적용되는 로그 제외 규칙이 없는지 확인해야 합니다. Cloud HTTP Load
Balancer
로그가 허용되는지 확인하는 방법은 리소스 유형 제외 보기를 참조하세요.
새 백엔드 서비스에 로깅 사용 설정
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
부하 분산기의 이름을 클릭합니다.
수정을 클릭합니다.
백엔드 구성을 클릭합니다.
백엔드 서비스 만들기를 선택합니다.
필수 백엔드 서비스 필드를 작성합니다.
로깅 섹션에서 로깅 사용 설정 체크박스를 선택합니다.
샘플링 레이트 필드에서 샘플링 가능성을 설정합니다.
0.0
부터1.0
까지 숫자를 설정할 수 있습니다.0.0
은 로깅된 요청이 없음을 의미하고1.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_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
입니다.
기존 백엔드 서비스에 로깅 사용 설정
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
부하 분산기의 이름을 클릭합니다.
수정을 클릭합니다.
백엔드 구성을 클릭합니다.
백엔드 서비스 옆에 있는
수정을 클릭합니다.로깅 섹션에서 로깅 사용 설정 체크박스를 선택합니다.
샘플링 레이트 필드에서 샘플링 가능성을 설정합니다.
0.0
부터1.0
까지 숫자를 설정할 수 있습니다.0.0
은 로깅된 요청이 없음을 의미하고1.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
입니다.
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
입니다.
기존 백엔드 서비스에 로깅 사용 중지 또는 수정
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
부하 분산기의 이름을 클릭합니다.
수정을 클릭합니다.
백엔드 구성을 클릭합니다.
백엔드 서비스 옆에 있는
수정을 클릭합니다.로깅을 완전히 중지하려면 로깅 섹션에서 로깅 사용 설정 체크박스를 선택 해제합니다.
로깅을 사용 설정된 상태로 두면 샘플링 레이트 필드에 다른 샘플링 가능성을 설정할 수 있습니다.
0.0
부터1.0
까지 숫자를 설정할 수 있습니다.0.0
은 로깅된 요청이 없음을 의미하고1.0
은 모든 요청이 로깅됨을 의미합니다. 기본값은1.0
입니다. 저장된 로그 수를 20%로 줄이려면 값을0.2
로 설정합니다.백엔드 서비스 수정을 완료하려면 업데이트를 클릭합니다.
부하 분산기 수정을 완료하려면 업데이트를 클릭합니다.
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 (
|
선택사항 | 첫 번째 레이어 GFE에서 요청을 수신하는 시간입니다. |
httpRequest | HttpRequest | 필수 | HTTP 요청을 로깅하는 데 사용되는 공통 프로토콜입니다.
|
리소스 | MonitoredResource | 필수 | MonitoredResource는 로그 항목과 연결된 리소스 유형입니다. MonitoredResourceDescriptor는 유형 이름과 라벨 집합을 사용하여 |
jsonPayload | object (Struct format) | 필수 | JSON 객체로 표현되는 로그 항목 페이로드입니다. JSON 객체에는 다음 필드가 포함되어 있습니다.
|
문자열 | 필수 | statusDetails 필드에는 부하 분산기가 해당 HTTP 상태를 반환한 이유를 설명하는 문자열이 들어 있습니다. 이러한 로그 문자열에 대한 자세한 내용은 statusDetails HTTP 성공 메시지 및 statusDetails HTTP 실패 메시지를 참조하세요. |
|
문자열 | 필수 | backendTargetProjectNumber 필드에는 백엔드 대상(백엔드 서비스 또는 백엔드 버킷)이 생성된 프로젝트 번호가 있습니다. 이 필드는 "projects/PROJECT_NUMBER" 형식입니다. 이 정보는 커스텀 오류 응답을 사용하는 전역 외부 애플리케이션 부하 분산기에서만 사용할 수 있습니다. |
|
정수 | 필수 | overrideResponseCode 에는 클라이언트로 전송된 응답에 적용되는 재정의 응답 코드가 있습니다. 이 정보는 커스텀 오류 응답을 사용하는 전역 외부 애플리케이션 부하 분산기에서만 사용할 수 있습니다. |
|
문자열 | 필수 | errorService 필드에는 커스텀 오류 응답을 제공한 백엔드 서비스가 포함됩니다. 이 정보는 커스텀 오류 응답을 사용하는 전역 외부 애플리케이션 부하 분산기에서만 사용할 수 있습니다. |
|
문자열 | 필수 | errorBackendStatusDetails 필드에는 클라이언트에 제공되는 최종 응답의 statusDetails 가 포함됩니다.
이 정보는 커스텀 오류 응답을 사용하는 전역 외부 애플리케이션 부하 분산기에서만 사용할 수 있습니다. |
리소스 라벨
다음 표에는 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, 503 HTTP(S) 연결이 Websocket 연결로 업그레이드되었으면 HTTP 응답 코드가 101입니다. |
backend_early_response_with_non_error_status
|
백엔드가 전체 요청 본문을 수신하기 전에 오류가 아닌 응답(1XX 또는 2XX)을 요청에 전송했습니다. | 502, 503 |
backend_interim_response_not_supported
|
백엔드에서 중간 응답이 지원되지 않는 컨텍스트에서 중간 1XX 응답을 요청에 전송했습니다. | 502, 503 |
backend_response_corrupted
|
백엔드가 보낸 HTTP 응답 본문에 잘못된 분할 전송 인코딩이 있거나 응답 본문이 다른 이유로 손상되었습니다. | 손상 특성에 따라 모든 응답 코드가 가능합니다. 대부분 502, 503입니다. |
backend_response_headers_too_long
|
백엔드가 보낸 HTTP 응답 헤더가 허용 한도를 초과했습니다. 자세한 내용은 외부 애플리케이션 부하 분산기의 헤더 크기 섹션을 참조하세요. | 502, 503 |
backend_timeout
|
응답을 생성하는 동안 백엔드가 제한시간을 초과했습니다. WebSocket 연결의 경우:
|
502, 503 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 응답의 압축을 푸는 도중 오류가 발생했습니다. | 502, 503 |
failed_to_connect_to_backend
|
부하 분산기가 백엔드에 연결할 수 없습니다. 여기에는 연결 단계 동안의 시간 제한이 포함됩니다. | 502, 503 |
failed_to_pick_backend
|
부하 분산기가 요청을 처리할 수 있는 정상적인 백엔드를 선택하지 못했습니다. | 502, 503 |
failed_to_negotiate_alpn
|
부하 분산기와 백엔드가 TLS를 통해 서로 통신하는 데 사용할 애플리케이션 레이어 프로토콜(예: HTTP/2)을 협상할 수 없습니다. | 502, 503 |
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 요청 헤더에 관련된 HTTP 사양에서 허용되지 않는 문자가 하나 이상 포함되어 있습니다. 예를 들어 큰따옴표( 자세한 내용은 다음을 참고하세요. |
400 |
invalid_http2_client_header_format
|
클라이언트의 HTTP/2 헤더가 유효하지 않습니다. 자세한 내용은 invalid_request_headers 을 참조하세요.
|
400 |
multiple_iap_policies
|
여러 IAP(Identity-Aware Proxy) 정책을 결합할 수 없습니다. 백엔드 서비스에 IAP 정책을 연결하고 서버리스 객체에 연결된 다른 정책이 있는 경우 정책 중 하나를 삭제하고 다시 시도하세요. 서버리스 객체에는 App Engine, Cloud Run, Cloud Run Functions가 포함됩니다. | 500 |
malformed_chunked_body
|
요청 본문이 잘못 분할 인코딩되었습니다. | 411 |
request_loop_detected
|
부하 분산기가 요청 루프를 감지했습니다. 이 루프는 백엔드가 요청을 다시 부하 분산기로 전달하는 잘못된 구성으로 인해 발생할 수 있습니다. | 502, 503 |
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, 503 |
ssl_certificate_chain_verification_failed
|
백엔드에서 제시한 SSL 인증서가 SSL 인증서 확인에 실패했습니다. | 502, 503 |
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
|
이 응답은 액세스를 허용하기 전 클라이언트의 ID를 확인하는 동안 IAP(Identity-Aware Proxy)에 의해 생성되었습니다. | 200, 302, 400, 401, 403, 500, 502, 503 |
serverless_neg_routing_failed
|
서버리스 NEG 요청을 전달할 수 없습니다. 이 오류는 NEG에 지정된 리전에 도달할 수 없거나 리소스 이름(예: Cloud Run Functions 이름)을 찾을 수 없을 때 발생할 수 있습니다. | 404, 502, 503 |
fault_filter_abort
|
이 오류는 고객이 오류 필터를 구성했으며 지정된 요청에 대해 오류 필터가 트리거된 경우에 발생할 수 있습니다. | 값은 200부터 599까지여야 합니다. |
mTLS 클라이언트 인증서 검증 로그 보기
상호 TLS 클라이언트 인증서 유효성 검사 중에 닫힌 연결의 로깅된 오류를 보려면 다음 단계를 완료하세요.
콘솔 쿼리
Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
쿼리 표시 전환을 클릭합니다.
다음을 쿼리 필드에 붙여넣습니다.
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
쿼리 실행을 클릭합니다.
승인 정책 요청 로그
부하 분산기 로그 항목 JSON 페이로드의 authz_info
객체에는 승인 정책에 관한 정보가 포함됩니다. 이러한 정책에서 허용되거나 거부된 트래픽에 대해 로그 기반 측정항목을 구성할 수 있습니다.
필드 | 유형 | 설명 |
---|---|---|
authz_info.policies[] |
객체 | 요청과 일치하는 정책 목록입니다. |
authz_info.policies[].name |
문자열 | 요청과 일치하는 승인 정책의 이름입니다. 이름은 다음과 같은 이유로 비어 있습니다.
|
authz_info.policies[].result |
enum | 결과는 ALLOWED 또는 DENIED 일 수 있습니다. |
authz_info.policies[].details |
문자열 | 세부정보는 다음과 같습니다.
|
authz_info.overall_result |
enum | 결과는 ALLOWED 또는 DENIED 일 수 있습니다. |
백엔드 버킷 로깅
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에 의해 자동으로 채워집니다.
다음 단계를 수행하여 사전 정의된 대시보드에 액세스합니다.
Google Cloud 콘솔에서 Monitoring으로 이동합니다.
Monitoring 탐색창에서 대시보드를 클릭합니다.
카테고리에서 GCP를 클릭합니다.
모든 Google Cloud 부하 분산기의 대시보드 목록을 보려면 Google Cloud 부하 분산기라는 대시보드를 선택합니다. 특정 부하 분산기의 대시보드를 보려면 목록에서 부하 분산기를 찾아 해당 이름을 클릭합니다.
외부 애플리케이션 부하 분산기에 대해서만 사전 정의된 대시보드를 보려면 외부 HTTP(S) 부하 분산기라는 대시보드를 선택합니다. 이 페이지에서는 프로젝트에 있는 모든 외부 애플리케이션 부하 분산기에 대해 5XX 응답 비율 및 백엔드 지연 시간을 표시하는 대시보드를 보여줍니다. 또한 프로젝트에서 모든 외부 애플리케이션 부하 분산기에 대한 대시보드 목록을 제공합니다.
클릭하여 각 부하 분산기의 대시보드에 연결할 수 있습니다. 각 대시보드에는 다음이 포함됩니다.- 응답 코드 클래스별로 세분화된 응답을 표시하는 자동 입력된 그래프(5XX, 4XX, 3XX, 2XX)
- 총 지연 시간
- 백엔드 지연 시간
- 프런트엔드 RTT
- 요청 수
- 부하 분산기의 로그 링크
타사 서비스의 대시보드를 보려면 대시보드 페이지로 돌아갑니다. 카테고리에서 기타를 클릭합니다.
- 특정 타사 서비스 대시보드를 보려면 목록에서 대시보드를 찾아 이름을 클릭합니다.
알림 정책 정의
Google Cloud 콘솔에서 이 태스크에 대한 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.
알림 정책을 만들어 측정항목 값을 모니터링하고 측정항목이 조건을 위반하면 이에 대한 알림을 수신할 수 있습니다.
-
Google Cloud 콘솔에서 notifications 알림 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Monitoring인 결과를 선택합니다.
- 알림 채널을 만들지 않고 알림을 받으려면 알림 채널 수정을 클릭하고 알림 채널을 추가합니다. 채널을 추가한 후 알림 페이지로 돌아갑니다.
- 알림 페이지에서 정책 만들기를 클릭합니다.
- 측정항목을 선택하려면 측정항목 선택 메뉴를 확장한 후 다음을 수행합니다.
- 메뉴를 관련 항목으로 제한하려면 필터 표시줄에
Global External Application Load Balancer Rule
을 입력합니다. 메뉴를 필터링한 후 결과가 없으면 활성 리소스 및 측정항목만 표시 전환을 중지합니다. - 리소스 유형에서 전역 외부 애플리케이션 부하 분산기 규칙을 선택합니다.
- 측정항목 카테고리와 측정항목을 선택한 후 적용을 선택합니다.
- 메뉴를 관련 항목으로 제한하려면 필터 표시줄에
- 다음을 클릭합니다.
- 알림 트리거 구성 페이지의 설정에 따라 알림이 트리거되는 시점이 결정됩니다. 조건 유형을 선택하고 필요한 경우 기준점을 지정합니다. 자세한 내용은 측정항목 기준점 알림 정책 만들기를 참조하세요.
- 다음을 클릭합니다.
- 선택사항: 알림 정책에 알림을 추가하려면 알림 채널을 클릭합니다. 대화상자의 메뉴에서 하나 이상의 알림 채널을 선택한 다음 확인을 클릭합니다.
- 선택사항: 이슈 자동 종료 기간을 업데이트합니다. 이 필드는 측정항목 데이터가 없어 Monitoring에서 이슈를 닫을 시간을 결정합니다.
- 선택사항: 문서를 클릭한 후 알림 메시지에 포함할 정보를 추가합니다.
- 알림 이름을 클릭하고 알림 정책 이름을 입력합니다.
- 정책 만들기를 클릭합니다.
Cloud Monitoring 커스텀 대시보드 정의
부하 분산기의 측정항목에 대해 커스텀 Cloud Monitoring 대시보드를 만들 수 있습니다.
Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.
대시보드 > 대시보드 만들기를 선택합니다.
차트 추가를 클릭한 후 차트에 제목을 지정합니다.
표시할 시계열을 식별하려면 리소스 유형 및 측정항목 유형을 선택합니다.
- 리소스 및 측정항목 섹션에서 차트를 클릭한 후 측정항목 선택 섹션에서 사용 가능한 옵션 중에서 선택합니다.
- 전역 외부 애플리케이션 부하 분산기의 경우 전역 외부 애플리케이션 부하 분산기 규칙 리소스 유형을 선택합니다.
- 적용을 클릭합니다.
- 리소스 및 측정항목 섹션에서 차트를 클릭한 후 측정항목 선택 섹션에서 사용 가능한 옵션 중에서 선택합니다.
모니터링 필터를 지정하려면 필터 > 필터 추가를 클릭합니다.
저장을 클릭합니다.
측정항목 보고 빈도 및 보관
외부 애플리케이션 부하 분산기의 측정항목은 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에서 보낸 응답의 마지막 바이트 사이의 시간입니다. 총 지연 시간은 요청/응답으로 측정됩니다. WebSocket 연결의 경우 이 필드는 연결의 전체 시간 기간을 나타냅니다.† 예를 들어 영국에서 초당 요청이 1개인 부하 분산기는 지연 시간이 100ms이며, 미국에서 초당 요청이 9개인 부하 분산기는 지연 시간이 50ms입니다. 1분 동안 영국에서는 요청 60개가, 미국에서는 요청 540개가 들어옵니다. 모니터링 측정항목은 모든 측정기준에 대한 분포를 유지합니다. 다음과 같은 정보를 요청할 수 있습니다.
|
프런트엔드 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 범위(리전 또는 영역)입니다. 사용할 수 있는 인스턴스 그룹이 없거나 다른 항목이 요청을 제공했다면 백엔드 서비스 인스턴스 그룹의 리전이나 영역 대신 다음 값 중 하나가 표시됩니다.
이 분석을 선택하면 차트에 프런트엔드 측정항목(클라이언트-부하 분산기)이 아닌 백엔드 측정항목(부하 분산기-백엔드)이 표시됩니다. |
backend_type |
클라이언트의 요청을 처리한 백엔드 그룹의 이름입니다.
|
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 맵 경로 규칙 또는 라우팅 규칙입니다.
|
target_proxy_name |
전달 규칙에서 참조하는 대상 HTTP(S) 프록시 객체의 이름입니다. |
backend_target_name |
백엔드 대상의 이름입니다. 대상은 백엔드 서비스 또는 백엔드 버킷에 있습니다 백엔드가 할당되지 않은 경우 UNKNOWN 이 반환됩니다.
|
backend_name |
백엔드 인스턴스 그룹, 버킷 또는 NEG의 이름입니다.
백엔드가 할당되지 않은 경우 UNKNOWN 이 반환되고, 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류 또는 기타 중단이 발생한 경우에는 NO_BACKEND_SELECTED 가 반환됩니다. |
backend_scope_type |
백엔드 그룹의 범위 유형입니다. 백엔드가 선택되거나 URL 리디렉션이 발생하기 전에 오류나 기타 중단이 발생한 경우
|
proxy_continent |
HTTP(S) 연결을 종료한 HTTP(S) GFE의 대륙입니다.
(예: America , Europe , Asia ) |
protocol |
클라이언트에서 사용하는 프로토콜로 HTTP/1.0 , HTTP/1.1 , HTTP/2.0 , QUIC/HTTP/2.0 , UNKNOWN 중 하나입니다. |
response_code |
요청의 HTTP 응답 코드입니다. |
response_code_class |
요청의 HTTP 응답 코드 클래스입니다. 200, 300, 400, 500 또는 0(없음)입니다. |
cache_result |
프록시를 통해 HTTP 요청을 처리하는 캐시 결과: HIT , MISS , DISABLED , PARTIAL_HIT (캐시에서 일부, 백엔드에서 일부 처리되는 요청의 경우) 또는 UNKNOWN 입니다. |
client_country |
HTTP 요청을 실행한 클라이언트의 국가입니다(예: United States 또는 Germany ). |
load_balancing_scheme |
사용된 부하 분산 스키마입니다. 기본 애플리케이션 부하 분산기를 사용하는 경우 값은 EXTERNAL 입니다. 전역 외부 애플리케이션 부하 분산기를 사용하는 경우 값은 EXTERNAL_MANAGED 입니다. |