애플리케이션 부하 분산기 및 Cloud CDN 플러그인 로깅 및 모니터링

이 페이지에서는 Cloud 부하 분산 및 Cloud CDN의 Service Extensions 플러그인과 함께 Cloud LoggingCloud Monitoring을 구성하고 사용하는 방법을 보여줍니다.

로깅

이 섹션에서는 애플리케이션 부하 분산기 플러그인의 로깅에 대해 설명합니다. 로깅은 플러그인 관점과 부하 분산기 관점에서 모두 가능합니다.

로그 메시지

Service Extensions는 플러그인 실행 중에 로그 메시지 생성을 지원합니다. 로그 기록은 기본적으로 사용 중지되어 있습니다. 플러그인에 대한 로그를 기록하려면 플러그인을 만들 때 또는 업데이트할 때 사용 설정하세요.

플러그인 로그 레코드에는 다음 컨텍스트 정보가 주석으로 추가됩니다.

  • 타임스탬프, 로그 수준과 같은 표준 로그 주석
  • 메시지를 생성한 플러그인의 ID입니다.
  • 로그 메시지가 생성된 플러그인 콜백입니다.
  • 로그 메시지와 연결된 요청 로그를 확인하는 데 도움이 되는 requestId 추적 식별자입니다.

Service Extensions와 관련된 로그는 다음 카테고리 중 하나에 있습니다.

  • 플러그인 로그 메시지

    Rust의 경우 info!(...), Go의 경우 proxywasm.LogInfo(...), C++의 경우 LOG_INFO와 같은 로깅 호출에 의해 생성됩니다. Service Extensions는 이러한 로그 메시지를 Cloud Logging으로 내보냅니다. 요청 및 응답 헤더와 플러그인에서 취한 작업을 로깅할 수 있습니다.

    networkservices.googleapis.com 서비스를 사용하여 이러한 메시지를 볼 수 있습니다.

  • Cloud Load Balancing 로그 메시지

    loadbalancing.googleapis.com 서비스를 사용하여 이러한 메시지를 볼 수 있습니다.

플러그인 관점에서 로깅

이 섹션에서는 플러그인 관점에서 Service Extensions 로깅을 설명합니다.

플러그인 로깅 사용 설정

Service Extensions는 플러그인 실행 중에 로그 메시지 생성을 지원합니다. 로그 기록은 기본적으로 사용 중지되어 있습니다.

플러그인에 대한 로그를 기록하려면 플러그인을 만들 때 또는 업데이트할 때 사용 설정하세요.

기존 플러그인에 로깅을 사용 설정하려면 gcloud service-extensions wasm-plugins update 명령어를 사용합니다.

gcloud service-extensions wasm-plugins update WASM_PLUGIN \
    --log-config=[LOG_CONFIG,...]

다음을 바꿉니다.

  • WASM_PLUGIN: 플러그인의 ID 또는 정규화된 이름
  • LOG_CONFIG: 플러그인의 로깅 옵션입니다. 로깅을 사용 설정하려면 enable 옵션을 true로 설정합니다. 그런 다음 다음 세부정보를 지정합니다.

    • sample-rate: 활동 로그의 샘플링 레이트입니다(0~1 사이의 값). 값 0은 로그 메시지가 저장되지 않음을 나타냅니다. 기본값 1은 모든 로그 메시지가 저장됨을 나타냅니다. 0.01.0 사이의 부동 소수점 값은 로그 메시지의 비율이 저장됨을 나타냅니다.
    • min-log-level: Cloud Logging으로 내보낼 플러그인 로그 메시지의 최소 심각도 수준입니다. 기본값은 INFO입니다.

플러그인의 로깅을 사용 설정하면 플러그인 코드의 로깅 문에서 내보낸 메시지를 Cloud Logging에서 볼 수 있습니다.

로그를 보려면 Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

플러그인 로그 메시지 보기

로그는 로그 탐색기에서 쿼리를 빌드하여 볼 수 있습니다.

플러그인 로그를 독립형 Service Extensions 로그로 볼 수 있습니다. 이 뷰에서는 각 플러그인 로그 메시지가 자체 로그 레코드에 기록되며 요청 로그 정보와 자동으로 연결되지 않습니다.

이러한 로그 메시지는 리소스 유형이 networkservices.googleapis.com/WasmPluginVersionnetworkservices.googleapis.com/wasm_plugin_activity 로그에 있습니다.

시스템에서 이 로그에 정보 로그 메시지를 추가할 수도 있습니다. 예를 들어 플러그인 호출이 CPU 또는 메모리 한도를 초과할 때 플러그인 오류가 발생하면 ERROR 심각도 메시지가 로깅됩니다. 이러한 메시지는 오류 보기 및 필터링에서도 확인할 수 있습니다.

플러그인 로그 샘플

샘플 Service Extensions 로그 항목을 고려해 보세요. message 값은 플러그인의 LOG_INFO 호출에 전달됩니다. severity 값은 플러그인 로그 호출에 사용된 로그 수준에 따라 달라집니다. labels 섹션에서 API 값은 HTTP_REQUEST_HEADER이며, 이는 로깅된 작업이 on_http_request_headers 플러그인 콜백임을 나타냅니다.

{
  "insertId": "65224aac-0000-24bd-a0e1-582429bd544c@a1",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.networkservices.logging.v1.WasmPluginLogEntry",
    "metroIataCode": "ber",
    "proxyRegionCode": "DE",
    "message": "[add_header_plugin.cc:26]::onRequestHeaders() AddHeaderStreamContext::onRequestHeaders called",
    "requestId": "effc0311-6716-431b-9e2a-7586835fdff1"
  },
  "resource": {
    "type": "networkservices.googleapis.com/WasmPluginVersion",
    "labels": {
      "plugin_version": "prod-1",
      "resource_container": "projects/123456789",
      "location": "global",
      "plugin_name": "add-headers-plugin-prod-resource"
    }
  },
  "timestamp": "2023-05-10T03:05:43.317015458Z",
  "severity": "INFO",
  "labels": {
    "networkservices.googleapis.com/operation": "HTTP_REQUEST_HEADERS"
  },
  "logName": "projects/123456789/logs/networkservices.googleapis.com%2Fwasm_plugin_activity",
  "trace": "projects/123456789/traces/effc0311-6716-431b-9e2a-7586835fdff1",
  "receiveTimestamp": "2023-05-10T03:05:44.207265284Z"
}

로깅 제한사항

플러그인은 클라이언트 HTTP 요청당 최대 16KiB의 페이로드 데이터 로깅으로 제한됩니다. 이 금액은 지정된 HTTP 요청과 연결된 여러 로깅 호출에 분배됩니다. 이 한도는 로그 메시지 텍스트에만 적용되며 Service Extensions에서 로그 레코드에 추가한 추가 메타데이터에는 적용되지 않습니다.

예를 들어 on_http_request_headers 콜백이 각각 4KiB 메시지가 있는 로깅 호출을 두 번 실행한 다음 on_http_response_headers 콜백이 동일한 HTTP 요청에 대해 각각 4KiB 메시지가 있는 로깅 호출을 세 번 실행하려고 하면 세 번째 로깅 메시지가 삭제됩니다. 삭제된 플러그인 생성 로그 메시지 수를 기록하기 위해 로그 메시지가 추가됩니다.

부하 분산기 관점에서의 로깅

이 섹션에서는 부하 분산기 관점에서 Service Extensions 로깅을 설명합니다.

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

요청의 타겟인 백엔드 서비스에서 로깅을 사용 설정하여 서비스를 만드는 동안 애플리케이션 부하 분산기 플러그인의 로깅을 사용 설정할 수 있습니다.

타겟 백엔드 서비스에 로깅을 사용 설정하려면 gcloud compute backend-services update 명령어를 사용합니다.

gcloud compute backend-services update BACKEND_SERVICE \
    --enable-logging \
    --logging-sample-rate=RATE \
    --region=REGION \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

다음을 바꿉니다.

  • BACKEND_SERVICE: 백엔드 서비스의 이름입니다.
  • RATE: 0.0부터 1.0까지의 값입니다. 0.0은 요청이 로깅되지 않음을 의미하고 1.0은 요청이 100% 로깅됨을 의미합니다. 기본값은 1.0입니다. 이 설정은 enable-logging 파라미터와 함께 사용하는 경우에만 적용됩니다. enable-logging을 생략하면 로깅이 사용 중지됩니다.
  • REGION: 백엔드의 리전
  • LOGGING_OPTIONAL_MODE: 다음 모드 중 하나에서 선택적 필드의 로깅을 사용 설정합니다.

    • INCLUDE_ALL_OPTIONAL에는 모든 선택적 필드가 포함됩니다.
    • EXCLUDE_ALL_OPTIONAL (기본값)은 모든 선택적 필드를 제외합니다.
    • CUSTOM에는 선택적 필드의 맞춤 목록이 포함됩니다.
  • OPTIONAL_FIELDS: CUSTOM 모드를 선택할 때의 선택적 필드를 쉼표로 구분한 목록

백엔드 서비스에서 로깅을 사용 설정하면 HTTP 또는 HTTPS 요청이 Cloud Logging 로그 요청을 사용하여 로깅됩니다.

로그를 보려면 Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

백엔드 서비스의 메시지 로깅

일반적으로 애플리케이션 부하 분산기 로그 항목에는 HTTP 또는 HTTPS 트래픽을 모니터링하고 디버깅하는 데 유용한 정보가 포함됩니다. 로그 항목은 다음과 같은 유형의 정보를 담고 있습니다.

  • LogEntry 로그에 설명된 대로 심각도, 프로젝트 ID, 프로젝트 번호, 타임스탬프와 같이 대부분의 Google Cloud 로그에 표시되는 정보
  • HttpRequest 로그 필드

HTTP 및 HTTPS 부하 분산기의 요청 로그에는 다음 정보가 포함된 부하 분산기 로그 항목 JSON 페이로드의 service_extension_info 객체가 포함됩니다.

필드 유형 설명
backend_target_name 문자열 확장 프로그램의 백엔드 대상 이름입니다.
backend_target_type 문자열 백엔드 대상의 유형입니다.
chain 문자열 요청과 일치하는 서비스 확장 프로그램 리소스 내 확장 프로그램 체인의 이름입니다.
extension 문자열 확장 프로그램 체인 내 확장 프로그램의 이름입니다.
failed_open 부울 확장 프로그램 구성에 failOpentrue로 설정된 경우 이 측정항목의 값 true은 확장 프로그램이 시간 초과되거나 실패했을 때 처리가 계속되었음을 나타냅니다.

리전 외부 애플리케이션 부하 분산기, 리전 내부 애플리케이션 부하 분산기, 리전 간 내부 애플리케이션 부하 분산기에만 적용됩니다.

grpc_status enum gRPC 스트림의 가장 최근 상태입니다. 자세한 내용은 gRPC 상태 코드를 참고하세요.
per_processing_request_info 배열 gRPC 스트림에서 발생하는 ext_proc 확장 프로그램의 ProcessingRequest 통계 또는 ext_authz 확장 프로그램의 CheckRequest 통계 목록입니다.
per_processing_request_info[].event_type enum ProcessingRequest의 이벤트 유형입니다. REQUEST_HEADERS, REQUEST_BODY, RESPONSE_HEADERS, RESPONSE_BODY 중 하나일 수 있습니다.
per_processing_request_info[].latency 기간 ProcessingRequest 메시지의 첫 번째 바이트가 확장 프로그램으로 전송된 시간부터 ProcessingResponse 메시지의 마지막 바이트가 수신된 시간까지의 기간입니다.
per_processing_request_info[].processing_effect enum 처리 요청의 각 이벤트에 대한 처리 결과입니다.

리전 외부 애플리케이션 부하 분산기, 리전 내부 애플리케이션 부하 분산기, 리전 간 내부 애플리케이션 부하 분산기에만 적용됩니다.

다음 값 중 하나일 수 있습니다.

  • NONE: 콘텐츠가 변경되지 않았음을 나타냅니다.
  • NONE_FAILED_OPEN: 확장 프로그램이 열리지 않아 변이가 실행되지 않았음을 나타냅니다.
  • CONTENT_MODIFIED: 콘텐츠가 성공적으로 적용된 변이 요청에 의해 변경되었음을 나타냅니다.
  • IMMEDIATE_RESPONSE: 확장 프로그램에서 추가 처리를 모두 중지하기 위해 즉각적인 응답을 보냈음을 나타냅니다.
  • MUTATION_REJECTED: 허용되지 않는 변경사항을 하나 이상 요청했으며 추가 처리가 중단되었음을 나타냅니다. 적절한 오류 메시지가 로깅됩니다.
  • UNSPECIFIED: 처리 효과를 알 수 없음을 나타냅니다.
per_processing_request_info[].processing_effect_details 문자열 processing_effectMUTATION_REJECTED인 경우 변형이 거부된 이유에 관한 세부정보입니다.

리전 외부 애플리케이션 부하 분산기, 리전 내부 애플리케이션 부하 분산기, 리전 간 내부 애플리케이션 부하 분산기에만 적용됩니다.

resource 문자열 확장 프로그램 리소스의 이름

모니터링

이 섹션에서는 Cloud Monitoring 대시보드를 사용하여 Service Extensions를 통해 구성된 애플리케이션 부하 분산기 플러그인의 측정항목을 확인하는 방법을 설명합니다. 플러그인 관점 또는 부하 분산기 관점에서 플러그인을 모니터링할 수 있습니다.

플러그인 관점에서 모니터링

이 섹션에서는 플러그인 관점에서 Service Extensions 모니터링을 설명합니다.

Service Extensions 측정항목 유형에 대한 자세한 내용은 Google Cloud 측정항목 페이지를 참고하세요.

Service Extensions의 모니터링 대시보드 보기

Service Extensions의 모니터링 대시보드를 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 서비스 확장 프로그램 페이지로 이동합니다.

    Service Extensions로 이동

  2. 플러그인 탭을 클릭합니다.
  3. 플러그인 이름을 클릭합니다.
  4. 플러그인 세부정보 페이지에서 모니터링 탭을 클릭합니다.
  5. 모니터링 페이지의 측정항목 차트에는 플러그인 성능을 모니터링하는 데 도움이 되는 정보가 표시됩니다.

  6. 플러그인 수명 주기 작업의 측정항목을 보려면 작업 필터 목록에서 값을 선택합니다. 기본적으로 HTTP request headerHTTP response header 값이 선택됩니다.
  7. 특정 플러그인 버전의 측정항목을 보려면 플러그인 버전 필터 목록에서 값을 선택합니다. 기본적으로 모든 버전에 대한 측정항목이 표시됩니다.
  8. 데이터를 볼 기간을 변경하려면 시간 선택기에서 사전 정의된 기간을 선택하거나 맞춤을 클릭하고 시작 및 종료 시간을 정의합니다. 기본적으로 선택기는 1 day로 설정됩니다.

Service Extensions의 플러그인 측정항목

Service Extensions 관점에서 플러그인의 다음 측정항목을 모니터링할 수 있습니다. 이러한 측정항목에는 networkservices.googleapis.com/wasm_plugin/ 프리픽스가 있습니다. 표의 항목에서는 이 프리픽스가 생략되었습니다.

측정항목 유형 표시 이름
종류, 유형, 단위
설명
invocation_count Wasm 플러그인 호출 수
DELTAINT641
선택한 기간 동안 플러그인 호출 수입니다. 각 플러그인 콜백 호출은 별도의 플러그인 호출로 계산됩니다.
invocation_latencies Wasm 플러그인 호출 지연 시간
DELTADISTRIBUTIONus
플러그인의 로컬 실행 시간(밀리초)입니다. 측정항목에는 각 콜백에 대한 라벨로 구분된 항목이 포함됩니다.
cpu/usage_times Wasm 플러그인 정규화된 CPU 사용량
DELTADISTRIBUTIONus{CPU}
플러그인 호출의 CPU 사용 시간(마이크로초)입니다.
memory/bytes_used Wasm 플러그인 메모리 사용량
GAUGEDISTRIBUTIONBy
Wasm 플러그인 VM이 할당한 총 메모리(바이트)입니다.

부하 분산기 관점에서 모니터링

이 섹션에서는 부하 분산기 관점에서 플러그인의 Service Extensions 모니터링을 설명합니다.

Cloud Load Balancing의 모니터링 대시보드 보기

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

다음과 같은 목적으로 모니터링 측정항목을 사용하세요.

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

사전 정의된 대시보드를 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 대시보드 개요 페이지로 이동합니다.

    대시보드 개요로 이동

  2. 카테고리 섹션에서 GCP를 클릭합니다.
    • 모든 부하 분산기의 대시보드 목록을 보려면 GCP 대시보드 목록에서 Google Cloud 부하 분산기라는 대시보드를 클릭합니다. 특정 부하 분산기의 대시보드를 보려면 목록에서 부하 분산기를 찾아 해당 이름을 클릭합니다.
    • 부하 분산기에 대해서만 사전 정의된 대시보드를 보려면 적절한 대시보드를 선택합니다.

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

Cloud Load Balancing의 플러그인 측정항목

Cloud Load Balancing 관점에서 플러그인의 다음 측정항목을 모니터링할 수 있습니다.

미리보기에서는 리전 외부 애플리케이션 부하 분산기, 리전 내부 애플리케이션 부하 분산기, 리전 간 내부 애플리케이션 부하 분산기의 확장 프로그램에 대해 다음 측정항목을 모니터링할 수 있습니다. 이러한 측정항목에는 networkservices.googleapis.com 프리픽스가 있습니다. 다음 표에서는 이 프리픽스가 항목에서 생략되어 있습니다.

다음 표에는 각 측정항목의 측정항목 유형, 표시 이름, 종류, 유형, 단위, 설명이 나와 있습니다.

측정항목 유형 표시 이름
종류, 유형, 단위
설명
extension/invocation_count 확장 프로그램 호출 수
DELTAINT641
확장 프로그램에 전송된 호출 수입니다.
extension/invocation_latencies 확장 프로그램 호출 지연 시간
DELTADISTRIBUTIONms
각 확장 프로그램 호출의 지연 시간에서 계산된 분포입니다.
extension/sent_chunks_count 확장 프로그램 전송 청크 수
DELTAINT641
request_bodyresponse_body 이벤트에만 적용됩니다. 확장 프로그램으로 전송된 데이터 청크 수입니다.
extension/received_chunks_count 확장 프로그램 수신 청크 수
DELTAINT641
request_bodyresponse_body 이벤트에만 적용됩니다. 확장 프로그램에서 수신한 청크 수입니다.
extension/failed_open_count
DELTAINT641로 확장 프로그램 호출이 실패함
시스템이 장애 허용으로 구성되고 요청이 계속 진행되도록 허용된 경우 호출이 실패한 횟수입니다.
extension/mutation_rejections 확장 프로그램 변형 거부 수
DELTAINT641
헤더, 본문 또는 트레일러 변형을 요청했지만 거부된 호출 수입니다. 거부는 변형이 무효이거나 크기 제한을 초과하는 경우와 같은 다양한 이유로 발생할 수 있습니다.
extension/sent_bytes_count 확장 프로그램 전송 바이트 수
DELTAINT64By
확장 프로그램으로 전송된 바이트 수입니다.
extension/received_bytes_count 확장 프로그램 수신 바이트 수
DELTAINT64By
확장 프로그램에서 수신된 바이트 수입니다.

다음 측정항목도 모니터링할 수 있습니다. 이러한 측정항목에는 loadbalancing.googleapis.com/ 프리픽스가 있습니다. 표의 항목에서는 이 프리픽스가 생략되었습니다.

측정항목 유형 표시 이름
종류, 유형, 단위
설명
https/backend_request_count,
https/external/regional/backend_request_count,
https/internal/backend_request_count
백엔드 요청 수
DELTAINT641
애플리케이션 부하 분산기에서 플러그인이 호출된 횟수입니다.
https/backend_request_bytes_count,
https/external/regional/backend_request_bytes_count,
https/internal/backend_request_bytes_count
백엔드 요청 바이트
DELTAINT64By
부하 분산기에서 플러그인으로 전송된 바이트 수입니다.
https/backend_response_bytes_count,
https/external/regional/backend_response_bytes_count,
https/internal/backend_response_bytes_count
백엔드 응답 바이트
DELTAINT64By
부하 분산기가 확장 프로그램 백엔드에서 수신한 바이트 수입니다.

플러그인 측정항목 보기

특정 플러그인의 측정항목을 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 측정항목 탐색기 페이지로 이동합니다.

    측정항목 탐색기로 이동

  2. 측정항목 요소에서 측정항목 선택 메뉴를 확장합니다. 그런 후 다음 작업을 수행합니다.

    1. 리소스 목록에서 적절한 애플리케이션 부하 분산기 규칙을 선택합니다.

    2. 측정항목 카테고리 목록에서 Https를 선택합니다.

    3. 측정항목 목록에서 플러그인 측정항목을 선택합니다.

    4. 적용을 클릭합니다.

  3. 필터 요소에서 다음을 수행합니다.

    1. backend_target_type 라벨을 선택하고 값을 WASM_PLUGIN로 설정합니다.

    2. backend_target_name 라벨을 선택하고 플러그인 이름을 값으로 설정합니다.

부하 분산기 측정항목 유형에 대한 자세한 내용은 Google Cloud 측정항목 페이지의 loadbalancing 섹션을 참고하세요.