Soluciona problemas de la API de Monitoring

Para diagnosticar errores de la API, corregir rechazos de la transferencia de métricas y resolver la falta de resultados de la búsqueda cuando usas la API de Monitoring, puedes usar las técnicas de solución de problemas y las resoluciones de errores que se describen en esta guía.

La API de Monitoring forma parte de las API de Cloud. Para obtener una lista de los códigos de error compartidos y recomendaciones generales para controlarlos, consulta Controla errores.

Usa el Explorador de APIs para depurar

El Explorador de API es un widget integrado en las páginas de referencia de los métodos de la API. Te permite invocar el método si completas los campos; no necesitas escribir códigos.

Si tienes problemas con una invocación de método, usa el widget del Explorador de APIs (Prueba esta API) en la página de referencia de ese método para depurar tu problema. Para obtener más información, consulta el Explorador de APIs.

Errores generales de la API y de autenticación

En esta sección, se enumeran los códigos de error que pueden devolver diversos métodos de la API de Monitoring.

401 UNAUTHENTICATED

El código de error 401 UNAUTHENTICATED indica que faltan credenciales de OAuth2 o IAM, que vencieron o que no son válidas.

Los dos mensajes de error comunes para este código de error son Request is missing required authentication credential y User is not authorized to access the project (or metric).

  • Causa: Falta el encabezado Authorization: Bearer <token>, venció el token de OAuth2 o OIDC, o las credenciales de la cuenta de servicio no son válidas.
  • Solución: Actualiza los tokens de autenticación con las credenciales predeterminadas de la aplicación (ADC) o gcloud auth print-access-token. Además, verifica que la clave de la cuenta de servicio sea válida.
Si no usas el Explorador de APIs, intenta hacerlo. Cuando tu llamada a la API funciona en el Explorador de APIs, es probable que haya un problema de autorización en el entorno en el que realizas la llamada a la API. Ve a la página del administrador de la API para verificar que la API de Monitoring esté habilitada para tu proyecto.

403 PERMISSION_DENIED para el acceso al proyecto y la facturación

El código de error 403 PERMISSION_DENIED indica que no tienes los permisos necesarios para realizar la acción solicitada.

Hay varios mensajes de error diferentes que se pueden asociar con este código de error. Dos mensajes de error comunes son Billing check failed for project [PROJECT_ID] y Billing account disabled:

  • Causa: La facturación de Cloud está inhabilitada o suspendida en el proyectoGoogle Cloud . La transferencia de métricas personalizadas requiere una cuenta de facturación activa.
  • Solución: Vincula una cuenta de Facturación de Cloud activa al proyecto en la consola de Google Cloud .

Si recibes este código de error cuando escribes datos de métricas, consulta también 403 PERMISSION_DENIED cuando escribes datos de métricas.

404 NOT_FOUND

El código de error 404 NOT_FOUND indica que el ID del proyecto de destino no existe o que no se reconoce la región o la ubicación.

A continuación, se enumeran los mensajes de error comunes para este código de error:

  • Project [PROJECT_ID] not found

    • Causa: El proyecto especificado en el URI de solicitud no existe o se borró.
    • Resolución: Verifica la ortografía del ID del proyecto y asegúrate de que el proyecto esté activo en la consola de Google Cloud .
  • Unavailable region or location o bien Unrecognized region or location

    • Causa: La etiqueta de ubicación o región del recurso supervisado no es válida o no se reconoce.
    • Resolución: Usa nombres de región y zona Google Cloud válidos, como us-central1 o us-central1-a.
  • The requested URL was not found on this server

    • Causa: La ruta de acceso al recurso en la URL es incorrecta.
    • Solución: Compara la URL con la URL del método que se muestra en la página de referencia del método. Este error puede significar que hay un error ortográfico, como "proyecto" en lugar de "proyectos", o un error de capitalización, como "TimeSeries" en lugar de "timeSeries".

500 INTERNAL, 503 UNAVAILABLE, 504 DEADLINE_EXCEEDED

Hay dos mensajes de error comunes para estos códigos de error: Internal error encountered. Please retry after a few seconds y The service is currently unavailable.

  • Causa: Errores transitorios de infraestructura de backend, problemas de red o reequilibrio interno de la partición de la base de datos.
  • Resolución: Implementa una retirada exponencial truncada con jitter en los reintentos, comenzando con 1 segundo y hasta 32 segundos. Establece los plazos del cliente de RPC en 15 segundos o más. Para obtener más información, consulta Cómo reintentar errores de la API.

Resultados faltantes

Cuando una llamada a la API devuelve el código de estado 200 y una respuesta vacía, ten en cuenta lo siguiente:

  • Si la llamada usa un filtro, es posible que el filtro no coincida con ningún elemento. La coincidencia del filtro distingue mayúsculas de minúsculas. Para resolver problemas de filtro, comienza por especificar solo un componente de filtro, como metric.type, y verifica que obtengas resultados. Agrega los otros componentes de filtro uno por uno para compilar la solicitud.
  • Cuando trabajes con una métrica personalizada, verifica que se haya especificado el proyecto que define la métrica.

Existen varios motivos por los que podrían faltar puntos de datos cuando usas el método timeSeries.list:

  • Es posible que los datos hayan caducado. Si deseas obtener más información, consulta Retención de datos.

  • Es posible que los datos aún no se hayan propagado a Monitoring. Para obtener más información, consulta Latencia de los datos de métricas.

  • El intervalo no es válido por los siguientes motivos:

    • Verifica que la hora de finalización sea correcta.
    • Verifica que la hora de inicio sea correcta y que sea anterior a la hora de finalización. Cuando falta la hora de inicio o tiene un formato incorrecto, la API la establece como la hora de finalización. Para las métricas GAUGE, este intervalo de tiempo solo coincide con los puntos cuyas horas de inicio y finalización son exactamente la hora de finalización del intervalo. En el caso de las métricas CUMULATIVE o DELTA, que miden intervalos de tiempo, no se correlacionan puntos. Para obtener más información, consulta Intervalos de tiempo.

Errores al consultar los datos de métricas

En esta sección, se proporciona información sobre los errores que pueden ocurrir cuando lees datos de métricas con un método como timeSeries.list.

400 INVALID_ARGUMENT cuando se consultan datos de métricas

El código de error 400 INVALID_ARGUMENT indica algún tipo de error de validación del cliente. El mensaje de error asociado al código de error proporciona información más detallada y es específico del método de la API.

Por ejemplo, cuando consultes datos de métricas, es posible que recibas los siguientes mensajes:

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

    • Causa: Indica un problema con el filtro de supervisión.
    • Resolución: Para resolver el problema, verifica la ortografía y el formato del filtro. Para obtener más información, consulta Filtros de Monitoring.
  • Request was missing field interval.endTime o bien Field interval.endTime had an invalid value

    • Causa: Indica que falta la hora de finalización en la solicitud o que el valor tiene un formato incorrecto.
    • Resolución: Si usas el Explorador de APIs, no cites el valor del campo de tiempo. Los siguientes son 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
      ```
      

Errores al escribir datos de métricas

En esta sección, se proporciona información sobre los errores que pueden ocurrir cuando usas el método timeSeries.create para escribir datos de métricas, incluidos los siguientes:

  • Es un resumen de los códigos de error.
  • Es una lista de mensajes de error asociados a cada código de error. Estas entradas incluyen tanto una causa como información sobre la resolución. Los errores generales de la API también se aplican al método create.

Si no habilitas los registros de auditoría de acceso a los datos para Monitoring, es posible que las fallas con el método timeSeries.create no se registren. Sin embargo, puedes hacer lo siguiente:

  • Usa el Explorador de métricas para obtener información sobre las tasas de errores. Usa la siguiente configuración:

    • Métrica: monitoring.googleapis.com/api/request_count
    • Filtro: method = "google.monitoring.v3.MetricService.CreateTimeSeries"
    • Agregación: Agrupar por response_code
  • Usa el Explorador de registros para consultar tus registros de actividad del administrador, que el sistema crea cuando intenta crear automáticamente un descriptor de métrica y esa acción falla. Para ver estas entradas de registro, ejecuta la siguiente consulta después de reemplazar PROJECT_ID por el ID de tu proyecto 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
    
  • Usa el Explorador de registros para consultar tus registros del cliente.

Si habilitas los registros de auditoría de acceso a los datos para Cloud Monitoring, el sistema escribirá una entrada de registro para cada acceso a los datos. En particular, estas entradas de registro incluyen detalles sobre la cantidad de puntos que no se pudieron escribir y la causa de la falla:

  • Si deseas obtener información para habilitar los registros de auditoría de acceso a los datos, consulta Configura registros de auditoría de acceso a los datos.

  • Para ver estas entradas de registro, usa el Explorador de registros y ejecuta la siguiente consulta después de reemplazar PROJECT_ID por el ID de tu proyecto deGoogle Cloud :

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

Resumen de los códigos de error de timeSeries.create

HTTP Code Código de estado de gRPC Causas principales
400 INVALID_ARGUMENT Error de validación de la carga útil: tamaño del lote, tamaño o clave de la etiqueta, orden de la marca de tiempo, discrepancia de esquema o tipo, estructura del histograma de distribución.
400 FAILED_PRECONDITION Se superó la frecuencia de muestreo, el tipo de métrica no es compatible o la llegada tardía fuera del período de retención.
401 UNAUTHENTICATED Faltan credenciales de OAuth2 o de IAM, o bien no son válidas o vencieron.
403 PERMISSION_DENIED Falta el rol de roles/monitoring.metricWriter IAM, se inhabilitó Facturación de Cloud o se intentó escribir sin autorización en dominios de métricas del sistema reservados.
404 NOT_FOUND No existe el ID del proyecto de destino o no se reconoce la región o ubicación.
429 RESOURCE_EXHAUSTED Se superó el límite de cardinalidad de series temporales activas en un recurso supervisado, se alcanzaron los límites de descriptor de métrica del proyecto o se superaron los límites de porcentaje de solicitudes a la API.
500 INTERNAL Falla del servicio de almacenamiento interno o de esquema.
503 UNAVAILABLE Indica que el servicio de backend no está disponible de forma transitoria.
504 DEADLINE_EXCEEDED Se agotó el tiempo de espera de la solicitud antes de escribir los puntos de datos en los nodos de almacenamiento.

400 INVALID_ARGUMENT cuando se escriben datos de métricas

400 INVALID_ARGUMENT indica errores de validación del cliente en la estructura de la solicitud, los metadatos de la métrica, las definiciones de etiquetas, la alineación de la marca de tiempo o los valores de puntos.

Incumplimientos relacionados con la estructura de la solicitud y el procesamiento por lotes

En la siguiente lista, se incluyen los mensajes de error relacionados con incumplimientos de la estructura y el procesamiento por lotes:

  • Request was missing field timeSeries

    • Causa: El array time_series de la solicitud estaba vacío.
    • Solución: Incluye al menos un objeto TimeSeries en cada solicitud.
  • The maximum number of TimeSeries objects per Create request is 200

    • Causa: La solicitud contiene más de 200 objetos TimeSeries.
    • Resolución: Agrupa las escrituras en lotes de no más de 200 series temporales por solicitud.
  • Field points had an invalid value: Only one point can be written per TimeSeries per request

    • Causa: Un solo objeto TimeSeries contiene más de una entrada en su campo points.
    • Solución: Proporciona exactamente un Point por objeto TimeSeries por solicitud. Para escribir varios datos a lo largo del tiempo para la misma métrica, envíalos en solicitudes separadas.
  • Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request

    • Causa: Dos o más objetos TimeSeries en la misma solicitud comparten tipos de métricas, etiquetas de métricas y etiquetas de recurso supervisado idénticos.
    • Resolución: Elimina las series temporales duplicadas en los lotes del cliente para que cada serie temporal única aparezca como máximo una vez por solicitud.
  • user defined metrics are not supported on the metric domain "[DOMAIN]"

    • Causa: No se admiten las métricas definidas por el usuario en el dominio especificado.
    • Resolución: Ninguna.

Restricciones de etiquetas y nombres

En la siguiente lista, se incluyen los mensajes de error relacionados con las etiquetas y las restricciones de nomenclatura:

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

    • Causa: El valor de una etiqueta de métrica o recurso supera los 1,024 caracteres.
    • Resolución: Configura tu recopilador o aplicación para truncar los valores de etiquetas a 1,024 caracteres o menos. Evita almacenar texto de gran volumen en etiquetas de métricas; en su lugar, escribe estos detalles en Cloud Logging.
  • Field metric.labels had an invalid value of "[KEY]": Label key contains invalid characters

    • Causa: Una clave de etiqueta contiene caracteres fuera del patrón permitido. Las claves pueden contener caracteres alfanuméricos y guiones bajos, deben tener 100 caracteres o menos y deben comenzar con una letra.
    • Resolución: Cambia el nombre de las claves de etiqueta para usar solo caracteres válidos.
  • The metric type must be a URL-formatted string with a domain and non-empty path

    • Causa: El metric.type tiene errores de formato o le falta un prefijo de dominio.
    • Resolución: Da formato a los tipos de métricas personalizadas como custom.googleapis.com/<category>/<name> o workload.googleapis.com/<name>.
  • Field metric.labels had an invalid value: The metric [METRIC_NAME] has more than [LIMIT] labels

    • Causa: La cantidad de etiquetas en un descriptor de métrica personalizada supera las 30 o, en el caso de las métricas de Prometheus, supera las 200.
    • Resolución: Quita las etiquetas innecesarias para no superar el límite de descriptores.
  • unrecognized metric label "[LABEL_KEY]"

    • Causa: El descriptor de métrica ya existe, pero la solicitud proporciona una clave de etiqueta que no está definida en el descriptor.
    • Resolución: Asegúrate de que las claves de la etiqueta coincidan con el MetricDescriptor existente o crea un descriptor de métrica nuevo si se necesita modificar el esquema.

No coinciden los identificadores de proyectos y recursos

A continuación, se enumeran los mensajes de error relacionados con las discrepancias entre los identificadores de proyectos y recursos:

  • 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]) o bien 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: La etiqueta project_id o resource_container especificada en resource.labels no coincide con el ID o el número del proyecto en el nombre de la solicitud.
    • Resolución: Establezca la etiqueta del recurso project_id para que coincida con el proyecto de solicitud, u omita la etiqueta project_id de resource.labels para que se establezca por defecto en el proyecto de solicitud.
  • unrecognized resource type "[RESOURCE_TYPE]" o missing resource type

    • Causa: Cloud Monitoring no reconoce el resource.type o se omite para una métrica no personalizada.
    • Solución: Usa un tipo de recurso supervisado válido, como gce_instance, k8s_container, generic_task o global.

Marcas de tiempo e intervalos

A continuación, se enumeran los mensajes de error relacionados con las marcas de tiempo y los 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: La end_time del punto de datos es anterior o igual a la marca de tiempo del punto de datos más reciente previamente ingerido para esa serie temporal.
    • Resolución: Ingresa los puntos estrictamente en orden cronológico.
  • 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: Se envió un punto de métrica GAUGE en el que start_time no es igual a end_time.
    • Resolución: Para las métricas de GAUGE, establece start_time como igual a end_time o bien omite 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: Un punto de métrica CUMULATIVE o DELTA tiene un valor start_time mayor o igual que el valor end_time.
    • Resolución: Asegúrate de que el valor de start_time sea menor que el valor de end_time y represente un intervalo de tiempo distinto de cero.
  • Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than 5m into the future.

    • Causa: La marca de tiempo del punto está más de 5 minutos adelantada con respecto a la hora actual del servidor.
    • Resolución: Sincroniza el reloj del sistema con el NTP público de 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: La marca de tiempo del punto es anterior al horizonte de retención en la memoria, que es de 24 horas.
    • Resolución: Escribe datos en tiempo real dentro de las 24 horas posteriores a su generación.

Tipos y distribuciones de valores

En las siguientes listas, se incluyen mensajes de error relacionados con los tipos y las distribuciones de valores:

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

    • Causa: El tipo de valor entrante (INT64, DOUBLE, STRING, BOOL, DISTRIBUTION) o el tipo de métrica (GAUGE, DELTA, CUMULATIVE) entra en conflicto con el MetricDescriptor existente.
    • Resolución: Asegúrate de que los tipos de datos coincidan con el descriptor existente. Los tipos de valores y las categorías de métricas no se pueden modificar después de la creación.
  • Field points[0].value had an invalid value: The metric value exceeds the maximum string size of 1024 characters

    • Causa: Un punto de métrica de tipo de valor STRING supera los 1,024 caracteres.
    • Solución: Trunca los valores de las métricas de cadena a 1,024 caracteres o menos, o bien envía los registros a Cloud Logging.
  • Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric

    • Causa: Un punto DISTRIBUTION no especifica bucket_options.
    • Resolución: Define linear_buckets, exponential_buckets o explicit_buckets para las métricas de distribución.
  • 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: La suma de los recuentos en bucket_counts no es igual al campo count.
    • Resolución: Asegúrate de que la suma de todos los recuentos de bucket sea igual a la muestra count.
  • Field points[0].value had an invalid value: Distribution metric has too many buckets

    • Causa: La cantidad de buckets del histograma supera los 200.
    • Resolución: Ajusta los parámetros del bucket para mantener el recuento total de buckets en 200 o menos.

400 FAILED_PRECONDITION

En la siguiente lista, se indican los mensajes de error relacionados con este código de error:

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

    • Causa: Los puntos para la misma serie temporal se enviaron más rápido que la tasa máxima permitida de un punto cada 5 segundos.
    • Resolución: Limita la velocidad de la transferencia de datos para que los puntos consecutivos de una serie temporal específica estén separados por al menos 5 segundos.
  • ingestion of prometheus delta metrics is not supported in this API

    • Causa: La solicitud intentó escribir métricas de Prometheus DELTA a través de timeSeries.create.
    • Resolución: Usa las métricas GAUGE o CUMULATIVE de Prometheus, o bien transfiérelas a través de los extremos de OTLP de Google Cloud Managed Service para Prometheus.
  • One or more points arrived late outside of its aggregation window

    • Causa: Los puntos llegaron después del período de agregación para las métricas agregadas por recopilación.
    • Solución: Vacía y transmite puntos con latencias de búfer más bajas.

403 PERMISSION_DENIED cuando se escriben datos de métricas

Cuando escribes datos de métricas, puedes recibir una respuesta 403 PERMISSION_DENIED por motivos relacionados con el acceso al proyecto y la facturación, y por los siguientes motivos:

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

    • Causa: El llamador no tiene el permiso monitoring.timeSeries.create en el proyecto de destino.
    • Solución: Otorga el rol Monitoring Metric Writer (roles/monitoring.metricWriter) a la cuenta de servicio o a la principal.
  • Billing check failed for project [PROJECT_ID] o Billing account disabled

    • Causa: La facturación de Cloud está inhabilitada o suspendida en el proyectoGoogle Cloud . La transferencia de métricas personalizadas requiere una cuenta de facturación activa.
    • Solución: Vincula una cuenta de Facturación de Cloud activa al proyecto en la consola de Google Cloud .
  • User does not have permission to write to metric [METRIC]

    • Causa: La persona que llama intentó escribir métricas personalizadas directamente en dominios reservados del sistema, como compute.googleapis.com o storage.googleapis.com.
    • Resolución: Usa dominios de métricas personalizadas, como custom.googleapis.com/ o workload.googleapis.com/.

429 RESOURCE_EXHAUSTED

En la siguiente lista, se indican los mensajes de error relacionados con este código de error:

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

    • Causa: Se superó el límite de series temporales activas (alta cardinalidad). La cantidad de series temporales activas para un solo recurso supervisado superó el límite de 200,000 series activas en un período de 24 horas. En el caso de las métricas de Prometheus, el límite es de 1,000,000 de series activas. Esto suele ocurrir cuando se incluyen IDs efímeros, como IDs de contenedor, UUIDs de Pod, IDs de solicitud, IDs de usuario o marcas de tiempo, en las etiquetas de métricas de los recursos de rotación.
    • Resolución:
      • Quita las etiquetas efímeras o de alta cardinalidad de tus métricas.
      • Si debes hacer un seguimiento de las métricas de tareas efímeras individuales, usa el tipo de recurso supervisado generic_task en lugar de tipos específicos del recurso, como dataflow_job. Asigna el identificador efímero a la etiqueta task_id del recurso generic_task.
  • Your Metric Ingestion quota has been exhausted

    • Causa: El proyecto superó la cuota de frecuencia de transferencia de la API.
    • Resolución: Escribe series temporales por lotes de hasta 200 series por solicitud o solicita un aumento de cuota en la página Cuotas de la consola de Google Cloud .
  • Your Metric Descriptors quota has been exhausted

    • Causa: El proyecto alcanzó el límite máximo de 10,000 descriptores de métricas personalizados por proyecto. Para las métricas de Prometheus, este límite es de 25,000 por proyecto.
    • Solución: Borra los descriptores de métricas que no se usan con projects.metricDescriptors.delete o reduce el uso de nombres dinámicos para las métricas.
  • Rate of metric descriptor creation exceeded

    • Causa: El proyecto intentó crear descriptores de métricas nuevos a una velocidad superior a 6,000 por minuto por proyecto.
    • Solución: Evita crear dinámicamente nuevos tipos de métricas durante la transferencia de datos. Crea previamente los descriptores siempre que sea posible.

Reintenta errores de API

Dos de los códigos de error de las API de Cloud indican circunstancias en las que podría ser útil para reintentar la solicitud:

  • 503 UNAVAILABLE: Los reintentos son útiles cuando el problema es una condición de corta duración o transitoria.
  • 429 RESOURCE_EXHAUSTED: Los reintentos son útiles, después de una demora, para trabajos en segundo plano de larga duración con cuota basada en el tiempo, como n llamadas por t segundos. Los reintentos no son útiles cuando el problema es una condición transitoria o de corta duración, o cuando agotaste una cuota basada en el volumen. En el caso de las condiciones transitorias, considera tolerar la falla. Si tienes problemas relacionados con la cuota, considera reducir el uso de la cuota o solicitar un aumento.

Cuando escribas código que pueda reintentar las solicitudes, primero asegúrate de que la solicitud sea segura.

¿La solicitud es segura para reintentar?

Si tu solicitud es idempotente, entonces será seguro volver a intentarlo. Una acción idempotente es aquella en la que cualquier cambio de estado no depende del estado actual. Por ejemplo:

  • La lectura de x es idempotente. no hay cambios en el valor.
  • Establecer x en 10 es idempotente; esto podría cambiar el estado, si el valor no es 10, pero no importa cuál es el valor actual, y tampoco importa cuántas veces intentes configurar el valor.
  • Aumentar x no es idempotente, el valor nuevo depende del valor actual.

Vuelve a intentarlo con una retirada exponencial.

Cuando implementes código para reintentar las solicitudes, no querrás emitir nuevas solicitudes de forma indefinida. Si un sistema está sobrecargado, este enfoque contribuye al problema.

En su lugar, usa un enfoque de retirada exponencial truncada. Cuando las solicitudes fallan debido a sobrecargas transitorias en lugar de una verdadera disponibilidad, la solución reduce la carga. Una retirada exponencial truncada sigue el patrón general:

  • Establece el tiempo que estás dispuesto a esperar mientras reintentas o cuántos intentos quieres realizar. Cuando se excede este límite, considera que el servicio no está disponible y maneja esa condición de manera adecuada para la aplicación. Esto es lo que hace que la retirada se trunque, dejas de reintentar en algún momento.

  • Vuelve a intentar la solicitud con pausas cada vez más largas para retirar la frecuencia de reintentos. Vuelve a intentarlo hasta que la solicitud se complete de forma correcta o se alcance el límite establecido.

    Por lo general, el intervalo aumenta por una función del poder del reintento, lo que lo convierte en una retirada exponencial.

Hay muchas formas de implementar una retirada exponencial. El siguiente es un ejemplo que agrega una demora en la retirada creciente a un retraso mínimo de 1,000 ms. El retraso de retirada inicial es de 2 ms y aumenta a 2retry_countms con cada intento.

En la siguiente tabla, se muestran los intervalos de reintentos mediante los valores iniciales:

  • Retraso mínimo = 1 s = 1,000 ms
  • Retirada inicial = 2 ms
Conteo de repeticiones de intento Retraso adicional (ms) Reintentar después de (ms)
0 20 = 1 1001
1 21 = 2 1002
2 22 = 4 1004
3 23 = 8 1008
4 24 = 16 1016
n 2n 1000 + 2n

Puedes truncar el ciclo de reintentos mediante la detención después de n intentos o cuando el tiempo empleado exceda un valor razonable para tu aplicación.

Para obtener más información, consulta el artículo de Wikipedia Retirada exponencial.