캐싱 로그 및 측정항목

각 Cloud CDN 요청은 Cloud Logging에 로깅됩니다. 로깅 사용 설정 및 중지에 대한 자세한 내용은 외부 애플리케이션 부하 분산기와 Cloud CDN 로깅 및 모니터링 개요를 참조하세요.

Cloud CDN의 로그는 Cloud CDN 백엔드가 연결된 외부 애플리케이션 부하 분산기와 연결됩니다. Cloud CDN 로그는 먼저 전달 규칙URL 맵 순으로 색인을 생성합니다.

Cloud CDN 로그를 보려면 다음 단계를 따르세요.

콘솔

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

    로그 탐색기로 이동

  2. 리소스 메뉴에서 Cloud HTTP 부하 분산기를 선택합니다.
  3. 다음과 같이 로그를 확인합니다.
    • 모든 로그 보기: 리소스 메뉴를 선택한 후 모든 전달 규칙을 선택합니다.
    • 전달 규칙 로그 보기: 전달 규칙 목록에서 전달 규칙 이름을 선택합니다.
    • 전달 규칙에서 사용하는 URL 맵의 로그 보기: 전달 규칙을 선택한 후 URL 맵을 선택합니다.

백엔드에서 제공한 요청

요청이 Cloud CDN이 사용 설정된 백엔드에서 제공되는지 확인하려면 다음 3가지 기본 필드를 찾아야 합니다.

  • httpRequest: 백엔드에서 요청을 제공하면 캐시가 채워지고 요청 URL을 확인할 수 있습니다.
    • cacheFillBytes: NUMBER_OF_BYTES
    • cacheLookup: True
    • requestURL: URL
  • jsonPayload: statusDetails 필드에서 응답이 백엔드에서 제공되었는지 확인할 수 있습니다.
    • statusDetails: "response_sent_by_backend"

캐시에서 제공한 요청

다음 로그 항목은 캐시 적중을 보여줍니다.

 {
    insertId: "1oek5rg3l3fxj7"
    jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        cacheId: "SFO-fbae48ad"
        statusDetails: "response_from_cache"
    }
    httpRequest: {
        requestMethod: "GET"
        requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/static/us/three-cats.jpg"
        requestSize: "577"
        status: 304
        responseSize: "157"
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
        remoteIp: "CLIENT_IP_ADDRESS"
        cacheHit: true
        cacheLookup: true
    }
    resource: {
        type: "http_load_balancer"
        labels: {
            zone: "global"
            url_map_name: "URL_MAP_NAME"
            forwarding_rule_name: "FORWARDING_RULE_NAME"
            target_proxy_name: "TARGET_PROXY_NAME"
            backend_service_name: ""
            project_id: "PROJECT_ID"
        }
    }
    timestamp: "2020-06-08T23:41:30.078651Z"
    severity: "INFO"
    logName: "projects/PROJECT_ID/logs/requests"
    trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992"
    receiveTimestamp: "2020-06-08T23:41:30.588272510Z"
    spanId: "7b6537d3672e08e1"
}

로깅되는 내용

외부 애플리케이션 부하 분산기 및 Cloud CDN 로그에는 심각도, 프로젝트 ID, 프로젝트 번호, 타임스탬프와 같이 대부분의 로그에 포함된 일반 정보 외에도 다음이 포함됩니다.

  • HTTP 상태 코드, 반환된 바이트, 캐시 조회 또는 캐시 채우기 수행 여부를 캡처하는 HttpRequest 로그 필드.

  • 캐시 응답이 제공되는 위치와 캐시 인스턴스를 나타내는 jsonPayload.cacheId 필드. 예를 들어 암스테르담의 캐시에서 제공하는 캐시 응답의 cacheId 값은 AMS-85e2bd4b입니다. 여기서 AMSIATA 코드이고 85e2bd4b는 캐시 인스턴스의 불투명 식별자입니다(일부 Cloud CDN 위치에는 개별 캐시가 여러 개 있기 때문).

  • jsonPayloadstatusDetailscacheDetail 필드.

다음 필드를 필터링하여 Cloud CDN에서 제공하는 요청의 캐시 적중, 부적중, 재확인 상태를 확인할 수 있습니다.

  • 캐시 적중

    jsonPayload.statusDetails=("response_from_cache" OR "byte_range_caching")

    또는

    httpRequest.cacheHit=true
    httpRequest.cacheValidatedWithOriginServer!=true

  • 원본 서버를 통해 검증된 캐시 적중

    jsonPayload.statusDetails="response_from_cache_validated"

    또는

    httpRequest.cacheHit=true
    httpRequest.cacheValidatedWithOriginServer=true

  • 캐시 부적중

    jsonPayload.statusDetails="response_sent_by_backend"

    또는

    httpRequest.cacheHit!=true
    httpRequest.cacheLookup=true

또는 cdn_cache_status커스텀 응답 헤더를 구성하여 클라이언트 측에서 캐시 상태를 관찰할 수 있습니다.

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

이러한 필드에는 UTF-8 인코딩이 적용됩니다. UTF-8 문자를 제외하고는 모두 물음표로 대체됩니다.

Cloud CDN에서 유효성 검사 요청이나 바이트 범위 요청을 시작하여 클라이언트 요청을 제공하면 클라이언트 요청의 Cloud Logging 로그 항목에서 serverIp 필드를 생략합니다. 이는 Cloud CDN이 단일 클라이언트 요청에 대한 응답으로 여러 서버 IP 주소에 요청을 보낼 수 있기 때문입니다.

Cloud CDN에서 시작된 각 요청으로 인해 Cloud Logging 로그 항목이 생성됩니다. 그 결과로 생성되는 로그 항목에는 jsonPayload 내부에 parentInsertId 필드가 포함됩니다. 이 필드를 사용하면 Cloud CDN에서 유효성 검사 요청 또는 바이트 범위 요청을 시작한 단일 클라이언트 요청의 로그 항목 insertId를 식별 할 수 있습니다. 또한 로그 항목은 Cloud CDN을 사용자 에이전트로 식별합니다.

Cloud CDN 모니터링

Cloud CDN은 모니터링 데이터를 Cloud Monitoring으로 내보냅니다. 모니터링은 Cloud CDN 배포의 상태를 모니터링하는 데 사용됩니다.

Cloud Monitoring은 GitHub에서 JSON 파일로 monitoring-dashboard-samples 저장소에 사용 가능한 대시보드 정의 집합을 제공합니다. 네트워킹 파일에는 cloud-cdn-monitoring.json이라는 Cloud CDN 전용 대시보드가 있습니다. 샘플 대시보드 설치의 안내에 따라 이 커스텀 대시보드를 Monitoring에 업로드합니다.

Cloud CDN 예시 쿼리 모니터링

Monitoring을 사용하면 커스텀 대시보드를 생성할 수 있습니다. 대시보드에서 외부 애플리케이션 부하 분산기의 모니터링 측정항목을 사용할 수 있습니다. 다음은 커스텀 Monitoring 대시보드에 붙여넣을 수 있는 몇 가지 MQL 스니펫 예시입니다.

캐시 결과를 기준으로 분류된 요청 바이트 수

이 쿼리는 filter (metric.cache_result != 'DISABLED')를 포함하여 Cloud CDN이 사용 설정된 백엔드에 중점을 둡니다.

fetch https_lb_rule
| metric 'loadbalancing.googleapis.com/https/response_bytes_count'
| filter (metric.cache_result != 'DISABLED')
| align rate(1m)
| every 1m
| group_by [metric.cache_result],
    [value_response_bytes_count_aggregate:
       aggregate(value.response_bytes_count)]

특정 백엔드 대상의 클라이언트 왕복 TCP 지연 시간 95%

이 쿼리에는 백엔드 example-backend로 트래픽을 좁히는 filter (resource.backend_target_name = 'example-backend')가 포함됩니다. 백엔드는 Cloud Storage 버킷, Compute Engine VM 그룹 또는 외부 백엔드일 수 있습니다.

fetch https_lb_rule
| metric 'loadbalancing.googleapis.com/https/frontend_tcp_rtt'
| filter (resource.backend_target_name = 'example-backend')
| group_by 1m,
    [value_frontend_tcp_rtt_aggregate: aggregate(value.frontend_tcp_rtt)]
| every 1m
| group_by [metric.proxy_continent],
    [value_frontend_tcp_rtt_aggregate_percentile:
       percentile(value_frontend_tcp_rtt_aggregate, 95)]

Cloud CDN이 사용 설정된 백엔드에 대한 응답 코드 클래스별로 분류된 요청 수

이 쿼리는 응답 코드 클래스(2xx, 3xx, 4xx, 5xx)별로 트래픽을 분류하여 클라이언트 성공, 클라이언트 오류, 서버 오류를 분리합니다.

fetch https_lb_rule
| metric 'loadbalancing.googleapis.com/https/request_count'
| filter (metric.cache_result != 'DISABLED')
| group_by 1h, [row_count: row_count()]
| every 1h
| group_by [metric.response_code_class],
    [row_count_aggregate: aggregate(row_count)]

출시 국가를 기준으로 분류된 요청 수

이 쿼리는 클라이언트 IP 주소를 사용하여 결정된 출신 국가별로 분류된 트래픽을 보여줍니다.

fetch https_lb_rule
| metric 'loadbalancing.googleapis.com/https/request_count'
| align rate(1m)
| every 1m
| group_by [metric.client_country], [value_request_count_aggregate: aggregate(value.request_count)]

다음 단계

  • BigQuery, Pub/Sub 또는 Cloud Storage로 로그를 내보내는 방법과 모니터링 및 알림에 사용되는 로그 기반 측정항목을 구성하는 방법을 비롯한 로깅 방법에 대한 자세한 내용은 Cloud Logging 문서를 참조하세요.

  • httpRequest 로그 항목에 포함된 필드에 대한 자세한 내용은 HttpRequest를 참조하세요.