Solução de problemas
Visão geral
Entender como solucionar problemas usando o CloudFront ajuda os operadores e SREs a corrigir rapidamente os erros que podem ocorrer em diferentes partes da aplicação Web: no CloudFront, em funções de borda ou na origem. Alguns desses erros incluem: uma origem sobrecarregada que retorna erros 5xx, o CloudFront não consegue se conectar à origem ou falha na execução do Lambda@Edge após uma exceção não tratada no seu código.
Rastrear solicitações de usuários até a origem
O CloudFront gera um ID de solicitação exclusivo para cada solicitação processada. É recomendável rastrear a solicitação usando seu ID à medida que ela flui pela pilha de aplicações:
- O CloudFront adiciona um cabeçalho x-amz-cf-id, que contém o ID da solicitação, quando retorna a resposta a uma solicitação HTTP.
- O CloudFront inclui o ID da solicitação no campo x-edge-request-id do registro de log gerado para a solicitação em logs de acesso. Se uma WebACL do AWS WAF estiver anexada à distribuição do CloudFront, o WAF incluirá o ID da solicitação no campo requestId do registro de log gerado para a solicitação em logs do WAF. Por exemplo, a OLX criou um bot de chat que pode ser usado por seus engenheiros de suporte ao cliente no Slack para consultar uma solicitação específica por meio do seu ID de solicitação nos logs do WAF para entender por que eles foram bloqueados e, em seguida, responder mais rápido aos tíquetes dos clientes diariamente.
- Se uma função de borda estiver configurada na distribuição do CloudFront, o ID da solicitação será disponibilizado para essa função no campo requestId no objeto do evento, tanto para o CloudFront Functions quanto para o Lambda@Edge.
- Em caso de perda de caches, quando o CloudFront encaminha a solicitação para a origem, ele anexa o cabeçalho x-amz-cf-id à solicitação, com o valor do ID da solicitação. É recomendável registrar esse cabeçalho nos seus servidores de origem.
Solução de erros usando o CloudFront
Quando seus sistemas de monitoramento (por exemplo, alarmes do CloudWatch) detectam um aumento nas respostas com erros 4xx ou 5xx, você precisa se aprofundar no tipo de erro e onde ele está ocorrendo para corrigi-lo.
Para fazer isso, filtre os registros de acesso do CloudFront nos registros que resultam em um código de erro e verifique os campos de log x-edge-result-type, x-edge-response-result-type e x-edge-detailed-result-type para entender melhor o problema. A análise dos logs de acesso depende de onde você os armazena. Uma abordagem muito simples é consultar os logs armazenados no S3 usando o Athena com consultas SQL padrão. Como exemplo, a consulta SQL a seguir filtra os logs de erros 5xx em um intervalo de datas específico, limitado aos primeiros 100 registros.
SELECT * AS count FROM cloudfront_logs
WHERE status >= 500 AND "date" BETWEEN DATE '2022-06-09' AND DATE '2022-06-10'
LIMIT 100;
Em certos casos, considere os logs do WAF ou do CloudFront para obter informações adicionais de solução de problemas. Por exemplo, os logs do AWS WAF podem explicar por que uma determinada solicitação foi bloqueada. Outro exemplo é verificar os logs de funções de borda no CloudWatch Logs para entender um erro de execução que resultou em um 5xx. Por fim, é recomendável entender como o CloudFront armazena erros em cache para saber quando uma resposta de erro é retornada do cache do CloudFront ou não.
Solução de problemas de latência usando o CloudFront
Quando seus sistemas de monitoramento (por exemplo, alarmes do CloudWatch em métricas de Latência do origem e Taxa de acertos de cache) detectam um aumento nas latências de resposta, você precisa entender onde está o gargalo de latência para corrigi-lo. Para isso, considere analisar campos de latência nos logs de acesso do CloudFront. Considere os seguintes campos:
- time-to-first-byte: latência de primeiro byte entre o CloudFront e o visualizador, disponível em logs padrão e logs em tempo real
- time-taken: latência de último byte entre o CloudFront e o visualizador, disponível em logs padrão e logs em tempo real
- origin-fbl: latência de primeiro byte entre o CloudFront e sua origem, disponível em logs em tempo real
- origin-lbl: latência de último byte entre o CloudFront e sua origem, disponível em logs em tempo real
Você pode analisar esses campos agrupando a consulta SQL em uma das dimensões relevantes, como URL ou país. Isso ajuda a identificar o problema de latência. Além disso, você pode encontrar as mesmas informações no lado do cliente usando cabeçalhos de temporização do servidor do CloudFront, quando configurados na política de cabeçalho de resposta. O cabeçalho de temporização do servidor abaixo explica que minha solicitação foi uma falha de cache no pop MRS52-P1 em Marselha, com uma latência de primeiro byte downstream de 64 milissegundos. Observe o cabeçalho Age gerado pelo CloudFront para explicar que esse conteúdo foi buscado ou atualizado da origem desde 61 segundos.
Solução de problemas de performance da Web usando o CloudWatch RUM
O CloudWatch RUM permite monitorar a aplicação no lado do cliente, integrando uma etiqueta javascript às páginas da Web. O javascript coleta dados das APIs do navegador, como tempos de carregamento da página com detalhamento nas etapas de conexão (pesquisa de DNS, conexão TCP etc.) ou Google Core Web Vitals (LCP, FID etc.) e os envia ao CloudWatch RUM para a geração de painéis. Você pode analisar a performance da sua aplicação filtrando por dimensões específicas, como o tipo de navegador, o país do usuário ou um ID de página específico.
Solicitar assistência do AWS Support
Em cenários em que você precisa da ajuda do AWS Support para solucionar problemas adicionais de erros ou latências, abra um tíquete de suporte que inclua uma lista de IDs de solicitação do CloudFront que correspondem a solicitações lentas ou solicitações que resultam em erros. Com esses IDs de solicitação fornecidos, os engenheiros de suporte podem analisar os logs internos para entender melhor o problema e fornecer recomendações sobre como corrigi-lo.
Recursos
- Documentação: Solucione problemas comuns que você pode encontrar ao configurar o Amazon CloudFront para distribuir seu conteúdo
- Blog: Quatro etapas para depurar sua entrega de conteúdo na AWS. Observe que, embora esse blog esteja desatualizado, a metodologia ainda é válida.
- Documentação: como solucionar problemas e reduzir o aumento da latência do CloudFront?
- Instruções de uso: artigos sobre solução de problemas do CloudFront pelo AWS Support
- Instruções de uso: artigos sobre solução de problemas do AWS WAF pelo AWS Support
- AWS re:Invent 2021 - Otimizar aplicações por meio de insights do usuário final com o Amazon CloudWatch RUM
- Blog: análise de logs do AWS WAF no Amazon CloudWatch Logs
- Documentação: testar e depurar funções do Lambda@Edge
- Blog: configurar o rastreamento ponta a ponta com o Amazon CloudFront usando o OpenTelemetry