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.
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 locationo bienUnrecognized 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-central1ous-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étricasCUMULATIVEoDELTA, 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 valueo bienField 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.endTimeo bienField 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
- Métrica:
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>=ERRORUsa 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_seriesde la solicitud estaba vacío. - Solución: Incluye al menos un objeto
TimeSeriesen cada solicitud.
- Causa: El array
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.
- Causa: La solicitud contiene más de 200 objetos
Field points had an invalid value: Only one point can be written per TimeSeries per request- Causa: Un solo objeto
TimeSeriescontiene más de una entrada en su campopoints. - Solución: Proporciona exactamente un
Pointpor objetoTimeSeriespor solicitud. Para escribir varios datos a lo largo del tiempo para la misma métrica, envíalos en solicitudes separadas.
- Causa: Un solo objeto
Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request- Causa: Dos o más objetos
TimeSeriesen 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.
- Causa: Dos o más objetos
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.typetiene 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>oworkload.googleapis.com/<name>.
- Causa: El
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
MetricDescriptorexistente 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 bienField 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_idoresource_containerespecificada enresource.labelsno coincide con el ID o el número del proyecto en el nombre de la solicitud. - Resolución: Establezca la etiqueta del recurso
project_idpara que coincida con el proyecto de solicitud, u omita la etiquetaproject_idderesource.labelspara que se establezca por defecto en el proyecto de solicitud.
- Causa: La etiqueta
unrecognized resource type "[RESOURCE_TYPE]"omissing resource type- Causa: Cloud Monitoring no reconoce el
resource.typeo se omite para una métrica no personalizada. - Solución: Usa un tipo de recurso supervisado válido, como
gce_instance,k8s_container,generic_taskoglobal.
- Causa: Cloud Monitoring no reconoce el
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_timedel 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.
- Causa: La
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
GAUGEen el questart_timeno es igual aend_time. - Resolución: Para las métricas de
GAUGE, establecestart_timecomo igual aend_timeo bien omitestart_time.
- Causa: Se envió un punto 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: Un punto de métrica
CUMULATIVEoDELTAtiene un valorstart_timemayor o igual que el valorend_time. - Resolución: Asegúrate de que el valor de
start_timesea menor que el valor deend_timey represente un intervalo de tiempo distinto de cero.
- Causa: Un punto 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: 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]ometric 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 elMetricDescriptorexistente. - 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.
- Causa: El tipo de valor entrante (
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
STRINGsupera 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.
- Causa: Un punto de métrica de tipo de valor
Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric- Causa: Un punto
DISTRIBUTIONno especificabucket_options. - Resolución: Define
linear_buckets,exponential_bucketsoexplicit_bucketspara las métricas de distribución.
- Causa: Un punto
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_countsno es igual al campocount. - Resolución: Asegúrate de que la suma de todos los recuentos de bucket sea igual a la muestra
count.
- Causa: La suma de los recuentos en
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
DELTAa través detimeSeries.create. - Resolución: Usa las métricas
GAUGEoCUMULATIVEde Prometheus, o bien transfiérelas a través de los extremos de OTLP de Google Cloud Managed Service para Prometheus.
- Causa: La solicitud intentó escribir métricas de 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.createen el proyecto de destino. - Solución: Otorga el rol
Monitoring Metric Writer(roles/monitoring.metricWriter) a la cuenta de servicio o a la principal.
- Causa: El llamador no tiene el permiso
Billing check failed for project [PROJECT_ID]oBilling 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.comostorage.googleapis.com. - Resolución: Usa dominios de métricas personalizadas, como
custom.googleapis.com/oworkload.googleapis.com/.
- Causa: La persona que llama intentó escribir métricas personalizadas directamente en dominios reservados del sistema, como
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_tasken lugar de tipos específicos del recurso, comodataflow_job. Asigna el identificador efímero a la etiquetatask_iddel recursogeneric_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.deleteo 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.