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 GraphQL CloudWatch usando métricas CloudWatch e 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. Métricas de assinatura em tempo real: 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 Logs é uma ferramenta que habilita recursos de registro para seu GraphQL APIs. Os logs podem ser definidos em dois níveis da API:

  1. Logs em nível de solicitação: capturam informações gerais da solicitação, incluindo cabeçalhos HTTP, consultas GraphQL, resumos de operações e registros de assinaturas.

  2. Logs em nível de campo: fornecem informações detalhadas sobre resoluções de campo individuais, incluindo mapeamentos de solicitações e respostas e informações de rastreamento para cada campo.

Você pode configurar o registro, interpretar as entradas do registro e usar os dados do 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 da consulta.

Definição e configuração

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

  1. Faça login no AWS Management Console e abra o AppSyncconsole.

  2. Na APIspágina, escolha o nome de uma API do 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 registro do resolvedor de campo, escolha seu nível de registro em nível de campo preferido (Nenhum, Erro, Informações, Depuração ou Tudo). (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 do IAM existente, 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 da função de serviço para que 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:

{ "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 AWSAppSyncPushToCloudWatchLogsRolee anexe a política recém-criada à função. Edite a relação de confiança desse perfil da seguinte forma:

{ "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 GraphQL AWS AppSync .

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 em 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 APIs em 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 de cache, a opção Cache Health Metrics 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 de cache, a opção Cache Health Metrics 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.

Assinaturas em tempo real

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

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 originados AWS AppSync durante a desconexão WebSocket das 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 originados AWS AppSync durante a desconexão WebSocket das 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 durante a publicação de 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 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 de soma para mostrar o número total de mensagens de entrada com falhas de processamento relacionadas a API.

InboundMessageFailure

O número de mensagens de entrada 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 de soma para mostrar o número total de solicitações de invalidação com falhas de processamento relacionadas a API.

InvalidationRequestFailure

O número de solicitações de invalidaçã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 invalidaçã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 contagens de solicitações e erros do AWS AppSync , latência e acertos/erros do cache. 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 CloudWatchpreços 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.

Logs a nível de solicitação

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

Logs a nível de campo

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 eventos de registro CloudWatch para obter todas as informações registradas sobre essa solicitação. Você pode obter o dos cabeçalhos RequestId de resposta de cada solicitação do AWS AppSync GraphQL.

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

  • Nenhum - Nenhum registro em nível de campo é capturado.

  • Erro - registra as seguintes informações somente para os campos que estão na categoria de erro:
    • A seção de erro na resposta do servidor

    • Os erros a nível de campo

    • As funções de solicitação/resposta geradas que foram resolvidas para campos de erro

  • Informações - registra as seguintes informações somente para os campos que estão nas categorias de informações e erros:
    • Mensagens em nível de informação

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

    • Os registros de rastreamento e mapeamento em nível de campo não são exibidos.

    • Se o registro em nível de campo estiver definido como INFO ou superior com conteúdo detalhado incluído, AWS AppSync adicionará 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 resolvedor ou do JavaScript código executado 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 downstream e não quiser essas informações em seus registros.

  • Depuração - registra as seguintes informações somente para os campos que estão nas categorias de depuração, informações e erro:
    • Mensagens em nível de depuração

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

    • Os registros de rastreamento e mapeamento em nível de campo não são exibidos.

  • Todos – As informações a seguir são registradas em log para todos os campos na consulta:
    • Informações de rastreamento a nível de campo

    • As funções de solicitação/resposta 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, ela 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 por segundo de memória e tempo de vCPU recebem um token. As solicitações com consumo de recursos superior a 1.500 KB por segundo recebem tokens adicionais. Por exemplo, se uma solicitação consumir 3.350 KB por segundo, AWS AppSync aloca três tokens (arredondados para o próximo valor inteiro) para a solicitação. Por padrão, AWS AppSync aloca um máximo de 5.000 ou 10.000 tokens de solicitação por segundo APIs na sua conta, dependendo da AWS região em que está implantado. Se APIs cada um usar uma média de dois tokens por segundo, você estará limitado a 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 Service Quotas User Guide.

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 de AWS AppSync métricas e 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 log, você pode usar métricas aprimoradas para obter métricas sobre resolvedores, fontes de dados ou operações do GraphQL específicos, ou utilizar os utilitários de registro fornecidos AppSync por 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 CloudWatchconsole, escolha Logs Insights, selecione o AWS AppSync grupo de registros para sua API GraphQL e, em seguida, escolha AWS AppSync consultas em Exemplos de consultas.

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-raiz 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 OpenSearch Service, use “cwl*” como padrão de filtro para pesquisar OpenSearch índices. OpenSearch O serviço indexa os registros transmitidos do 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 registro AWS AppSync gerados em ou após 8 de maio de 2019 são formatados como JSON totalmente estruturado. Para analisar solicitações do GraphQL anteriores a 8 de maio de 2019, você pode migrar registros antigos para um JSON totalmente estruturado usando um script disponível na amostra. GitHub Se for necessário usar o formato de log antes de 8 de maio de 2019, crie um tíquete de suporte com as seguintes configurações: defina Tipo como Gerenciamento de contas e, depois, defina Categoria como Pergunta geral sobre a conta.

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