Cloud CDN 로깅 및 모니터링

각 Cloud CDN 요청은 Cloud Logging에 로깅됩니다. 로깅 사용 설정 및 중지에 대한 자세한 내용은 HTTP(S) 부하 분산 및 Cloud CDN 로깅 및 모니터링을 참조하세요.

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

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

Console

  1. Google Cloud Console에서 로그 뷰어 페이지로 이동합니다.

    로그 뷰어 페이지로 이동

  2. 모든 로그를 보려면 행의 첫 번째 풀다운 메뉴에서 Cloud HTTP 부하 분산기 > 모든 전달 규칙을 선택합니다.

  3. 특정 전달 규칙의 로그를 보려면 목록에서 해당 전달 규칙 이름을 선택합니다.

  4. 전달 규칙에서 사용되는 URL 맵 한 개에 대한 로그만 보려면 Cloud HTTP 부하 분산기를 선택하고 원하는 전달 규칙과 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"
}

로깅되는 내용

HTTP(S) 부하 분산 및 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

부울 형식의 로그 필드는 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은 HTTP(S) 부하 분산을 사용하여 모니터링 데이터를 Cloud Monitoring으로 내보냅니다. 모니터링은 Cloud CDN 배포의 상태를 모니터링하는 데 사용됩니다.

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

Cloud CDN 예시 쿼리 모니터링

Monitoring을 사용하면 커스텀 대시보드를 생성할 수 있습니다. 대시보드는 외부 HTTP(S) 부하 분산기에 모든 모니터링 측정항목을 사용할 수 있습니다. 다음은 커스텀 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를 참조하세요.