Resolver problemas na API Monitoring

Para diagnosticar erros de API, corrigir rejeições de ingestão de métricas e resolver resultados de consultas ausentes ao usar a API Monitoring, use as técnicas de solução de problemas e resoluções de erros neste guia.

A API Monitoring faz parte das APIs do Cloud. Para conferir uma lista de códigos de erro compartilhados e recomendações gerais de tratamento, consulte Como lidar com erros.

Usar o APIs Explorer para depuração

As APIs Explorer é um widget integrado às páginas de referência dos métodos de API. Ela permite que você invoque o método preenchendo campos, sem precisar escrever códigos.

Se você estiver com problemas para invocar um método, use o widget das APIs Explorer (Try this API) na página de referência desse método para depurar o problema. Para obter mais informações, consulte APIs Explorer.

Erros gerais de API e autenticação

Esta seção lista os códigos de erro que podem ser retornados por vários métodos da API Monitoring.

401 UNAUTHENTICATED

O código de erro 401 UNAUTHENTICATED indica que as credenciais do OAuth2 ou do IAM estão ausentes, expiradas ou inválidas.

As duas mensagens de erro comuns para esse código são Request is missing required authentication credential e User is not authorized to access the project (or metric).

  • Causa:cabeçalho Authorization: Bearer <token> ausente, token OAuth2 ou OIDC expirado ou credenciais de conta de serviço inválidas.
  • Resolução:atualize os tokens de autenticação usando Application Default Credentials (ADC) ou gcloud auth print-access-token. Além disso, verifique se a chave da conta de serviço é válida.
Se você não estiver usando o APIs Explorer, tente usá-lo. Quando a chamada de API funciona nas APIs Explorer, provavelmente há um problema de autorização no ambiente em que você está fazendo a chamada de API. Acesse a página do gerenciador de APIs para verificar se a API Monitoring está ativada para seu projeto.

403 PERMISSION_DENIED para acesso e faturamento do projeto

O código de erro 403 PERMISSION_DENIED indica que você não tem as permissões necessárias para executar a ação solicitada.

Existem diversas mensagens de erro diferentes que podem ser associadas a este código de erro. Duas mensagens de erro comuns são Billing check failed for project [PROJECT_ID] e Billing account disabled:

  • Causa:o Cloud Billing está desativado ou suspenso no projetoGoogle Cloud . A ingestão de métricas personalizadas exige uma conta de faturamento ativa.
  • Resolução:vincule uma conta ativa do Cloud Billing ao projeto no console do Google Cloud .

Se você receber esse código de erro ao gravar dados de métricas, consulte também 403 PERMISSION_DENIED ao gravar dados de métricas.

404 NOT_FOUND

O código de erro 404 NOT_FOUND indica que o ID do projeto de destino não existe ou que a região ou o local não são reconhecidos.

Confira abaixo uma lista de mensagens de erro comuns para esse código:

  • Project [PROJECT_ID] not found

    • Causa:o projeto especificado no URI de solicitação não existe ou foi excluído.
    • Resolução:verifique a ortografia do ID do projeto e se ele está ativo no console do Google Cloud .
  • Unavailable region or location ou Unrecognized region or location

    • Causa:o local do recurso monitorado ou o rótulo da região é inválido ou não reconhecido.
    • Solução:use nomes válidos de Google Cloud região e zona, como us-central1 ou us-central1-a.
  • The requested URL was not found on this server

    • Causa:o caminho do recurso no URL está incorreto.
    • Resolução: Compare o URL com o URL do método mostrado na página de referência do método. Esse erro pode significar que há um erro de ortografia, como "project" em vez de "projects", ou um erro de capitalização, como "TimeSeries" em vez de "timeSeries".

500 INTERNAL, 503 UNAVAILABLE, 504 DEADLINE_EXCEEDED

Há duas mensagens de erro comuns para esses códigos: Internal error encountered. Please retry after a few seconds e The service is currently unavailable.

  • Causa:erros transitórios na infraestrutura de back-end, problemas de rede ou rebalanceamento de partição do banco de dados interno.
  • Resolução:implemente a espera exponencial truncada com instabilidade nas novas tentativas, começando em 1 segundo e indo até 32 segundos. Defina os prazos do cliente RPC como 15 segundos ou mais. Para mais informações, consulte Como repetir erros da API.

Resultados ausentes

Quando uma chamada de API retorna o código de status 200 e uma resposta vazia, considere o seguinte:

  • Se a chamada usa um filtro, ele pode não ter correspondido. A correspondência de filtro diferencia maiúsculas de minúsculas. Para resolver problemas de filtro, comece especificando apenas um componente de filtro, como metric.type, e verifique se você recebe resultados. Adicione os outros componentes do filtro, um por um, para criar sua solicitação.
  • Ao trabalhar com uma métrica personalizada, verifique se o projeto que define a métrica está especificado.

Há vários motivos para que os pontos de dados estejam ausentes ao usar o método timeSeries.list:

  • Os dados podem ter ficado obsoletos. Para mais informações, consulte Retenção de dados.

  • Os dados ainda não foram propagados para o Monitoring. Para saber mais, consulte Latência dos dados de métrica.

  • O intervalo é inválido:

    • Verifique se o horário de término está correto.
    • Verifique se o horário de início está correto e se é anterior ao horário de término. Quando o horário de início está ausente ou malformado, a API define o horário de início como o horário de término. Para métricas GAUGE, esse intervalo de tempo corresponde apenas a pontos em que os horários de início e término são exatamente o horário de término do intervalo. Para métricas CUMULATIVE ou DELTA, que medem intervalos de tempo, nenhum ponto é correspondido. Para mais informações, consulte Intervalos de tempo.

Erros ao consultar dados de métricas

Esta seção fornece informações sobre os erros que podem ocorrer ao ler dados de métricas usando um método como o timeSeries.list.

400 INVALID_ARGUMENT ao consultar dados de métricas

O código de erro 400 INVALID_ARGUMENT indica algum tipo de erro de validação do lado do cliente. A mensagem de erro associada ao código de erro fornece informações mais detalhadas e é específica do método da API.

Por exemplo, ao consultar dados de métricas, você pode receber as seguintes mensagens:

  • Field filter had an invalid value ou Field filter had an invalid value of "[FILTER]": [EXPLANATION]

    • Causa:indica um problema com o filtro de monitoramento.
    • Resolução:para resolver o problema, verifique a ortografia e a formatação do filtro. Para mais informações, consulte Filtros do Monitoring.
  • Request was missing field interval.endTime ou Field interval.endTime had an invalid value

    • Causa:indica que a solicitação não tem o horário de término ou que o valor está malformado.
    • Resolução:se você estiver usando o APIs Explorer, não coloque o valor do campo de tempo entre aspas. Os seguintes são formatos válidos:

      2026-05-11T01:23:45Z
      2026-05-11T01:23:45.678Z
      2026-05-11T01:23:45.678+05:00
      2026-05-11T01:23:45.678-04:30
      ```
      

Erros ao gravar dados de métricas

Esta seção fornece informações sobre os erros que podem ocorrer ao usar o método timeSeries.create para gravar dados de métricas, incluindo o seguinte:

  • Um resumo dos códigos de erro.
  • Uma lista de mensagens de erro associadas a cada código de erro. Essas entradas incluem tanto a causa quanto informações sobre a resolução. Os erros gerais da API também se aplicam ao método create.

Se você não ativar os registros de auditoria de acesso a dados para o Monitoring, as falhas com o método timeSeries.create poderão não ser informadas. No entanto, é possível fazer o seguinte:

  • Use o Metrics Explorer para receber informações sobre taxas de erro. Use as seguintes configurações:

    • Métrica:monitoring.googleapis.com/api/request_count
    • Filtro:method = "google.monitoring.v3.MetricService.CreateTimeSeries"
    • Agregação:agrupar por response_code
  • Use o Análise de registros para consultar seus logs de Atividade de Administrador, que o sistema cria quando tenta criar automaticamente um descritor de métrica e essa ação falha. Para conferir essas entradas de registro, execute a consulta a seguir, depois de substituir PROJECT_ID pelo ID do projeto Google Cloud :

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="monitoring.googleapis.com"
    protoPayload.methodName="google.monitoring.v3.MetricService.CreateMetricDescriptor"
    severity>=ERROR
    
  • Use o Análise de registros para consultar os registros do lado do cliente.

Se você ativar os registros de auditoria de acesso aos dados para o Cloud Monitoring, o sistema vai gravar uma entrada de registro para cada acesso aos dados. Em particular, essas entradas de registro incluem detalhes sobre o número de pontos que não foram gravados e a causa da falha:

  • Para obter informações sobre como ativar os logs de auditoria de acesso a dados, consulte Configurar logs de auditoria de acesso a dados.

  • Para visualizar essas entradas de registro, use o Análise de registros e execute a seguinte consulta, após substituir PROJECT_ID pelo ID do seuGoogle Cloud projeto:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.serviceName="monitoring.googleapis.com"
    protoPayload.methodName="google.monitoring.v3.MetricService.CreateTimeSeries"
    severity>=ERROR
    

Resumo dos códigos de erro de timeSeries.create

Código HTTP Código de status do gRPC Causas principais
400 INVALID_ARGUMENT Falha na validação do payload: tamanho do lote, tamanho ou chave do rótulo, ordenação de carimbos de data/hora, incompatibilidade de esquema ou tipo, estrutura do histograma de distribuição.
400 FAILED_PRECONDITION A taxa de amostragem foi excedida, o tipo de métrica não é compatível ou a chegada está atrasada fora da janela de retenção.
401 UNAUTHENTICATED Credenciais do OAuth2 ou do IAM ausentes, expiradas ou inválidas.
403 PERMISSION_DENIED Função do IAM roles/monitoring.metricWriter ausente, Cloud Billing desativado ou tentativa não autorizada de gravar em domínios de métricas do sistema reservados.
404 NOT_FOUND O ID do projeto de destino não existe ou a região/local não é reconhecida.
429 RESOURCE_EXHAUSTED O limite de cardinalidade de série temporal ativa foi excedido em um recurso monitorado, os limites de descritor de métrica do projeto foram atingidos ou os limites de taxa de solicitação da API foram excedidos.
500 INTERNAL Falha no armazenamento interno ou no serviço de esquema.
503 UNAVAILABLE Indisponibilidade temporária do serviço de back-end.
504 DEADLINE_EXCEEDED A solicitação expirou antes de gravar os pontos de dados nos nós de armazenamento.

400 INVALID_ARGUMENT ao gravar dados de métricas

400 INVALID_ARGUMENT indica erros de validação do lado do cliente na estrutura da solicitação, metadados de métrica, definições de rótulo, alinhamento de carimbo de data/hora ou valores de ponto.

Estrutura da solicitação e violações de agrupamento em lote

Confira a seguir as mensagens de erro relacionadas a violações de estrutura e em lote:

  • Request was missing field timeSeries

    • Causa:a matriz time_series na solicitação estava vazia.
    • Resolução:inclua pelo menos um objeto TimeSeries em cada solicitação.
  • The maximum number of TimeSeries objects per Create request is 200

    • Causa:a solicitação contém mais de 200 objetos TimeSeries.
    • Resolução: Gravações em lote para no máximo 200 série temporal por solicitação.
  • Field points had an invalid value: Only one point can be written per TimeSeries per request

    • Causa:um único objeto TimeSeries contém mais de uma entrada no campo points.
    • Resolução: Forneça exatamente um Point por objeto TimeSeries por solicitação. Para registrar vários pontos de dados ao longo do tempo para a mesma métrica, envie-os em solicitações separadas.
  • Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request

    • Causa:dois ou mais objetos TimeSeries na mesma solicitação compartilham tipos de métricas, rótulos de métricas e rótulos de recursos monitorados idênticos.
    • Resolução:remova as séries temporais duplicadas em lotes do lado do cliente para que cada série temporal única apareça no máximo uma vez por solicitação.
  • user defined metrics are not supported on the metric domain "[DOMAIN]"

    • Causa:as métricas definidas pelo usuário não são compatíveis com o domínio especificado.
    • Resolução:nenhuma.

Rótulos e restrições de nomenclatura

A seguir, listamos mensagens de erro relacionadas a rótulos e restrições de nomenclatura:

  • Field metric.labels had an invalid value of "[KEY]": Label value exceeds the maximum string size of 1024 characters

    • Causa:o valor de um rótulo de métrica ou recurso excede 1.024 caracteres.
    • Resolução:configure seu coletor ou aplicativo para truncar valores de rótulo para 1.024 caracteres ou menos. Evite armazenar textos de alto volume em rótulos de métricas. Em vez disso, grave esses detalhes no Cloud Logging.
  • Field metric.labels had an invalid value of "[KEY]": Label key contains invalid characters

    • Causa:uma chave de rótulo contém caracteres fora do padrão permitido. As chaves podem conter caracteres alfanuméricos e sublinhados, precisam ter no máximo 100 caracteres e começar com uma letra.
    • Resolução:renomeie as chaves de rótulo para usar apenas caracteres válidos.
  • The metric type must be a URL-formatted string with a domain and non-empty path

    • Causa:o metric.type está incorreto ou não tem um prefixo de domínio.
    • Resolução:formate os tipos de métrica personalizada como custom.googleapis.com/<category>/<name> ou workload.googleapis.com/<name>.
  • Field metric.labels had an invalid value: The metric [METRIC_NAME] has more than [LIMIT] labels

    • Causa:o número de rótulos em um descritor de métrica personalizada excede 30 ou, para métricas do Prometheus, excede 200.
    • Resolução:remova os rótulos desnecessários para ficar dentro do limite de descritores.
  • unrecognized metric label "[LABEL_KEY]"

    • Causa:o descritor de métrica já existe, mas a solicitação fornece uma chave de rótulo que não está definida no descritor.
    • Resolução:verifique se as chaves de rótulo correspondem ao MetricDescriptor atual ou crie um novo descritor de métrica se for necessário modificar o esquema.

Incompatibilidades de identificadores de projetos e recursos

Confira a seguir as mensagens de erro relacionadas a incompatibilidades de identificadores de projeto e recurso:

  • Field resource.labels.project_id had an invalid value of "[VAL]": if present, must be the project number or ID in the request name ([PROJECT]) ou Field resource.labels.project_id had an invalid value of "[VAL]": if present, must be the resource container ID in the request name [PROJECT]

    • Causa:o rótulo project_id ou resource_container especificado em resource.labels não corresponde ao ID do projeto ou número no nome da solicitação.
    • Resolução:defina o rótulo project_id do recurso para corresponder ao projeto da solicitação ou omita o rótulo project_id de resource.labels para que ele seja definido como padrão para o projeto da solicitação.
  • unrecognized resource type "[RESOURCE_TYPE]" ou missing resource type

    • Causa:o resource.type não é reconhecido pelo Cloud Monitoring ou é omitido para uma métrica não personalizada.
    • Resolução:use um tipo de recurso monitorado válido, como gce_instance, k8s_container, generic_task ou global.

Carimbos de data/hora e intervalos

Confira a seguir uma lista de mensagens de erro relacionadas a carimbos de data/hora e intervalos:

  • Points must be written in order. One or more of the points specified had an older end time than the most recent point

    • Causa:o end_time do ponto de dados é mais antigo ou igual ao carimbo de data/hora do ponto de dados mais recente ingerido anteriormente para essa série temporal.
    • Resolução:ingira pontos estritamente em ordem cronológica.
  • Field points[0].interval.start_time had an invalid value of "[START]": The start time must be equal to the end time ([END]) for the gauge metric '[METRIC]'

    • Causa:um ponto de métrica GAUGE foi enviado quando start_time não é igual a end_time.
    • Resolução:para métricas de GAUGE, defina start_time como end_time ou omita start_time.
  • Field points[0].interval.start_time had an invalid value of "[START]": The start time must be before the end time ([END]) for the non-gauge metric '[METRIC]'

    • Causa:um ponto de métrica CUMULATIVE ou DELTA tem um valor start_time maior ou igual ao valor end_time.
    • Resolução:verifique se o valor start_time é menor que o valor end_time e representa um intervalo de tempo diferente de zero.
  • Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than 5m into the future.

    • Causa:o carimbo de data/hora do ponto está mais de 5 minutos à frente da hora atual do servidor.
    • Resolução:sincronize o relógio do sistema com o NTP público do Google (time.google.com).
  • Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than approximately 24 hours in the past

    • Causa:o carimbo de data/hora do ponto é mais antigo que o horizonte de retenção na memória, que é de 24 horas.
    • Resolução:grave dados em tempo real em até 24 horas após a geração.

Tipos de valores e distribuições

A seguir, listamos mensagens de erro relacionadas a tipos de valores e distribuições:

  • value type for metric must be [EXPECTED], but is [ACTUAL] ou metric kind for metric must be [EXPECTED], but is [ACTUAL]

    • Causa:o tipo de valor de entrada (INT64, DOUBLE, STRING, BOOL, DISTRIBUTION) ou o tipo de métrica (GAUGE, DELTA, CUMULATIVE) entra em conflito com o MetricDescriptor atual.
    • Resolução:verifique se os tipos de dados correspondem ao descritor atual. Não é possível modificar os tipos de valor e de métrica depois da criação.
  • Field points[0].value had an invalid value: The metric value exceeds the maximum string size of 1024 characters

    • Causa:um ponto de métrica do tipo de valor STRING excede 1.024 caracteres.
    • Resolução:corte os valores de métricas de string para 1.024 caracteres ou menos ou envie os registros para o Cloud Logging.
  • Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric

    • Causa:um ponto DISTRIBUTION não especifica bucket_options.
    • Resolução:defina linear_buckets, exponential_buckets ou explicit_buckets para métricas de distribuição.
  • Field points[0].value.distributionValue had an invalid value: Distribution value has |bucket_counts| fields that sum to X which does not equal the |count| field value of Y

    • Causa:a soma das contagens em bucket_counts não é igual ao campo count.
    • Resolução:confira se a soma de todas as contagens de buckets é igual à amostra count.
  • Field points[0].value had an invalid value: Distribution metric has too many buckets

    • Causa:o número de buckets do histograma excede 200.
    • Resolução:ajuste os parâmetros do bucket para manter a contagem total em 200 ou menos.

400 FAILED_PRECONDITION

Confira a seguir uma lista de mensagens de erro relacionadas a esse código:

  • One or more points were written more frequently than the maximum sampling period configured for the metric

    • Causa:os pontos da mesma série temporal foram enviados mais rápido do que a taxa máxima permitida de um ponto a cada 5 segundos.
    • Resolução:limite a taxa de ingestão para que pontos consecutivos de uma série temporal específica tenham intervalos de pelo menos 5 segundos.
  • ingestion of prometheus delta metrics is not supported in this API

    • Causa:a solicitação tentou gravar métricas do Prometheus DELTA pelo timeSeries.create.
    • Resolução:use métricas do Prometheus GAUGE ou CUMULATIVE ou faça a ingestão pelos endpoints OTLP do Google Cloud Managed Service para Prometheus.
  • One or more points arrived late outside of its aggregation window

    • Causa:os pontos chegaram após a janela de agregação para métricas agregadas de coleta.
    • Resolução:transfira e transmita pontos com latências de buffer mais baixas.

403 PERMISSION_DENIED ao gravar dados de métricas

Ao gravar dados de métricas, você pode receber uma resposta 403 PERMISSION_DENIED por motivos relacionados ao acesso ao projeto e faturamento e pelos seguintes motivos:

  • Permission monitoring.timeSeries.create denied on resource (or it may not exist)

    • Causa:o autor da chamada não tem a permissão monitoring.timeSeries.create no projeto de destino.
    • Resolução:conceda o papel Monitoring Metric Writer (roles/monitoring.metricWriter) à conta de serviço ou ao principal.
  • Billing check failed for project [PROJECT_ID] ou Billing account disabled

    • Causa:o Cloud Billing está desativado ou suspenso no projetoGoogle Cloud . A ingestão de métricas personalizadas exige uma conta de faturamento ativa.
    • Resolução:vincule uma conta ativa do Cloud Billing ao projeto no console do Google Cloud .
  • User does not have permission to write to metric [METRIC]

    • Causa:o caller tentou gravar métricas personalizadas diretamente em domínios reservados pelo sistema, como compute.googleapis.com ou storage.googleapis.com.
    • Resolução:use domínios de métrica personalizada, como custom.googleapis.com/ ou workload.googleapis.com/.

429 RESOURCE_EXHAUSTED

Confira a seguir uma lista de mensagens de erro relacionadas a esse código:

  • Monitored resource ([RESOURCE_ID]) has too many time series (custom metrics)

    • Causa:o limite de série temporal ativas foi excedido (alta cardinalidade). O número de série temporal ativas para um único recurso monitorado excedeu o limite de 200.000 séries ativas em um período de 24 horas. Para métricas do Prometheus, o limite é de 1 milhão de séries ativas. Isso geralmente acontece quando IDs efêmeros, como IDs de contêiner, UUIDs de pod, IDs de solicitação, IDs de usuário ou carimbos de data/hora, são incluídos em rótulos de métricas em recursos de rotatividade.
    • Resolução:
      • Remova rótulos efêmeros ou de alta cardinalidade das suas métricas.
      • Se você precisar rastrear métricas para tarefas temporárias individuais, use o tipo de recurso monitorado generic_task em vez de tipos específicos de recursos, como dataflow_job. Mapeie o identificador efêmero para o rótulo task_id do recurso generic_task.
  • Your Metric Ingestion quota has been exhausted

    • Causa:o projeto excedeu a cota de taxa de ingestão da API.
    • Resolução:faça gravações em lote de série temporal de até 200 séries por solicitação ou peça um aumento de cota na página "Cotas" no console do Google Cloud .
  • Your Metric Descriptors quota has been exhausted

    • Causa:o projeto atingiu o limite máximo de 10.000 descritores de métricas personalizadas por projeto. Para métricas do Prometheus, esse limite é de 25.000 por projeto.
    • Resolução:exclua os descritores de métricas não usados usando projects.metricDescriptors.delete ou reduza a nomenclatura dinâmica de métricas.
  • Rate of metric descriptor creation exceeded

    • Causa:o projeto tentou criar novos descritores de métrica mais rápido do que 6.000 por minuto em cada projeto.
    • Resolução:evite criar tipos de métricas dinamicamente durante a ingestão de dados. Pré-crie descritores sempre que possível.

Como repetir erros de API

Dois dos códigos de erro das APIs do Cloud indicam circunstâncias em que pode ser útil repetir a solicitação:

  • 503 UNAVAILABLE: novas tentativas serão úteis se o problema for uma condição de curta duração ou temporária.
  • 429 RESOURCE_EXHAUSTED: novas tentativas são úteis, após um atraso, para trabalhos em segundo plano de longa duração com cota baseada em tempo, como n chamadas por t segundos. As novas tentativas não são úteis quando o problema é uma condição de curta duração ou temporária ou quando você esgotou uma cota baseada em volume. Em condições transitórias, considere tolerar a falha. Para problemas relacionados a cotas, reduza o uso ou solicite um aumento.

Ao escrever um código que possa repetir solicitações, primeiro verifique se é seguro repeti-las.

É seguro repetir a solicitação?

Se a solicitação for idempotente, é seguro tentar novamente. Uma ação idempotente é aquela em que qualquer alteração no estado não depende do estado atual. Exemplo:

  • A leitura de x é idempotente, não haverá alteração no valor.
  • Definir x como 10 é idempotente. Isso pode alterar o estado, se o valor já não for 10, mas não importa qual é o valor atual e nem quantas vezes você tenta definir o valor.
  • Fazer um acréscimo em x não é idempotente. O novo valor depende do valor atual.

Repetição com espera exponencial

Ao implementar o código para repetir solicitações, você não quer emitir novas solicitações rápidas indefinidamente. Se um sistema estiver sobrecarregado, essa abordagem contribui para o problema.

Em vez disso, use uma abordagem de espera exponencial truncada. Quando as solicitações falham devido a sobrecargas temporárias em vez de indisponibilidade real, a solução é reduzir a carga. Uma espera exponencial truncada segue este padrão geral:

  • Estabeleça quanto tempo você pretende esperar ao tentar novamente ou quantas tentativas você pretende fazer. Quando esse limite for excedido, considere o serviço indisponível e lide com essa condição do aplicativo da maneira apropriada. Isso é o que cria a espera truncada, você parar de tentar novamente em algum momento.

  • Tente fazer a solicitação novamente com pausas cada vez mais longas para aumentar a espera da frequência das novas tentativas. Tente novamente até que a solicitação seja bem-sucedida ou o limite estabelecido seja atingido.

    O intervalo normalmente é aumentado por alguma função da potência da contagem de novas tentativas, tornando-a uma espera exponencial.

Há muitas maneiras de implementar uma espera exponencial. Veja um exemplo que adiciona um atraso de espera crescente a um atraso mínimo de 1.000 ms. O atraso inicial é de 2 ms e aumenta para 2retry_count ms a cada tentativa.

A tabela a seguir mostra os intervalos de repetição usando os valores iniciais:

  • Atraso mínimo = 1 s = 1.000 ms
  • Espera inicial = 2 ms
Contagem de repetições Atraso adicional (ms) Repetir após (ms)
0 20 = 1 1001
1 21 = 2 1002
2 22 = 4 1004
3 23 = 8 1008
4 24 = 16 1016
n 2n 1.000 + 2n

É possível truncar o ciclo de repetição ao parar após n tentativas ou quando o tempo gasto exceder um valor razoável para seu aplicativo.

Para mais informações, consulte o artigo da Wikipédia espera exponencial.