Registros e métricas para armazenamento em cache

Cada solicitação do Cloud CDN é registrada no Cloud Logging. Para informações sobre como ativar e desativar a geração de registros, consulte a Visão geral do balanceador de carga de aplicativo externo e a visão geral de geração de registros e monitoramento do Cloud CDN.

Os registros do Cloud CDN estão associados ao balanceador de carga de aplicativo externo ao qual seus back-ends do Cloud CDN estão anexados. Os registros do Cloud CDN são indexados primeiro pela regra de encaminhamento e, depois, pelo mapa de URL.

Para visualizar os registros do Cloud CDN, siga estas etapas.

Console

  1. No console do Google Cloud, acesse a página do Explorador de registros.

    Acessar o Explorador de registros

  2. No menu Recurso, selecione Balanceador de carga de HTTP do Cloud.
  3. Para acessar os registros, faça o seguinte:
    • Acessar todos os registros: selecione o menu Recurso e clique em Todas as regras de encaminhamento.
    • Acessar os registros de uma regra de encaminhamento: selecione o nome da regra de encaminhamento na lista de regras de encaminhamento.
    • Acessar os registros de um mapa de URL que é usado por uma regra de encaminhamento: selecione uma regra de encaminhamento e clique em um mapa de URL.

Solicitação veiculada a partir do back-end

Para confirmar se uma solicitação é veiculada a partir de um back-end ativado pelo Cloud CDN, existem três campos principais a serem procurados, da seguinte maneira:

  • httpRequest: quando uma solicitação é veiculada a partir de um back-end, é possível ver que o cache foi preenchido e confirmar o URL da solicitação.
    • cacheFillBytes: NUMBER_OF_BYTES
    • cacheLookup: True
    • requestURL: URL
  • jsonPayload: no campo statusDetails, é possível confirmar que a resposta foi veiculada pelo back-end.
    • statusDetails: "response_sent_by_backend"

Solicitação veiculada a partir do cache

A entrada de registro a seguir mostra uma ocorrência em cache.

 {
    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"
}

O que é registrado

Além das informações gerais contidas na maioria dos registros, como gravidade, ID e número do projeto e carimbo de data/hora, os registros do balanceador de carga de aplicativo externo e do Cloud CDN contêm o seguinte:

  • O campo de registro HttpRequest, que captura o código de status HTTP, os bytes retornados e se uma pesquisa ou um preenchimento de cache foi realizado.

  • O campo jsonPayload.cacheId, que indica o local e a instância de cache em que a resposta de cache foi veiculada. Por exemplo, uma resposta de cache exibida a partir de um cache em Amsterdã teria um valor cacheId de AMS-85e2bd4b, em que AMS é o código IATA (em inglês) e 85e2bd4b é um identificador opaco da instância de cache, porque alguns locais do Cloud CDN têm vários caches distintos.

  • Os campos statusDetails e cacheDetail do jsonPayload.

É possível filtrar os campos a seguir para determinar a ocorrência em cache, o status de ausência ou a revalidação de uma solicitação veiculada pelo Cloud CDN:

  • Ocorrência em cache

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

    ou

    httpRequest.cacheHit=true
    httpRequest.cacheValidatedWithOriginServer!=true

  • Ocorrência em cache validada com o servidor de origem

    jsonPayload.statusDetails="response_from_cache_validated"

    ou

    httpRequest.cacheHit=true
    httpRequest.cacheValidatedWithOriginServer=true

  • Ausência no cache

    jsonPayload.statusDetails="response_sent_by_backend"

    ou

    httpRequest.cacheHit!=true
    httpRequest.cacheLookup=true

Como alternativa, é possível observar o status do cache do lado do cliente configurando um cabeçalho de resposta personalizado com cdn_cache_status.

Os campos de registro do tipo booleano normalmente só aparecem se tiverem um valor true. Se um campo booleano tem um valor false, esse campo é omitido do registro.

A codificação UTF-8 é obrigatória nesses campos. Os caracteres que não forem UTF-8 serão substituídos por pontos de interrogação.

Quando o Cloud CDN exibe uma solicitação de cliente iniciando solicitações de validação ou de intervalo de bytes, ele omite o campo serverIp da entrada de registro do Cloud Logging para a solicitação do cliente. Isso ocorre porque o Cloud CDN pode enviar solicitações para endereços IP de vários servidores em reação a apenas uma solicitação do cliente.

Cada solicitação iniciada pelo Cloud CDN cria uma entrada de registro do Cloud Logging. A entrada de registro resultante contém um campo parentInsertId dentro do jsonPayload. Esse campo pode ser usado para identificar o insertId da entrada de registro na solicitação de cliente único que pediu que o Cloud CDN inicie a solicitação de validação ou de intervalo de bytes. Além disso, a entrada de registro identifica o Cloud CDN como o user agent.

Monitoring para Cloud CDN

O Cloud CDN exporta dados de monitoramento para o Cloud Monitoring. O Monitoring é usado para monitorar a integridade de uma implantação do Cloud CDN.

No Cloud Monitoring, há um conjunto de definições de painel disponíveis no GitHub no repositório monitoring-dashboard-samples (em inglês) como arquivos JSON. No arquivo de rede, há um painel específico do Cloud CDN chamado cloud-cdn-monitoring.json. Faça o upload deste painel personalizado para o Monitoring seguindo as instruções em Como instalar painéis de amostra.

Exemplos de consultas do Monitoring para Cloud CDN

O Monitoring permite criar painéis personalizados. Os painéis podem usar qualquer uma das métricas de monitoramento para balanceadores de carga de aplicativos externos. Veja a seguir alguns exemplos de snippets MQL que você pode colar em painéis personalizados do Monitoring.

Contagem de bytes da solicitação dividida por resultado de cache

Essa consulta se concentra em back-ends que têm o Cloud CDN ativado, o que é feito incluindo filter (metric.cache_result != 'DISABLED').

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)]

Latência de TCP de ida e volta do cliente em 95% para um destino de back-end específico

Essa consulta inclui filter (resource.backend_target_name = 'example-backend'), que restringe o tráfego ao example-backend de back-end. Um back-end pode ser um bucket do Cloud Storage, um grupo de VMs do Compute Engine ou um back-end externo.

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)]

Contagem de solicitações dividida por classe de código de resposta para back-ends ativados para o Cloud CDN

Essa consulta divide o tráfego por classe de código de resposta (2xx, 3xx, 4xx, 5xx) para ajudar a separar sucessos de clientes, erros de clientes e erros de servidor.

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)]

Contagem de solicitações dividida por país de origem

Nessa consulta, o tráfego é detalhado por país de origem, que é determinado com endereços IP de cliente.

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)]

A seguir

  • Para saber mais sobre registros, incluindo como exportar registros para o BigQuery, Pub/Sub ou Cloud Storage e como configurar métricas com base em registros para monitoramento e recebimento de alertas, consulte a Documentação do Cloud Logging.

  • Para saber mais sobre os campos incluídos na entrada de registro httpRequest, consulte HttpRequest.