로깅
외부 애플리케이션 부하 분산기 백엔드 서비스에 대한 로그를 사용 설정, 사용 중지, 조회할 수 있습니다.
각 백엔드 서비스에 대해 로깅을 사용 설정하거나 사용 중지하게 되는데, 모든 요청을 로깅할지 아니면 무작위로 샘플링된 비율만 로깅할지 구성할 수 있습니다.
외부 애플리케이션 부하 분산기에 적용되는 로그 제외 규칙이 없는지 확인해야 합니다. Cloud HTTP Load
Balancer
로그가 허용되는지 확인하는 방법은 리소스 유형 제외 보기를 참조하세요.
선택사항 입력란
로그 레코드에는 필수 필드와 선택적 필드가 포함됩니다. 로깅되는 내용 섹션에는 선택적 필드와 필수 필드가 나열됩니다. 모든 필수 필드는 항상 포함됩니다. 어떤 필드를 선택적 필드로 유지할지 맞춤 설정할 수 있습니다.
모든 선택적 필드 포함을 선택하면 로그 레코드 형식의 모든 선택적 필드가 로그에 포함됩니다. 새 선택적 필드가 레코드 형식에 추가되면 로그에 새 필드가 자동으로 포함됩니다.
모든 선택적 해제를 선택하면 모든 선택적 필드가 생략됩니다.
커스텀을 선택하면 포함할 선택적 필드를 지정할 수 있습니다(예:
tls.protocol,tls.cipher
).
선택적 필드를 맞춤설정하는 방법은 새 백엔드 서비스에 로깅 사용 설정을 참조하세요.
새 백엔드 서비스에 로깅 사용 설정
콘솔
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 \ --region=REGION \ --enable-logging \ --logging-sample-rate=VALUE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --logging-optional=LOGGING_OPTIONAL_MODE \ --logging-optional-fields=OPTIONAL_FIELDS
각 항목의 의미는 다음과 같습니다.
--region
은 백엔드 서비스가 리전별임을 나타냅니다. 리전 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용하세요.--enable-logging
은 해당 백엔드 서비스의 로깅을 사용 설정합니다.--logging-sample-rate
를 사용하여0.0
부터1.0
까지 값을 지정할 수 있습니다.0.0
은 로깅된 요청이 없음을 의미하고1.0
은 모든 요청이 로깅되어 있음을 의미합니다.--enable-logging
매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를0.0
으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은1.0
입니다.--logging-optional
을 사용하면 로그에 포함할 선택적 필드를 지정할 수 있습니다.모든 선택 필드를 포함하려면
INCLUDE_ALL_OPTIONAL
모든 선택적 필드를 제외하려면
EXCLUDE_ALL_OPTIONAL
(기본값)OPTIONAL_FIELDS
에 지정하는 메타데이터 필드의 커스텀 목록을 포함하려면CUSTOM
--logging-optional-fields
를 사용하면 로그에 포함할 선택적 필드를 쉼표로 구분한 목록을 지정할 수 있습니다.예를 들어
LOGGING_OPTIONAL_MODE
가CUSTOM
으로 설정된 경우에만tls.protocol,tls.cipher
를 설정할 수 있습니다.
기존 백엔드 서비스에 로깅 사용 설정
콘솔
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 \ --region=REGION \ --enable-logging \ --logging-sample-rate=VALUE \ --logging-optional=LOGGING_OPTIONAL_MODE \ --logging-optional-fields=OPTIONAL_FIELDS
각 항목의 의미는 다음과 같습니다.
--region
은 백엔드 서비스가 리전별임을 나타냅니다. 리전 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용하세요.--enable-logging
은 해당 백엔드 서비스의 로깅을 사용 설정합니다.--logging-sample-rate
를 사용하여0.0
부터1.0
까지 값을 지정할 수 있습니다.0.0
은 로깅된 요청이 없음을 의미하고1.0
은 모든 요청이 로깅되어 있음을 의미합니다.--enable-logging
매개변수를 사용할 때에만 의미가 있습니다. 로깅을 사용 설정하되 샘플링 레이트를0.0
으로 설정하면 로깅을 사용 중지하는 것과 마찬가지입니다. 기본값은1.0
입니다.--logging-optional
을 사용하면 로그에 포함할 선택적 필드를 지정할 수 있습니다.모든 선택 필드를 포함하려면
INCLUDE_ALL_OPTIONAL
모든 선택적 필드를 제외하려면
EXCLUDE_ALL_OPTIONAL
(기본값)OPTIONAL_FIELDS
에 지정하는 메타데이터 필드의 커스텀 목록을 포함하려면CUSTOM
--logging-optional-fields
를 사용하면 로그에 포함할 선택적 필드를 쉼표로 구분한 목록을 지정할 수 있습니다.예를 들면
tls.protocol,tls.cipher
입니다.LOGGING_OPTIONAL_MODE
가CUSTOM
으로 설정된 경우에만 설정할 수 있습니다.
기존 백엔드 서비스에 로깅 사용 중지 또는 수정
콘솔
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 \ --region=REGION \ --no-enable-logging
각 항목의 의미는 다음과 같습니다.
--region
은 백엔드 서비스가 리전별임을 나타냅니다. 리전 외부 애플리케이션 부하 분산기와 함께 사용되는 백엔드 서비스에 이 필드를 사용하세요.--no-enable-logging
은 해당 백엔드 서비스에 로깅을 사용 중지합니다.
로깅 샘플링 레이트 수정
gcloud compute backend-services update BACKEND_SERVICE \ --global | --region=REGION \ --logging-sample-rate=VALUE
로그 보기
HTTP(S) 로그는 전달 규칙과 URL 맵 순서로 색인을 생성합니다.
로그를 보려면 로그 탐색기 페이지로 이동합니다.
모든 로그를 보려면 리소스 필터 메뉴에서 Cloud HTTP 부하 분산기 > 모든 전달 규칙을 선택합니다.
하나의 전달 규칙의 로그를 보려면 단일 전달 규칙 이름을 선택합니다.
URL 맵 하나의 로그를 보려면 전달 규칙을 선택한 후 URL 맵을 선택합니다.
불리언 형식의 로그 필드는 true
값이 있을 때만 표시됩니다.
불리언 필드의 값이 false
면 해당 필드는 로그에서 생략됩니다.
로그 필드에는 UTF-8 인코딩이 적용됩니다. UTF-8 문자를 제외하고는 모두 물음표로 대체됩니다.
리전 외부 애플리케이션 부하 분산기의 경우 리소스 로그(resource.type="http_external_regional_lb_rule"
)를 사용하여 로그 기반 측정항목을 내보낼 수 있습니다.
로깅되는 내용
외부 애플리케이션 부하 분산기 로그 항목에는 HTTP(S) 트래픽 모니터링과 디버깅에 유용한 정보가 포함됩니다. 로그 레코드에는 모든 로그 레코드의 기본 필드인 필수 필드가 포함됩니다. 로그 레코드에는 HTTP(S) 트래픽에 대한 추가 정보를 추가하는 선택적 필드가 포함됩니다. 선택적 필드를 생략하여 스토리지 비용을 절감할 수 있습니다.
일부 로그 필드는 한 필드에 두 가지 이상의 데이터를 포함하는 다중 필드 형식입니다. 예를 들어 tls
필드는 TlsDetails
형식이며 TLS 프로토콜 및 TLS 암호화가 단일 필드에 포함됩니다.
이러한 다중 필드 형식의 필드는 다음 레코드 형식 표에 설명되어 있습니다.
필드 | 필드 형식 | 필드 유형: 필수 또는 선택적 | 설명 |
---|---|---|---|
severity insertID timestamp logName |
LogEntry | 필수 | 로그 항목에 설명된 일반 필드입니다. |
httpRequest | HttpRequest | 필수 | HTTP 요청을 로깅하는 데 사용되는 공통 프로토콜입니다. |
리소스 | MonitoredResource | 필수 | MonitoredResource는 로그 항목과 연결된 리소스 유형입니다. MonitoredResourceDescriptor는 유형 이름과 라벨 집합을 사용하여 |
jsonPayload | object (Struct format) | 필수 | JSON 객체로 표현되는 로그 항목 페이로드입니다. JSON 객체에는 다음 필드가 포함되어 있습니다.
|
문자열 | 필수 |
값이 빈 문자열인 경우 필드가 로깅되지 않습니다. 이 오류는 프록시 또는 백엔드가 오류 또는
|
|
TlsDetails | 선택사항 | tls 필드에는 클라이언트와 리전 외부 애플리케이션 부하 분산기 간 연결에 대한 TLS 메타데이터를 지정하는 TlsDetails가 있습니다. 이 필드는 클라이언트가 TLS/SSL 암호화를 사용하는 경우에만 사용할 수 있습니다. |
|
MtlsDetails | 선택사항 | mtls 필드에는 클라이언트와 리전 외부 애플리케이션 부하 분산기 간 연결에 대한 mTLS 메타데이터를 지정하는 MtlsDetails가 있습니다.
이 필드는 부하 분산기가 프런트엔드 상호 TLS (mTLS)를 사용하는 경우에만 사용할 수 있습니다.
|
TlsDetails 필드 형식
필드 | 필드 형식 | 필드 유형: 필수 또는 선택적 | 설명 |
---|---|---|---|
protocol | 문자열 | 선택사항 | 클라이언트가 부하 분산기와 연결하는 데 사용하는 TLS 프로토콜입니다. 가능한 값은 TLS 1.0, 1.1, 1.2,
1.3 또는 QUIC 입니다.
클라이언트가 TLS/SSL 암호화를 사용하지 않는 경우 이 값은 NULL 로 설정됩니다.
|
암호화 | 문자열 | 선택사항 | 클라이언트가 부하 분산기와 연결하는 데 사용하는 TLS 암호화입니다. 클라이언트가 HTTP(S)를 사용하지 않거나 클라이언트가 TLS/SSL 암호화를 사용하지 않는 경우 이 값은 NULL 로 설정됩니다.
|
MtlsDetails 필드 형식
필드 | 필드 형식 | 필드 유형: 필수 또는 선택적 | 설명 |
---|---|---|---|
clientCertPresent | 부울 | 선택사항 | TLS 핸드셰이크 중 클라이언트가 인증서를 제공한 경우 |
clientCertChainVerified | 부울 | 선택사항 | 클라이언트 인증서 체인이 구성된 |
clientCertError | 문자열 | 선택사항 | 오류 조건을 나타내는 사전 정의된 문자열입니다. 오류 문자열에 대한 자세한 내용은 mTLS 클라이언트 검증 모드를 참조하세요. |
clientCertSha256Fingerprint | 문자열 | 선택사항 | 클라이언트 인증서의 Base64로 인코딩된 SHA-256 지문입니다. |
clientCertSerialNumber | 문자열 | 선택사항 | 클라이언트 인증서의 일련번호입니다.
일련번호가 50바이트보다 길면 |
clientCertValidStartTime | 문자열 | 선택사항 | 클라이언트 인증서가 유효하지 않은 이전의 타임스탬프(RFC 3339 날짜 문자열 형식)입니다.
예를 들면 |
clientCertValidEndTime | 문자열 | 선택사항 | 클라이언트 인증서가 유효하지 않은 이후의 타임스탬프(RFC 3339 날짜 문자열 형식)입니다.
예를 들면 |
clientCertSpiffeId | 문자열 | 선택사항 | 주체 대체 제목(SAN) 필드의 SPIFFE ID입니다. 값이 유효하지 않거나 2,048바이트를 초과할 경우 SPIFFE ID가 빈 문자열로 설정됩니다. SPIFFE ID가 2048바이트보다 길면 |
clientCertUriSans | 문자열 | 선택사항 | 쉼표로 구분된 Base64로 인코딩된 URI 유형의 SAN 확장 프로그램 목록입니다. SAN 확장 프로그램은 클라이언트 인증서에서 추출됩니다.
SPIFFE ID는
|
clientCertDnsnameSans | 문자열 | 선택사항 | 쉼표로 구분된 Base64로 인코딩된 DNSName 유형의 SAN 확장 프로그램 목록입니다. SAN 확장 프로그램은 클라이언트 인증서에서 추출됩니다.
|
clientCertIssuerDn | 문자열 | 선택사항 | 인증서에서 Base64로 인코딩된 전체 발급기관 필드입니다.
|
clientCertSubjectDn | 문자열 | 선택사항 | 인증서에서 Base64로 인코딩된 전체 주체 필드입니다.
|
clientCertLeaf | 문자열 | 선택사항 | 인증서가 유효성 검사를 통과한 설정된 mTLS 연결의 클라이언트 리프 인증서입니다. 인증서 인코딩은 RFC 9440을 준수합니다. 바이너리 DER 인증서가 Base64로 인코딩되며(줄바꿈, 공백, Base64 알파벳 이외의 기타 문자 없음) 양쪽에서 콜론으로 구분됩니다.
|
clientCertChain | 문자열 | 선택사항 | 리프 인증서를 포함하지 않은 클라이언트 인증서가 검증을 통과한 설정된 mTLS 연결의 클라이언트 인증서 체인에 대한 표준 TLS 순서의 쉼표로 구분된 인증서 목록입니다. 인증서 인코딩은 RFC 9440을 준수합니다. Base64 인코딩 전의 |
리소스 라벨
다음 표에는 resource.type="http_external_regional_lb_rule"
에 대한 리소스 라벨이 나와 있습니다.
필드 | 유형 | 설명 |
---|---|---|
backend_name |
문자열 | 백엔드 인스턴스 그룹 또는 NEG의 이름입니다. 하지만 TLS 연결 실패의 경우 라벨이 비어 있습니다. |
backend_scope |
문자열 |
백엔드의 범위입니다(영역 이름 또는 리전 이름). backend_name 을 알 수 없다면 UNKNOWN 일 수 있습니다.
|
backend_scope_type |
문자열 |
백엔드의 범위입니다(REGION /ZONE ). backend_name 을 알 수 없다면 UNKNOWN 일 수 있습니다.
|
backend_target_name |
문자열 | 요청과 일치하는 URL 맵 경로 규칙에 따라 요청을 처리하도록 선택된 백엔드의 이름입니다. |
backend_target_type |
문자열 |
백엔드 대상 유형입니다. BACKEND_SERVICE 일 수 있거나 백엔드가 할당되지 않은 경우 UNKNOWN 이 반환됩니다.
|
backend_type |
문자열 |
백엔드 그룹의 유형입니다. INSTANCE_GROUP 또는 NETWORK_ENDPOINT_GROUP 일 수 있으며 백엔드가 할당되지 않은 경우 UNKNOWN 이 반환됩니다.
|
forwarding_rule_name |
문자열 | 전달 규칙 객체의 이름 |
matched_url_path_rule |
문자열 |
URL 맵 키의 일부로 구성된 URL 맵 경로 규칙 또는 라우팅 규칙입니다. UNMATCHED 또는 UNKNOWN 으로 대체할 수 있습니다.
|
network_name |
문자열 | 부하 분산기의 VPC 네트워크 이름입니다. |
project_id |
문자열 | 이 리소스와 연결된 Google Cloud 프로젝트의 식별자입니다. |
region |
문자열 | 부하 분산기가 정의된 리전입니다. |
target_proxy_name |
문자열 | 전달 규칙에서 참조하는 대상 프록시 객체의 이름입니다. |
url_map_name |
문자열 | 백엔드 서비스를 선택하도록 구성된 URL 맵 객체의 이름입니다. TLS 연결 실패의 경우 비어 있습니다. |
proxyStatus 오류 필드
proxyStatus
필드에는 부하 분산기가 오류를 반환한 이유를 지정하는 문자열이 포함됩니다. proxyStatus
필드에는 proxyStatus error
및 proxyStatus details
의 두 부분이 있습니다.
이 섹션에서는 proxyStatus error
필드에서 지원되는 문자열을 설명합니다.
proxyStatus 오류 필드는 다음 부하 분산기에 적용됩니다.
- 리전 외부 애플리케이션 부하 분산기
- 리전 간 내부 애플리케이션 부하 분산기
- 리전 내부 애플리케이션 부하 분산기
proxyStatus 오류 | 설명 | 일반적인 동반 응답 코드 |
---|---|---|
destination_unavailable
|
부하 분산기가 백엔드를 사용할 수 없다고 간주합니다. 예를 들어 최근에 백엔드와 통신하려는 시도가 실패했거나 상태 점검이 실패했음을 나타낼 수 있습니다. | 500, 503 |
connection_timeout
|
백엔드에 대한 연결을 열려는 부하 분산기의 시도가 시간 초과되었습니다. | 504 |
connection_terminated
|
전체 응답이 수신되기 전에 백엔드에 대한 부하 분산기의 연결이 종료되었습니다. 이
|
0, 502, 503 |
connection_refused
|
백엔드에 대한 부하 분산기의 연결이 거부되었습니다. | 502, 503 |
connection_limit_reached
|
부하 분산기가 백엔드에 대한 연결 수를 제한하도록 구성되었는데 이 한도가 초과되었습니다. 이
|
502, 503 |
destination_not_found
|
부하 분산기가 이 요청에 사용할 적절한 백엔드를 확인할 수 없습니다. 예를 들어 백엔드가 구성되지 않았을 수 있습니다. | 500, 404 |
dns_error
|
백엔드 호스트 이름의 IP 주소를 찾으려고 할 때 부하 분산기에 DNS 오류가 발생했습니다. | 502, 503 |
proxy_configuration_error
|
부하 분산기에 내부 구성 오류가 발생했습니다. | 500 |
proxy_internal_error
|
부하 분산기에 내부 오류가 발생했습니다. | 0, 500, 502 |
proxy_internal_response
|
부하 분산기가 백엔드에 연결을 시도하지 않고 응답을 생성했습니다. | 문제 유형에 따른 모든 응답 코드 예를 들어 410 응답 코드는 결제 연체로 인해 백엔드를 사용할 수 없음을 의미합니다.
|
http_response_timeout
|
백엔드의 전체 응답을 기다리는 동안 부하 분산기가 구성된 백엔드 서비스 제한 시간 한도에 도달했습니다. | 504, 408 |
http_request_error
|
부하 분산기에 클라이언트 요청에 문제가 있음을 나타내는 HTTP 4xx 오류가 발생했습니다. | 400, 403, 405, 406, 408, 411, 413, 414, 415, 416, 417, 또는 429 |
http_protocol_error
|
백엔드와 통신할 때 부하 분산기에 HTTP 프로토콜 오류가 발생했습니다. | 502 |
tls_protocol_error
|
TLS 핸드셰이크 중 부하 분산기에 TLS 오류가 발생했습니다. | 0 |
tls_certificate_error
|
mTLS가 사용 설정되었을 때 서버 또는 클라이언트에서 제공한 인증서를 확인하는 경우 부하 분산기에 오류가 발생했습니다. | 0 |
tls_alert_received
|
TLS 핸드셰이크 중 부하 분산기에 심각한 TLS 알림이 발생했습니다. | 0 |
proxyStatus 세부정보 필드
proxyStatus
필드에는 부하 분산기가 오류를 반환한 이유를 지정하는 문자열이 포함됩니다. proxyStatus
필드에는 proxyStatus error
및 proxyStatus details
의 두 부분이 있습니다.
proxyStatus details
필드는 선택사항이며 추가 정보가 있는 경우에만 표시됩니다.
이 섹션에서는 proxyStatus details
필드에서 지원되는 문자열을 설명합니다.
proxyStatus 세부정보 필드는 다음 부하 분산기에 적용됩니다.
- 리전 외부 애플리케이션 부하 분산기
- 리전 내부 애플리케이션 부하 분산기
- 리전 간 내부 애플리케이션 부하 분산기
proxyStatus 세부정보 | 설명 | 일반적인 동반 응답 코드 |
---|---|---|
client_disconnected_before_any_response
|
부하 분산기가 응답을 보내기 전에 클라이언트와의 연결이 끊어졌습니다. | 0 |
backend_connection_closed
|
백엔드가 예기치 않게 부하 분산기와의 연결을 닫았습니다. 부하 분산기가 TCP 제한 시간이 부하 분산기의 10분(600초) 제한 시간보다 짧은 서드 파티 애플리케이션과 같은 다른 항목으로 트래픽을 전송하는 경우에 이러한 상황이 발생할 수 있습니다. | 502 |
failed_to_connect_to_backend
|
부하 분산기가 백엔드에 연결할 수 없습니다. 이 오류에는 연결 단계 동안의 시간 제한이 포함됩니다. | 503 |
failed_to_pick_backend
|
부하 분산기가 요청을 처리할 수 있는 정상적인 백엔드를 선택하지 못했습니다. | 502 |
response_sent_by_backend
|
HTTP 요청이 백엔드에 성공적으로 프록시되었으며 백엔드에서 응답을 반환했습니다. | HTTP 응답 코드는 백엔드에서 실행되는 소프트웨어에 의해 설정됩니다. |
client_timed_out
|
부하 분산기와 클라이언트 간의 연결이 유휴 제한 시간을 초과했습니다. 리전별 외부 애플리케이션 부하 분산기에 대한 자세한 내용은 클라이언트 HTTP 연결 유지 제한 시간을 참조하세요. 내부 애플리케이션 부하 분산기에 대한 자세한 내용은 클라이언트 HTTP 연결 유지 제한 시간을 참조하세요. |
0, 408 |
backend_timeout
|
응답을 생성하는 동안 백엔드가 제한시간을 초과했습니다. |
502 |
http_protocol_error_from_backend_response
|
백엔드 응답에 HTTP 프로토콜 오류가 포함됩니다. | 501, 502 |
http_protocol_error_from_request
|
클라이언트 요청에 HTTP 프로토콜 오류가 포함됩니다. | 400, 503 |
http_version_not_supported
|
HTTP 프로토콜 버전은 지원되지 않습니다. HTTP 0.9, 1.0, 1.1, 2.0만 지원됩니다. | 400 |
handled_by_identity_aware_proxy
|
이 응답은 액세스를 허용하기 전 클라이언트의 ID를 확인하는 동안 IAP(Identity-Aware Proxy)에 의해 생성되었습니다. | 200, 302, 400, 401, 403, 500, 502 |
invalid_request_headers
|
클라이언트에서 수신된 HTTP 요청 헤더가 유효하지 않습니다. | 400, 404 |
ip_detection_failed
|
원본 IP 주소를 감지할 수 없습니다. | 핸드셰이크 실패의 특성에 따라 모든 응답 코드가 가능합니다. 값은 400부터 599까지여야 합니다. |
request_body_too_large
|
HTTP 요청 본문이 부하 분산기에서 지원되는 최대 길이를 초과했습니다. | 413, 507 |
request_header_timeout
|
부하 분산기가 5초 내에 전체 요청을 수신하지 못하여 요청 헤더가 시간 초과되었습니다. | 408, 504 |
denied_by_security_policy
|
Google Cloud Armor 보안 정책으로 인해 부하 분산기가 이 요청을 거부했습니다. | 403 |
throttled_by_security_policy
|
Google Cloud Armor 제한 규칙에 의해 요청이 차단되었습니다. | 429 |
client_cert_chain_invalid_eku
|
클라이언트 인증서 또는 발급기관에 clientAuth를 포함하는 확장된 키 사용이 없습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_chain_max_name_constraints_exceeded
|
검증을 위해 제공된 중간 인증서에 이름 제약조건이 10개를 초과합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_invalid_rsa_key_size
|
클라이언트 리프 또는 중간 인증서에 잘못된 RSA 키 크기가 있습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_not_provided
|
클라이언트가 핸드셰이크 중에 요청된 인증서를 제공하지 않았습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_pki_too_large
|
검증에 사용되는 PKI에는 동일한 Subject 및 Subject Public Key Info 를 공유하는 중간 인증서가 4개 이상 있습니다.
자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요.
|
0 |
client_cert_unsupported_elliptic_curve_key
|
클라이언트 또는 중간 인증서는 지원되지 않는 타원 곡선을 사용하고 있습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_unsupported_key_algorithm
|
클라이언트 또는 중간 인증서가 RSA가 아니거나 ECDSA가 아닌 알고리즘을 사용합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_validation_failed
|
클라이언트 인증서가 TrustConfig 리소스를 사용한 검증에 실패합니다.
자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요.
|
0 |
client_cert_validation_not_performed
|
TrustConfig 를 설정하지 않고 상호 TLS를 구성했습니다.
자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요.
|
0 |
client_cert_validation_search_limit_exceeded
|
인증서 체인을 검증하는 동안 깊이 또는 반복 한도에 도달합니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
client_cert_validation_timed_out
|
인증서 체인을 검증하는 동안 시간 제한(200ms)을 초과했습니다. 자세한 내용은 닫힌 연결의 로깅된 오류를 참조하세요. | 0 |
tls_version_not_supported
|
TLS 프로토콜 버전이 인식되지만 지원되지 않습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
unknown_psk_identity
|
PSK 키 설정이 필요할 때 서버가 이 오류를 전송하지만 클라이언트가 허용되는 PSK ID를 제공하지 않습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
no_application_protocol
|
클라이언트 'application_layer_protocol_negotiation' 확장 프로그램이 서버가 지원하지 않는 프로토콜만 공지할 때 서버에서 전송됩니다. TLS 애플리케이션 계층 프로토콜 협상 확장 프로그램을 참조하세요. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
no_certificate
|
인증서를 찾을 수 없습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
bad_certificate
|
인증서가 잘못되었거나 확인할 수 없는 서명이 포함되어 있습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
unsupported_certificate
|
인증서가 지원되지 않는 유형입니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
certificate_revoked
|
서명자가 인증서를 취소했습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
certificate_expired
|
인증서가 만료되었거나 유효하지 않습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
certificate_unknown
|
인증서를 처리하는 동안 지정되지 않은 일부 문제가 발생하여 사용할 수 없게 되었습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
unknown_ca
|
유효한 인증서 체인 또는 부분 체인이 수신되었지만 CA 인증서를 찾거나 알려진 신뢰 앵커와 일치시킬 수 없어서 인증서가 허용되지 않았습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
unexpected_message
|
잘못된 핸드셰이크 메시지 또는 조기 애플리케이션 데이터와 같은 부적절한 메시지가 수신되었습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
bad_record_mac
|
보호 해제할 수 없는 레코드가 수신되었습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
record_overflow
|
길이가 214+256바이트를 초과하는 TLSCiphertext 레코드가 수신되었거나 레코드가 214바이트(또는 기타 협상된 한도)를 초과하는 TLSPlaintext 레코드로 복호화되었습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다.
|
0 |
handshake_failure
|
사용 가능한 옵션으로 허용되는 보안 매개변수 집합을 협상할 수 없습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
illegal_parameter
|
핸드셰이크의 필드가 잘못되었거나 다른 필드와 일치하지 않습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
access_denied
|
유효한 인증서 또는 PSK가 수신되었지만 액세스 제어가 적용되었을 때 클라이언트가 협상을 진행하지 않았습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
decode_error
|
일부 필드가 지정된 범위를 벗어나거나 메시지 길이가 잘못되어 메시지를 디코딩할 수 없습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
decrypt_error
|
서명을 올바르게 확인할 수 없거나 완료된 메시지 또는 PSK 바인더를 검증할 수 없는 경우를 포함한 핸드셰이크(레코드 레이어가 아님) 암호화 작업이 실패했습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
insufficient_security
|
특히 서버에는 클라이언트에서 지원하는 매개변수보다 더 안전한 매개변수가 필요하기 때문에 협상이 실패했습니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
inappropriate_fallback
|
클라이언트의 잘못된 연결 재시도에 대한 응답으로 서버에서 전송됩니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
user_cancelled
|
사용자가 프로토콜 오류와 무관한 이유로 핸드셰이크를 취소합니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
missing_extension
|
제공된 TLS 버전 또는 기타 협상된 매개변수에 대해 반드시 전송해야 하는 확장 프로그램이 포함되지 않은 핸드셰이크 메시지를 수신하는 엔드포인트에서 전송됩니다. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
unsupported_extension
|
지정된 핸드셰이크 메시지에 포함이 금지된 것으로 알려진 확장 프로그램을 포함하거나 해당하는 ClientHello 또는 CertificateRequest 에서 처음 제공되지 않은 ServerHello 또는 Certificate 의 확장 프로그램을 포함하는 핸드셰이크 메시지를 수신하는 엔드포인트에서 전송됩니다.
이 오류가 발생하면 TLS 연결이 닫힙니다.
|
0 |
unrecognized_name
|
'server_name' 확장 프로그램을 통해 클라이언트에서 제공한 이름으로 식별할 수 있는 서버가 없는 경우 서버에서 전송됩니다. TLS 확장 프로그램 정의를 참조하세요. | 0 |
bad_certificate_status_response
|
유효하지 않거나 허용되지 않는 OCSP 응답이 'status_request' 확장 프로그램을 통해 서버에서 제공되면 클라이언트에서 전송됩니다. TLS 확장 프로그램 정의를 참조하세요. 이 오류가 발생하면 TLS 연결이 닫힙니다. | 0 |
load_balancer_configured_resource_limits_reached
|
부하 분산기가 최대 연결 수와 같은 구성된 리소스 한도에 도달했습니다. | 400, 500, 503 |
실패한 TLS 연결 로그 항목
백엔드가 선택되기 전에 클라이언트와 부하 분산기 간의 TLS 연결이 실패하면 로그 항목에 오류가 기록됩니다. 다양한 로그 샘플링 레이트로 백엔드 서비스를 구성할 수 있습니다. TLS 연결이 실패할 경우 실패한 TLS 연결 로그 샘플링 레이트는 백엔드 서비스의 가장 높은 샘플링 레이트입니다. 예를 들어 로깅 샘플링 레이트가 0.3
및 0.5
인 2개의 백엔드 서비스를 구성한 경우 실패한 TLS 연결 로그 샘플링 레이트는 0.5
입니다.
다음 로그 항목 세부정보를 확인하여 실패한 TLS 연결을 식별할 수 있습니다.
- proxyStatus 오류 유형은
tls_alert_received
,tls_certificate_error
,tls_protocol_error
,connection_terminated
입니다. - 백엔드 정보는 없습니다.
다음 샘플은 proxyStatus error
필드가 있는 실패한 TLS 로그 항목을 보여줍니다.
json_payload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" proxyStatus: "error="tls_alert_received"; details="server_to_client: handshake_failure"" log_name: "projects/529254013417/logs/mockservice.googleapis.com%20name" } http_request { latency { nanos: 12412000 } protocol: "HTTP/1.0" remote_ip: "127.0.0.2" } resource { type: "mock_internal_http_lb_rule" labels { backend_name: "" backend_scope: "" backend_scope_type: "UNKNOWN" backend_target_name: "" backend_target_type: "UNKNOWN" backend_type: "UNKNOWN" forwarding_rule_name: "l7-ilb-https-forwarding-rule-dev" matched_url_path_rule: "UNKNOWN" network_name: "lb-network" region: "REGION" target_proxy_name: "l7-ilb-https-proxy-dev" url_map_name: "" } } timestamp: "2023-08-15T16:49:30.850785Z"
로그와 상호작용
Cloud Logging API를 사용하여 외부 애플리케이션 부하 분산기 로그와 상호작용할 수 있습니다. Logging API는 특정 필드가 설정된 로그를 대화형으로 필터링하는 방법을 제공합니다. 일치하는 로그를 Cloud Logging, Cloud Storage, BigQuery 또는 Pub/Sub로 내보냅니다. Logging API에 대한 자세한 내용은 Cloud Logging API 개요를 참조하세요.
모니터링
부하 분산기는 모니터링 데이터를 Cloud Monitoring으로 내보냅니다.
모니터링 측정항목을 사용하여 다음을 수행할 수 있습니다.
- 부하 분산기의 구성, 사용, 성능 평가
- 문제 해결
- 리소스 사용률 및 사용자 환경 개선
Cloud Monitoring의 사전 정의된 대시보드 외에도 Cloud Monitoring API를 통해 커스텀 대시보드를 만들고, 알림을 설정하고, 측정항목을 쿼리할 수 있습니다.
알림 정책 정의
알림 정책을 만들어 측정항목 값을 모니터링하고 측정항목이 조건을 위반하면 이에 대한 알림을 수신할 수 있습니다.
-
Google Cloud 콘솔에서 notifications 알림 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Trace인 결과를 선택합니다.
- 알림 채널을 만들지 않고 알림을 받으려면 알림 채널 수정을 클릭하고 알림 채널을 추가합니다. 채널을 추가한 후 알림 페이지로 돌아갑니다.
- 알림 페이지에서 정책 만들기를 클릭합니다.
- 측정항목을 선택하려면 측정항목 선택 메뉴를 확장한 후 다음을 수행합니다.
- 메뉴를 관련 항목으로 제한하려면 필터 표시줄에
Regional 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/external/regional/request_count |
리전 외부 애플리케이션 부하 분산기에서 제공하는 요청 수입니다. |
요청 바이트 수 | https/external/regional/request_bytes |
클라이언트에서 리전 외부 애플리케이션 부하 분산기로 보낸 요청의 바이트 수입니다. |
응답 바이트 수 | https/external/regional/response_bytes |
리전 외부 애플리케이션 부하 분산기에서 클라이언트로 보낸 응답의 바이트 수입니다. |
총 지연 시간 | https/external/regional/total_latencies |
지연 시간 분포(밀리초)입니다. 지연 시간은 프록시가 요청의 첫 번째 바이트를 수신하는 시간부터 프록시가 응답의 마지막 바이트를 전송하는 시간까지로 측정됩니다. |
백엔드 지연 시간 | https/external/regional/backend_latencies |
지연 시간 분포(밀리초)입니다. 지연 시간은 프록시가 요청의 첫 번째 바이트를 백엔드로 전송하는 시간부터 프록시가 백엔드로부터 응답의 마지막 바이트를 수신한 시간까지 측정됩니다. |
측정항목의 필터링 측정기준
외부 애플리케이션 부하 분산기의 측정항목에 필터를 적용할 수 있습니다.
측정항목은 리전 외부 애플리케이션 부하 분산기마다 집계됩니다. 집계된 측정항목은 resource.type="http_external_regional_lb_rule"
에 대한 다음 측정기준을 사용하여 필터링할 수 있습니다.
속성 | 설명 |
---|---|
backend_name |
백엔드 인스턴스 그룹 또는 NEG의 이름입니다. |
backend_scope |
백엔드의 범위입니다(영역 이름 또는 리전 이름). backend_name 을 알 수 없다면 UNKNOWN 일 수 있습니다.
|
backend_scope_type |
백엔드의 범위입니다(REGION /ZONE ). backend_name 을 알 수 없다면 UNKNOWN 일 수 있습니다.
|
backend_target_name |
요청과 일치하는 URL 맵 경로 규칙에 따라 요청을 처리하도록 선택된 백엔드의 이름입니다. |
backend_target_type |
백엔드 대상 유형입니다. BACKEND_SERVICE 일 수 있거나 백엔드가 할당되지 않은 경우 UNKNOWN 이 반환됩니다.
|
backend_type |
백엔드 그룹의 유형입니다. INSTANCE_GROUP 또는 NETWORK_ENDPOINT_GROUP 일 수 있으며 백엔드가 할당되지 않은 경우 UNKNOWN 이 반환됩니다.
|
forwarding_rule_name |
전달 규칙 객체의 이름 |
matched_url_path_rule |
URL 맵 키의 일부로 구성된 URL 맵 경로 규칙 또는 라우팅 규칙입니다. UNMATCHED 또는 UNKNOWN 으로 대체할 수 있습니다.
|
network_name |
부하 분산기의 VPC 네트워크 이름입니다. |
project_id |
이 리소스와 연결된 Google Cloud 프로젝트의 식별자입니다. |
region |
부하 분산기가 정의된 리전입니다. |
target_proxy_name |
전달 규칙에서 참조하는 대상 프록시 객체의 이름입니다. |
url_map_name |
백엔드 서비스를 선택하도록 구성된 URL 맵 객체의 이름입니다. |