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.
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 locationouUnrecognized 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-central1ouus-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étricasCUMULATIVEouDELTA, 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 valueouField 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.endTimeouField 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
- Métrica:
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>=ERRORUse 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_seriesna solicitação estava vazia. - Resolução:inclua pelo menos um objeto
TimeSeriesem cada solicitação.
- Causa:a matriz
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.
- Causa:a solicitação contém mais de 200 objetos
Field points had an invalid value: Only one point can be written per TimeSeries per request- Causa:um único objeto
TimeSeriescontém mais de uma entrada no campopoints. - Resolução: Forneça exatamente um
Pointpor objetoTimeSeriespor solicitação. Para registrar vários pontos de dados ao longo do tempo para a mesma métrica, envie-os em solicitações separadas.
- Causa:um único objeto
Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request- Causa:dois ou mais objetos
TimeSeriesna 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.
- Causa:dois ou mais objetos
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.typeestá 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>ouworkload.googleapis.com/<name>.
- Causa:o
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
MetricDescriptoratual 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])ouField 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_idouresource_containerespecificado emresource.labelsnão corresponde ao ID do projeto ou número no nome da solicitação. - Resolução:defina o rótulo
project_iddo recurso para corresponder ao projeto da solicitação ou omita o rótuloproject_idderesource.labelspara que ele seja definido como padrão para o projeto da solicitação.
- Causa:o rótulo
unrecognized resource type "[RESOURCE_TYPE]"oumissing resource type- Causa:o
resource.typenã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_taskouglobal.
- Causa:o
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_timedo 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.
- Causa:o
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
GAUGEfoi enviado quandostart_timenão é igual aend_time. - Resolução:para métricas de
GAUGE, definastart_timecomoend_timeou omitastart_time.
- Causa:um ponto de métrica
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
CUMULATIVEouDELTAtem um valorstart_timemaior ou igual ao valorend_time. - Resolução:verifique se o valor
start_timeé menor que o valorend_timee representa um intervalo de tempo diferente de zero.
- Causa:um ponto de métrica
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]oumetric 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 oMetricDescriptoratual. - 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.
- Causa:o tipo de valor de entrada (
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
STRINGexcede 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.
- Causa:um ponto de métrica do tipo de valor
Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric- Causa:um ponto
DISTRIBUTIONnão especificabucket_options. - Resolução:defina
linear_buckets,exponential_bucketsouexplicit_bucketspara métricas de distribuição.
- Causa:um ponto
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_countsnão é igual ao campocount. - Resolução:confira se a soma de todas as contagens de buckets é igual à amostra
count.
- Causa:a soma das contagens em
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
DELTApelotimeSeries.create. - Resolução:use métricas do Prometheus
GAUGEouCUMULATIVEou faça a ingestão pelos endpoints OTLP do Google Cloud Managed Service para Prometheus.
- Causa:a solicitação tentou gravar métricas do 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.createno projeto de destino. - Resolução:conceda o papel
Monitoring Metric Writer(roles/monitoring.metricWriter) à conta de serviço ou ao principal.
- Causa:o autor da chamada não tem a permissão
Billing check failed for project [PROJECT_ID]ouBilling 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.comoustorage.googleapis.com. - Resolução:use domínios de métrica personalizada, como
custom.googleapis.com/ouworkload.googleapis.com/.
- Causa:o caller tentou gravar métricas personalizadas diretamente em
domínios reservados pelo sistema, como
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_taskem vez de tipos específicos de recursos, comodataflow_job. Mapeie o identificador efêmero para o rótulotask_iddo recursogeneric_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.deleteou 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.