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

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 do GraphQL API

Você pode registrar e depurar seu 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 métricas é uma ferramenta que fornece uma ampla variedade de métricas para monitorar o API desempenho e o uso. Essas métricas se enquadram em duas categorias principais:

  1. APIMétricas gerais: incluem 4XXError e 5XXError para rastrear erros do cliente e do servidor, Latency medir os tempos de resposta, Requests monitorar o total de API chamadas e TokensConsumed 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. Eles 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 GraphQLAPIs. Os registros podem ser definidos em dois níveis deAPI:

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

  2. Registros 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 um GraphQLAPI, 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 um GraphQLAPI.

  3. Na sua API página inicial, no painel de navegação, escolha 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 em CloudWatch. Ou escolha Função existente para selecionar o Amazon Resource Name (ARN) de uma IAM função existente em sua AWS conta.

  5. Escolha Salvar.

Configuração manual IAM da função

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

No IAMconsole, 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 a função ARN e use-a ao configurar o registro em um AWS AppSync GraphQLAPI.

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 HTTP status 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 JSON carga incorreta ou uma consulta incorreta, quando o serviço é limitado ou quando as configurações de autorização estão configuradas 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 caíram porque a taxa de transferência 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 um determinado API especificando o API_Id na appsyncCacheNetworkBandwidthOutAllowanceExceeded métrica.

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

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 CPU utilização (porcentagem) alocada ao processo do RedisOSS. Isso é útil para diagnosticar gargalos em uma configuração de cache. Os dados são registrados para um determinado API especificando o API_Id na appsyncCacheEngineCPUUtilization métrica.

Unidade: Porcentagem. A CPU porcentagem atualmente em uso pelo OSS processo Redis para um ID API especificado.

Assinaturas em tempo real

Todas as métricas são emitidas em uma dimensão: G. raphQLAPIId Isso significa que todas as métricas são acopladas ao GraphQL APIIDs. 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 JSON carga está incorreta, o serviço é limitado ou as configurações de autorização estão mal configuradas.

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 monitoradas 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 API solicitações 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 processamento API relacionadas.

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 são violadas.

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

InboundMessageDropped

O número de mensagens de entrada perdidas. 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 são violadas.

Unidade: Contagem. Use a estatística Sum para obter o número total de mensagens recebidas 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 inválidasAPI.

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

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 resulta em 30 mensagens de saída (15 kB * 10 clientes/5 kB por mensagem = 30 mensagens).

Você pode solicitar aumentos de cota para mensagens de entrada ou saída. Para obter mais informações, consulte AWS AppSync endpoints e cotas no guia de referência AWS geral e as instruções para solicitar um aumento de cota no Service Quotas User Guide.

Métricas aprimoradas

Métricas aprimoradas emitem dados granulares sobre API uso e desempenho, como contagens de AWS AppSync solicitações e erros, 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 API configurações, a seção Métricas aprimoradas permite ativar ou desativar os seguintes itens:

Comportamento das métricas do resolvedor: essas opções controlam como métricas adicionais para resolvedores são coletadas. Você pode optar por ativar as métricas completas do resolvedor de solicitações (métricas ativadas para todos os resolvedores nas solicitações) ou métricas por 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 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 métrica:API_Id, Resolver

Unidade: Contagem.

Latency per resolver (Latency)

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

Dimensão métrica:API_Id, Resolver

Unidade: milissegundo.

Cache hits per resolver (CacheHit)

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

Dimensão métrica:API_Id, Resolver

Unidade: Contagem.

Cache misses per resolver (CacheMiss)

O número de falhas de cache durante uma solicitação. Isso só será emitido se um cache for usado. As falhas de cache são registradas por resolvedor.

Dimensão métrica:API_Id, Resolver

Unidade: Contagem.

Comportamento das métricas da fonte de dados: essas opções controlam como as métricas adicionais das fontes de dados são coletadas. Você pode optar por ativar as métricas completas da fonte de dados da solicitação (métricas habilitadas para todas as fontes de dados nas solicitações) ou métricas por fonte de dados (métricas ativadas somente para 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 métrica:API_Id, Datasource

Unidade: Contagem.

Latency per data source (Latency)

A hora de concluir a invocação de uma fonte de dados. A latência é registrada por fonte de dados.

Dimensão métrica:API_Id, Datasource

Unidade: milissegundo.

Errors per data source (GraphQLError)

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

Dimensão métrica:API_Id, Datasource

Unidade: Contagem.

Métricas de operação: ativa métricas de 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 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 métrica:API_Id, Operation

Unidade: Contagem.

CloudWatch troncos

Você pode configurar dois tipos de registro em qualquer GraphQL novo ou existenteAPI: no nível da solicitação e no nível do 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 HTTP cabeçalhos de 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 um GraphQL API 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 mostrados

  • 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 mostrados

  • 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 startOffsetfornece um deslocamento do início da operação de 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 totalmente estruturadosJSON. 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 um AWS AppSync API tiver o registro em CloudWatch registros configurado com o nível de registro do resolvedor de campo definido como Todos, ele 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 eles AWS AppSync API responderam 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:

  • REJECTED- Quando Automerge rejeita o valor do campo de entrada em favor do valor no servidor.

  • ADDED- Quando Automerge adiciona o campo de entrada devido a nenhum valor preexistente no servidor.

  • APPENDED- Quando Automerge acrescenta os valores de entrada aos valores da Lista que existe no servidor.

  • MERGED- Quando Automerge mescla os valores de entrada com os valores do Conjunto que existe no servidor.

Usar contagens de tokens para otimizar suas solicitações

Solicitações que consomem menos ou igual a 1.500 KB por segundo de memória e CPU tempo v 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 de suasAPI. 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. Os registros que excederem esse tamanho serão truncados. Para reduzir o tamanho dos registros, escolha o nível de ERROR registro para registros em nível de campo e desative o VERBOSE registro, ou desative totalmente os registros em nível de campo, se não for necessário. 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 para a solicitação.

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

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

  • latência: nd-to-end latência E 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 para a solicitação.

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

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

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

  • 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 à invocação, como um número 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 à invocação, como um número 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 para a solicitação.

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

  • startOffset: o deslocamento inicial da resolução do campo, em nanossegundos, em relação à invocação, como um número 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 principal 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 de 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 seu GraphQL eAPI, 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 o OpenSearch Serviço, 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 AWS AppSync API os registros 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 totalmente estruturadosJSON. Para analisar solicitações do GraphQL anteriores a 8 de maio de 2019, você pode migrar registros antigos para totalmente estruturados JSON 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.