View a markdown version of this page

Usando CloudWatch para monitorar e registrar dados da API GraphQL - AWS AppSync GraphQL

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando CloudWatch para monitorar e registrar dados da API GraphQL

Você pode registrar e depurar sua API do GraphQL usando CloudWatch métricas e CloudWatch registros. Essas ferramentas permitem que os desenvolvedores monitorem o desempenho, solucionem problemas e otimizem suas operações do GraphQL de forma eficaz.

CloudWatch metrics é uma ferramenta que fornece uma ampla variedade de métricas para monitorar o desempenho e o uso da API. Essas métricas são classificadas em categorias principais:

  1. Métricas gerais de API: incluem 4XXError e 5XXError para rastrear erros do cliente e do servidor, Latency para medir os tempos de resposta, Requests para monitorar o total de chamadas de API e TokensConsumed para rastrear o uso de recursos.

  2. Real-time Métricas de assinatura: essas métricas se concentram em WebSocket conexões e atividades de assinatura. Elas incluem métricas para solicitações de conexão, conexões bem-sucedidas, registros de assinaturas, publicação de mensagens e conexões e assinaturas ativas.

O guia também apresenta as métricas aprimoradas, que oferecem dados mais granulares sobre desempenho do resolvedor, interações com fontes de dados e operações individuais do GraphQL. Essas métricas fornecem insights mais profundos, mas têm custos adicionais.

CloudWatch O Logs é uma ferramenta que permite recursos de registro para suas APIs do GraphQL. Os logs podem ser definidos em dois níveis da API:

  1. Request-level Registros: eles capturam informações gerais da solicitação, incluindo cabeçalhos HTTP, consultas do GraphQL, resumos de operações e registros de assinaturas.

  2. Field-level Registros: fornecem informações detalhadas sobre resoluções de campo individuais, incluindo mapeamentos de solicitação e resposta e informações de rastreamento para cada campo.

Você pode configurar o registro, interpretar entradas de registro e usar dados de registro para solução de problemas e otimização. AWS AppSync fornece vários tipos de log que revelam os dados de execução, análise, validação e resolução de campo de sua consulta.

Definição e configuração

Para ativar o registro automático em uma API do GraphQL, use o AWS AppSync console.

  1. Faça login no Console de gerenciamento da AWS e abra o AppSync console.

  2. Na página APIs, escolha o nome de uma API GraphQL.

  3. Na página inicial da sua API, no painel de navegação, selecione Configurações.

  4. Em Registro em log, faça o seguinte:

    1. Ative a opção Ativar logs.

    2. Para obter um registro em log detalhado no nível da solicitação, marque a caixa de seleção em Incluir conteúdo detalhado. (opcional)

    3. Em Nível de log do resolvedor de campo, escolha o nível de registro em log no nível do campo preferido (Nenhum, Erro, Informações, Depuração ou Todos). (opcional)

    4. Em Criar ou usar uma função existente, escolha Nova função para criar uma nova AWS Identity and Access Management (IAM) que AWS AppSync permita gravar registros CloudWatch. Você também pode selecionar Perfil existente para selecionar o nome do recurso da Amazon (ARN) de um perfil do IAM existente em sua conta da AWS .

  5. Selecione Salvar.

Configuração de perfil do IAM manual

Se você optar por usar uma função existente do IAM, a função deverá conceder AWS AppSync as permissões necessárias para gravar registros CloudWatch. Para configurar isso manualmente, você deve fornecer um ARN de função de serviço para que ele AWS AppSync possa assumir a função ao gravar os registros.

No console do IAM, crie uma nova política com o nome AWSAppSyncPushToCloudWatchLogsPolicy que tenha a seguinte definição:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Em seguida, crie uma nova função com o nome AWSAppSyncPushToCloudWatchLogsRole e anexe a política recém-criada à função. Edite a relação de confiança desse perfil da seguinte forma:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Copie o ARN da função e use-o ao configurar o registro para uma API do AWS AppSync GraphQL.

CloudWatch métricas

Você pode usar CloudWatch métricas para monitorar e fornecer alertas sobre eventos específicos que podem resultar em códigos de status HTTP ou latência. As seguintes métricas são emitidas:

4XXError

Erros resultantes de solicitações que não são válidas devido a uma configuração incorreta do cliente. Normalmente, esses erros acontecem em qualquer lugar fora do processamento do GraphQL. Por exemplo, esses erros podem ocorrer quando a solicitação inclui uma carga JSON incorreta ou uma consulta incorreta, quando o serviço passa por controle de utilização ou quando as configurações de autenticação estão definidas incorretamente.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências desses erros.

5XXError

Erros encontrados durante a execução de uma consulta do GraphQL. Por exemplo, isso pode ocorrer ao invocar uma consulta para um esquema vazio ou incorreto. Também pode ocorrer quando o ID ou a AWS região do grupo de usuários do Amazon Cognito não são válidos. Como alternativa, isso também pode acontecer se houver AWS AppSync um problema durante o processamento de uma solicitação.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências desses erros.

Latency

O tempo entre o momento em que AWS AppSync recebe uma solicitação de um cliente e o momento em que ela retorna uma resposta ao cliente. Isso não inclui a latência da rede encontrada para que uma resposta alcance os dispositivos finais.

Unidade: milissegundo. Use a estatística Média para avaliar as latências esperadas.

Requests

O número de solicitações (consultas + mutações) que todas as APIs da sua conta processaram, por região.

Unidade: Contagem. O número de todas as solicitações processadas em uma região específica.

TokensConsumed

Os tokens são alocados para Requests com base na quantidade de recursos (tempo de processamento e memória usada) que uma Request consome. Normalmente, cada Request consome um token. No entanto, tokens adicionais são alocados a uma Request que consome grandes quantidades de recursos, conforme necessário.

Unidade: Contagem. O número de todos os tokens alocados em uma região específica.

NetworkBandwidthOutAllowanceExceeded
nota

No AWS AppSync console, na página de configurações do cache, a opção Métricas de integridade do cache permite que você ative essa métrica de integridade relacionada ao cache.

Os pacotes de rede foram descartados porque o throughput excedeu o limite de largura de banda agregada. Isso é útil para diagnosticar gargalos em uma configuração de cache. Os dados são registrados para uma API em particular especificando o API_Id na métrica appsyncCacheNetworkBandwidthOutAllowanceExceeded.

Unidade: Contagem. O número de pacotes descartados após exceder o limite de largura de banda de uma API especificada pelo ID.

EngineCPUUtilization
nota

No AWS AppSync console, na página de configurações do cache, a opção Métricas de integridade do cache permite que você ative essa métrica de integridade relacionada ao cache.

A utilização da CPU (porcentagem) alocada para o processo do Redis OSS. Isso é útil para diagnosticar gargalos em uma configuração de cache. Os dados são registrados para uma API em particular especificando o API_Id na métrica appsyncCacheEngineCPUUtilization.

Unidade: porcentagem. A porcentagem de CPU atualmente em uso pelo processo do Redis OSS para uma API especificada por ID.

Real-time assinaturas

Todas as métricas são emitidas em uma dimensão: GraphQLAPIId. Isso significa que todas as métricas são acopladas com IDs de API do GraphQL. As métricas a seguir estão relacionadas às assinaturas do GraphQL em vez de puras: WebSockets

nota

Essa dimensão se aplica somente às APIs do AWS AppSync GraphQL. AWS AppSync também oferece APIs de eventos, um tipo de API separado cujas métricas são emitidas em uma dimensão diferente (EventApiid). Para acessar mais informações, consulte Métricas do CloudWatch.

ConnectRequests

O número de solicitações de WebSocket conexão feitas para AWS AppSync, incluindo tentativas bem-sucedidas e malsucedidas.

Unidade: Contagem. Use a estatística de soma para mostrar o número total de solicitações de conexão.

ConnectSuccess

O número de WebSocket conexões bem-sucedidas com AWS AppSync. É possível ter conexões sem assinaturas.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências das conexões bem-sucedidas.

ConnectClientError

O número de WebSocket conexões que foram rejeitadas por AWS AppSync causa de erros do lado do cliente. Isso pode significar que o serviço está passando por controle de utilização ou que as configurações de autorização estão incorretas.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências dos erros de conexão no lado do cliente.

ConnectServerError

O número de erros originados AWS AppSync durante o processamento de conexões. Isso geralmente acontece quando ocorre um problema inesperado no lado do servidor.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências dos erros de conexão no lado do servidor.

DisconnectSuccess

O número de WebSocket desconexões bem-sucedidas de AWS AppSync.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências das desconexões bem-sucedidas.

DisconnectClientError

O número de erros do cliente que se originaram AWS AppSync ao desconectar WebSocket as conexões.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de desconexão.

DisconnectServerError

O número de erros do servidor que se originaram AWS AppSync ao desconectar WebSocket as conexões.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de desconexão.

SubscribeSuccess

O número de assinaturas que foram registradas com sucesso por meio de AWS AppSync . WebSocket É possível ter conexões sem assinaturas, mas não é possível ter assinaturas sem conexões.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de assinaturas bem-sucedidas.

SubscribeClientError

O número de assinaturas que foram rejeitadas por AWS AppSync causa de erros do lado do cliente. Isso pode ocorrer quando uma carga JSON está incorreta, o serviço é limitado ou as configurações de autorização estão incorretas.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de assinatura no lado do cliente.

SubscribeServerError

O número de erros originados AWS AppSync durante o processamento de assinaturas. Isso geralmente acontece quando ocorre um problema inesperado no lado do servidor.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de assinatura no lado do servidor.

UnsubscribeSuccess

O número de solicitações de cancelamento da assinatura que foram processadas com êxito.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências das solicitações de cancelamento de assinatura bem-sucedidas.

UnsubscribeClientError

O número de solicitações de cancelamento de assinatura que foram rejeitadas por AWS AppSync causa de erros do lado do cliente.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de solicitação de cancelamento de assinatura no lado do cliente.

UnsubscribeServerError

O número de erros originados AWS AppSync durante o processamento de solicitações de cancelamento de assinatura. Isso geralmente acontece quando ocorre um problema inesperado no lado do servidor.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de solicitação de cancelamento de assinatura no lado do servidor.

PublishDataMessageSuccess

O número de mensagens de evento de assinatura que foram publicadas com êxito.

Unidade: Contagem. Use a estatística Soma para obter o total das mensagens de evento de assinatura publicadas com êxito.

PublishDataMessageClientError

O número de mensagens de evento de assinatura que apresentaram falha na publicação devido a erros no lado do cliente.

Unit: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de eventos de publicação de assinatura no lado do cliente.

PublishDataMessageServerError

O número de erros originados AWS AppSync ao publicar mensagens de eventos de assinatura. Isso geralmente acontece quando ocorre um problema inesperado no lado do servidor.

Unidade: Contagem. Use a estatística Soma para obter o total de ocorrências de erros de eventos de publicação de assinatura no lado do servidor.

PublishDataMessageSize

O tamanho das mensagens de evento de assinatura publicadas.

Unidade: Bytes.

ActiveConnections

O número de WebSocket conexões simultâneas de clientes para AWS AppSync em 1 minuto.

Unidade: Contagem. Use a estatística Soma para obter o total de conexões abertas.

ActiveSubscriptions

O número de assinaturas simultâneas de clientes em um minuto.

Unidade: Contagem. Use a estatística Soma para obter o total de assinaturas ativas.

ConnectionDuration

A quantidade de tempo em que a conexão permanece aberta.

Unidade: Milissegundos. Use a estatística Média para avaliar a duração da conexão.

OutboundMessages

O número de mensagens medidas publicadas com sucesso. Uma mensagem medida equivale a 5 kB de dados entregues.

Unidade: Contagem. Use a estatística de soma para mostrar o número total de mensagens medidas publicadas.

InboundMessageSuccess

O número de mensagens de entrada processadas com êxito. Cada tipo de assinatura invocado por uma mutação gera uma mensagem de entrada.

Unidade: Contagem. Use a estatística de soma para mostrar o número total de mensagens de entrada processadas.

InboundMessageError

O número de mensagens de entrada que falharam no processamento devido a solicitações de API inválidas, como exceder o limite de tamanho da carga útil da assinatura de 240 kB.

Unidade: Contagem. Use a estatística Sum para obter o número total de mensagens recebidas com falhas de API-related processamento.

InboundMessageFailure

O número de mensagens recebidas que falharam no processamento devido a erros do AWS AppSync.

Unidade: Contagem. Use a estatística Sum para obter o número total de mensagens recebidas com falhas de processamento AWS AppSync relacionadas.

InboundMessageDelayed

O número de mensagens de entrada atrasadas. As mensagens de entrada podem ser atrasadas quando a cota da taxa de mensagens de entrada ou a cota da taxa de mensagens de saída é violada.

Unidade: Contagem. Use a estatística Sum para obter o número total de mensagens de entrada que atrasaram.

InboundMessageDropped

O número de mensagens de entrada descartadas. As mensagens de entrada podem ser descartadas quando a cota da taxa de mensagens de entrada ou a cota da taxa de mensagens de saída é violada.

Unidade: Contagem. Use a estatística Sum para obter o número total de mensagens de entrada que foram descartadas.

InvalidationSuccess

O número de assinaturas invalidadas com sucesso (assinatura cancelada) por uma mutação com $extensions.invalidateSubscriptions().

Unidade: Contagem. Use a estatística Soma para recuperar o número total de assinaturas que foram canceladas com sucesso.

InvalidationRequestSuccess

O número de solicitações de invalidação processadas com êxito.

Unidade: Contagem. Use a estatística de soma para mostrar o número total de solicitações de invalidação processadas.

InvalidationRequestError

O número de solicitações de invalidação que falharam no processamento devido a solicitações de API inválidas.

Unidade: Contagem. Use a estatística Sum para obter o número total de solicitações de anulação com falhas de API-related processamento.

InvalidationRequestFailure

O número de solicitações de anulação que falharam no processamento devido a erros do AWS AppSync.

Unidade: Contagem. Use a estatística Sum para obter o número total de solicitações de anulação com falhas de processamento AWS AppSync relacionadas.

InvalidationRequestDropped

O número de solicitações de invalidação perdidas quando a cota da solicitação de invalidação foi excedida.

Unidade: Contagem. Use a estatística de soma para mostrar o número total de solicitações de invalidação reduzidas.

Comparar mensagens de entrada e de saída

Quando uma mutação é executada, os campos de assinatura com a diretiva @aws_subscribe para essa mutação são invocados. Cada invocação de assinatura gera uma mensagem de entrada. Por exemplo, se dois campos de assinatura especificarem a mesma mutação em @aws_subscribe, duas mensagens de entrada serão geradas quando essa mutação for chamada.

Uma mensagem de saída equivale a 5 kB de dados entregues aos clientes. WebSocket Por exemplo, enviar 15 kB de dados para 10 clientes gera 30 mensagens de saída (15 kB * 10 clientes/5 kB por mensagem = 30 mensagens).

É possível solicitar aumentos de cota para mensagens de entrada ou de saída. Para obter mais informações, consulte Endpoints e cotas do AWS AppSync no guia Referência geral da AWS e as instruções de Solicitação de aumento de cota no Guia do usuário sobre Service Quotas.

Métricas aprimoradas

As métricas aprimoradas emitem dados granulares sobre o uso e o desempenho da API, como contagem de AWS AppSync solicitações e erros, latência e cache. hits/misses Todos os dados métricos aprimorados são enviados para sua CloudWatch conta e você pode configurar os tipos de dados que serão enviados.

nota

Cobranças adicionais são aplicadas ao usar métricas aprimoradas. Para obter mais informações, consulte os níveis detalhados de preços de monitoramento nos CloudWatch preços https://aws.amazon.com/cloudwatch/pricing/ da Amazon.

Essas métricas podem ser encontradas em várias páginas de configurações no AWS AppSync console. Na página de configurações da API, a seção Métricas aprimoradas permite ativar ou desativar os seguintes itens:

Comportamento das métricas de resolvedores: essas opções controlam como métricas adicionais para resolvedores são coletadas. Você pode optar por ativar as métricas de resolvedores de solicitações completas (métricas ativadas para todos os resolvedores de solicitações) ou métricas para cada resolvedor (métricas ativadas somente para resolvedores em que a configuração está definida como ativada). As seguintes opções estão disponíveis:

GraphQL errors per resolver (GraphQLError)

O número de erros do GraphQL que ocorreram por resolvedor.

Dimensão da métrica: API_Id, Resolver

Unidade: Contagem.

Requests per resolver (Request)

O número de invocações que ocorreram durante uma solicitação. Isso é registrado por resolvedor.

Dimensão da métrica: API_Id, Resolver

Unidade: Contagem.

Latency per resolver (Latency)

O tempo para concluir uma invocação do resolvedor. A latência é medida em milissegundos e registrada por resolvedor.

Dimensão da métrica: API_Id, Resolver

Unidade: milissegundo.

Cache hits per resolver (CacheHit)

O número de acertos do cache durante uma solicitação. Isso só será emitido se um cache for usado. Os acertos ao cache são registrados por resolvedor.

Dimensão da métrica: API_Id, Resolver

Unidade: Contagem.

Cache misses per resolver (CacheMiss)

O número de erros do cache durante uma solicitação. Isso só será emitido se um cache for usado. Os erros do cache são registrados por resolvedor.

Dimensão da métrica: API_Id, Resolver

Unidade: Contagem.

Comportamento das métricas de fontes de dados: essas opções controlam como métricas adicionais para fontes de dados são coletadas. Você pode optar por ativar as métricas de fontes de dados de solicitações completas (métricas ativadas para todas as fontes de dados de solicitações) ou as métricas para cada fonte de dados (métricas ativadas somente para as fontes de dados em que a configuração está definida como ativada). As seguintes opções estão disponíveis:

Requests per data source (Request)

O número de invocações que ocorreram durante uma solicitação. As solicitações são registradas por fonte de dados. Se as solicitações completas estiverem habilitadas, cada fonte de dados terá sua própria entrada CloudWatch.

Dimensão da métrica: API_Id, Datasource

Unidade: Contagem.

Latency per data source (Latency)

O tempo para concluir uma invocação de fonte de dados. A latência é registrada por fonte de dados.

Dimensão da métrica: API_Id, Datasource

Unidade: milissegundo.

Errors per data source (GraphQLError)

O número de erros que ocorreram durante uma invocação de fonte de dados.

Dimensão da métrica: API_Id, Datasource

Unidade: Contagem.

Métricas de operação: ativa métricas em nível operacional do GraphQL.

Requests per operation (Request)

O número de vezes que uma operação especificada do GraphQL foi chamada.

Dimensão da métrica: API_Id, Operation

Unidade: Contagem.

GraphQL errors per operation (GraphQLError)

O número de erros do GraphQL que ocorreram durante uma operação especificada do GraphQL.

Dimensão da métrica: API_Id, Operation

Unidade: Contagem.

CloudWatch troncos

Você pode configurar dois tipos de registro em log em qualquer API GraphQL nova ou existente: nível de solicitação e nível de campo.

Request-level troncos

Quando o registro em log a nível de solicitação (Incluir conteúdo detalhado) é configurado, as seguintes informações são registradas em log:

  • O número de tokens consumidos

  • Os cabeçalhos HTTP da solicitação e resposta

  • A consulta do GraphQL que está sendo executada na solicitação

  • O resumo geral da operação

  • Assinaturas do GraphQL novas e existentes registradas

Field-level troncos

Quando o registro log a nível de campo é configurado, as seguintes informações são registradas em log:

  • Mapeamento de solicitação gerado com origem e argumentos para cada campo

  • O Mapeamento da resposta transformado para cada campo, que inclui os dados como resultado da resolução desse campo

  • Informações de rastreamento para cada campo

Se você ativar o registro, AWS AppSync gerencia os CloudWatch registros. O processo inclui a criação de grupos de log e fluxos de log, além de relatórios aos fluxos de log com esses logs.

Quando você ativa o registro em uma API do GraphQL e faz solicitações, AWS AppSync cria um grupo de registros e fluxos de registros sob o grupo de registros. O grupo de logs é chamado seguindo o formato /aws/appsync/apis/{graphql_api_id}. Dentro de cada grupo de logs, os logs são subdivididos em fluxos de log. Esses são ordenados por Hora do último evento conforme os dados registrados em log são reportados.

Cada evento de log é marcado com o x-amzn- RequestId dessa solicitação. Isso ajuda você a filtrar os eventos de registro CloudWatch para obter todas as informações registradas sobre essa solicitação. Você pode obter os dos cabeçalhos RequestId de resposta de cada solicitação do GraphQL AWS AppSync .

O registro em log a nível de campo é configurado com os seguintes níveis de log:

  • Nenhum: nenhum log no nível do campo é capturado.

  • Erro: registra em log as seguintes informações apenas para os campos que estejam na categoria de erro:
    • A seção de erro na resposta do servidor

    • Field-level erros

    • As request/response funções geradas que foram resolvidas para campos de erro

  • Informações: registra em log as seguintes informações apenas para os campos que estejam nas categorias de informações e erro:
    • Info-level mensagens

    • As mensagens do usuário enviadas por meio de $util.log.info e console.log

    • Field-level os registros de rastreamento e mapeamento não são mostrados.

    • Se o registro em nível de campo estiver definido como INFO ou superior com conteúdo detalhado incluído, AWS AppSync adiciona as mensagens de registro do modelo de mapeamento transformado. Isso conterá todas as informações adicionadas ao modelo de mapeamento transformado ou à saída do JavaScript código executado pelo resolvedor ou pela função, e não deve ser usado se você planeja enviar informações confidenciais, como senhas ou cabeçalhos de autorização, para fontes de dados posteriores e não quiser essas informações em seus registros.

  • Depuração: registra em log as seguintes informações apenas para os campos que estejam nas categorias de depuração, informações e erro:
    • Debug-level mensagens

    • As mensagens do usuário enviadas por meio de $util.log.info, $util.log.debug, console.log e console.debug

    • Field-level os registros de rastreamento e mapeamento não são mostrados.

  • Todos – As informações a seguir são registradas em log para todos os campos na consulta:
    • Field-level informações de rastreamento

    • As request/response funções geradas que foram resolvidas para cada campo

Benefícios do monitoramento

É possível usar o registro em log e as métricas para identificar, solucionar problemas e otimizar as consultas do GraphQL. Por exemplo, isso ajudará a depurar problemas de latência usando as informações de rastreamento registradas em log para cada campo na consulta. Para demonstrar isso, suponha que você está usando um ou mais resolvedores aninhados em uma consulta do GraphQL. Um exemplo de operação de campo no CloudWatch Logs pode ser semelhante ao seguinte:

{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }

Isso pode corresponder a um esquema do GraphQL, semelhante ao seguinte:

type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }

Nos resultados do log acima, o path mostra um único item nos dados retornados da execução de uma consulta chamada singlePost(). Nesse exemplo, ele representa o campo nome no primeiro índice (0). O startOffset fornece um desvio do início da operação da consulta do GraphQL. A duração é o tempo total para resolver o campo. Esses valores podem ser úteis para entender por que os dados de uma fonte de dados particular podem estar com execução mais lenta que o esperado, ou se um campo específico está atrasando toda a consulta. Por exemplo, é possível aumentar um throughput provisionado para uma tabela do Amazon DynamoDB ou remover um campo específico de uma consulta que está fazendo com que a execução global tenha um desempenho insatisfatório.

A partir de 8 de maio de 2019, AWS AppSync gera eventos de log como JSON totalmente estruturado. Isso pode ajudar você a usar serviços de análise de log, como CloudWatch Logs Insights e Amazon OpenSearch Service, para entender o desempenho de suas solicitações do GraphQL e as características de uso de seus campos de esquema. Por exemplo, é possível identificar facilmente resolvedores com grandes latências que podem ser a causa raiz de um problema de desempenho. Também é possível identificar os campos mais e menos usados no esquema e avaliar o impacto de desativar campos do GraphQL.

Detecção de conflitos e registro em log de sincronização

Se uma AWS AppSync API tiver o registro em CloudWatch registros configurado com o nível de registro do resolvedor de campo definido como Todos, AWS AppSync emitirá informações de detecção e resolução de conflitos para o grupo de registros. Isso fornece uma visão granular de como a AWS AppSync API respondeu a um conflito. Para ajudar você a interpretar a resposta, as seguintes informações são fornecidas nos logs:

conflictType

Detalhes em caso de conflito devido a uma incompatibilidade de versão ou à condição fornecida pelo cliente.

conflictHandlerConfigured

Afirma o handler de conflitos configurado no resolvedor no momento da solicitação.

message

Fornece informações sobre como o conflito foi detectado e resolvido.

syncAttempt

O número de tentativas do servidor de sincronizar os dados antes de finalmente rejeitar a solicitação.

data

Se o handler de conflitos configurado foi Automerge, esse campo será preenchido de modo a mostrar a decisão que o Automerge tomou para cada campo. As ações fornecidas podem ser:

  • REJEITADO - Quando o Automerge rejeita o valor do campo de entrada em função do valor no servidor.

  • ADICIONADO - Quando o Automerge adicionada o campo recebido devido a não haver valor preexistente no servidor.

  • ANEXADO - Quando o Automerge anexa os valores de entrada aos valores da Lista que existe no servidor.

  • MESCLADO - Quando o Automerge mescla os valores de entrada aos valores do Conjunto que existe no servidor.

Usar contagens de tokens para otimizar suas solicitações

As solicitações que consomem menos ou igual a 1.500 KB-seconds de memória e tempo de vCPU recebem um token. Solicitações com consumo de recursos superior a 1.500 KB-seconds recebem tokens adicionais. Por exemplo, se uma solicitação consumir 3.350 KB-seconds, AWS AppSync aloca três tokens (arredondados para o próximo valor inteiro) para a solicitação. Por padrão, AWS AppSync aloca no máximo 5.000 ou 10.000 tokens de solicitação por segundo para as APIs em sua conta, dependendo da AWS região em que ela está implantada. Se cada uma das suas APIs usar uma média de dois tokens por segundo, você terá o limite de 2.500 ou 5.000 solicitações por segundo, respectivamente. Se você precisar de mais tokens por segundo do que o valor alocado, poderá enviar uma solicitação para aumentar a cota padrão da taxa de tokens de solicitação. Para obter mais informações, consulte AWS AppSync endpoints e cotas no Referência geral da AWS guia e Solicitando um aumento de cota no Guia do usuário de cotas de serviço.

Uma alta contagem de tokens por solicitação pode indicar que há uma oportunidade de otimizar suas solicitações e melhorar o desempenho da sua API. Os fatores que podem aumentar sua contagem de tokens por solicitação incluem:

  • O tamanho e a complexidade do seu esquema GraphQL.

  • A complexidade dos modelos de mapeamento de solicitações e respostas.

  • O número de invocações do resolvedor por solicitação.

  • A quantidade de dados retornados pelos resolvedores.

  • A latência das fontes de dados downstream.

  • Projetos de esquemas e consultas que exigem chamadas sucessivas à fonte de dados (em oposição às chamadas paralelas ou em lote).

  • Configuração de logs, particularmente conteúdo de log detalhado e em nível de campo.

nota

Além das AWS AppSync métricas e dos registros, os clientes podem acessar o número de tokens consumidos em uma solicitação por meio do cabeçalho de respostax-amzn-appsync-TokensConsumed.

Limites de tamanho de log

Por padrão, se o registro estiver ativado, AWS AppSync enviará até 1 MB de registros por solicitação. Logs que excederem esse tamanho serão truncados. Para reduzir tamanhos de log, escolha o nível de registro em log de ERROR para logs em nível de campo e desative o registro em log de VERBOSE, ou desative totalmente os logs em nível de campo se não forem necessários. Como alternativa ao nível de ALL registro, você pode usar métricas aprimoradas para obter métricas sobre resolvedores específicos, fontes de dados ou operações do GraphQL, ou utilizar os utilitários de registro fornecidos pelo AppSync para registrar somente as informações necessárias.

Referência de tipo de log

RequestSummary

  • requestId: identificador exclusivo da solicitação.

  • graphQLAPIId: ID da API GraphQL que está fazendo a solicitação.

  • statusCode: resposta do código de status HTTP.

  • latência: End-to-end latência da solicitação, em nanossegundos, como um número inteiro.

{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }

ExecutionSummary

  • requestId: identificador exclusivo da solicitação.

  • graphQLAPIId: ID da API GraphQL que está fazendo a solicitação.

  • startTime: o timestamp de início do processamento do GraphQL para a solicitação, no formato RFC 3339.

  • endTime: o timestamp de término do processamento do GraphQL para a solicitação, no formato RFC 3339.

  • duration: o tempo total do processamento do GraphQL, em nanossegundos, como um valor inteiro.

  • versão: A versão do esquema do ExecutionSummary.

  • parsing:
    • startOffset: o deslocamento inicial para análise, em nanossegundos, em relação ao início da invocação, como um valor inteiro.

    • duration: o tempo gasto na análise, em nanossegundos, como um valor inteiro.

  • validation:
    • startOffset: o deslocamento inicial para validação, em nanossegundos, em relação ao início da invocação, como um valor inteiro.

    • duration: o tempo gasto na execução da validação, em nanossegundos, como um valor inteiro.

{ "duration": 217406145, "logType": "ExecutionSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "startTime": "2019-01-01T06:06:18.956Z", "endTime": "2019-01-01T06:06:19.174Z", "parsing": { "startOffset": 49033, "duration": 34784 }, "version": 1, "validation": { "startOffset": 129048, "duration": 69126 }, "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

Rastreamento

  • requestId: identificador exclusivo da solicitação.

  • graphQLAPIId: ID da API GraphQL que está fazendo a solicitação.

  • startOffset: o deslocamento inicial para a resolução do campo, em nanossegundos, em relação ao início da invocação, como um valor inteiro.

  • duration: o tempo gasto na resolução do campo, em nanossegundos, como um valor inteiro.

  • fieldName: o nome do campo que está sendo resolvido.

  • parentType: o tipo pai do campo que está sendo resolvido.

  • returnType: o tipo de retorno do campo que está sendo resolvido.

  • path: uma lista de segmentos de caminho, começando pela raiz da resposta e terminando com o campo que está sendo resolvido.

  • resolverArn: o ARN do resolvedor usado para resolução do campo. Pode não estar presente em campos aninhados.

{ "duration": 216820346, "logType": "Tracing", "path": [ "putItem" ], "fieldName": "putItem", "startOffset": 178156, "resolverArn": "arn:aws:appsync:us-east-1:111111111111:apis/pmo28inf75eepg63qxq4ekoeg4/types/Mutation/fields/putItem", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "parentType": "Mutation", "returnType": "Item", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

Analisando seus registros com o CloudWatch Logs Insights

Veja a seguir exemplos de consultas que você pode executar para obter insights práticos sobre o desempenho e a integridade das operações do GraphQL. Esses exemplos estão disponíveis como exemplos de consultas no console do CloudWatch Logs Insights. No CloudWatch console, escolha Logs Insights, selecione o grupo de AWS AppSync registros para sua API GraphQL e escolha AWS AppSync consultas em Consultas de amostra.

A consulta a seguir retorna as 10 principais solicitações do GraphQL com o máximo de tokens consumidos:

filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10

A consulta a seguir retorna os 10 principais resolvedores com latência máxima:

fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc

A consulta a seguir retorna os resolvedores invocados com mais frequência:

fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc

A consulta a seguir retorna resolvedores com a maioria dos erros em modelos de mapeamento:

fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | limit 10 | sort errorCount desc

A consulta a seguir retorna estatísticas de latência do resolvedor:

fields ispresent(resolverArn) as isRes | stats min(duration), max(duration), avg(duration) as avg_dur by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort avg_dur desc

A consulta a seguir retorna estatísticas de latência de campo:

stats min(duration), max(duration), avg(duration) as avg_dur by concat(parentType, '/', fieldName) as fieldKey | filter logType = "Tracing" | limit 10 | sort avg_dur desc

Os resultados das consultas do CloudWatch Logs Insights podem ser exportados para CloudWatch painéis.

Analise seus registros com o OpenSearch Service

Você pode pesquisar, analisar e visualizar seus AWS AppSync registros com o Amazon OpenSearch Service para identificar gargalos de desempenho e causas básicas de problemas operacionais. É possível identificar resolvedores com a latência máxima e os erros. Além disso, você pode usar OpenSearch painéis para criar painéis com visualizações poderosas. OpenSearch O Dashboards é uma ferramenta de visualização e exploração de dados de código aberto disponível no OpenSearch Service. Usando OpenSearch painéis, você pode monitorar continuamente o desempenho e a integridade de suas operações do GraphQL. Por exemplo, você pode criar painéis para visualizar a latência P90 das solicitações do GraphQL e analisar as latências P90 de cada resolvedor.

Ao usar o OpenSearch Service, use “cwl*” como padrão de filtro para pesquisar OpenSearch índices. OpenSearch O serviço indexa os registros transmitidos dos CloudWatch Logs com o prefixo “cwl-”. Para diferenciar os registros da AWS AppSync API de outros CloudWatch registros enviados ao OpenSearch Serviço, recomendamos adicionar uma expressão de filtro adicional de graphQLAPIID.keyword=YourGraphQLAPIID à sua pesquisa.

Migração do formato de log

Os eventos de log AWS AppSync gerados são formatados principalmente como JSON totalmente estruturado. No entanto, certas mensagens de diagnóstico e processamento intermediário podem ser emitidas em um formato não estruturado. Se precisar migrar registros não estruturados para um JSON totalmente estruturado, você pode usar um script disponível na amostra. GitHub

Você também pode usar filtros métricos CloudWatch para transformar dados de registro em CloudWatch métricas numéricas, para que você possa representá-los graficamente ou definir um alarme sobre eles.