Soluciona problemas de la API de Monitoring

En esta guía, se explican algunos de los problemas que pueden surgir cuando usas la API de Monitoring v3.

La API de Monitoring es uno de los conjuntos de API de Cloud. Estas API comparten un conjunto común de códigos de error. Si deseas obtener una lista de los códigos de error definidos por las API de Cloud y sugerencias generales para manejar los errores, consulta Maneja los errores.

Usa el Explorador de API 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 API (Prueba esta API) en la página de referencia de ese método para depurar tu problema. Consulta Explorador de API para obtener más información.

Errores generales de la API

Estos son algunos de los errores y mensajes de la API de Monitoring que puedes ver a partir de tus llamadas a la API:

  • 404 NOT_FOUND

    • “La URL solicitada no se encontró en este servidor”: Parte de la URL es incorrecta. Compara la URL con la URL del método que se muestra en la página de referencia del método. Busca errores ortográficos (“proyecto” en lugar de “proyectos”) y problemas de mayúsculas (“TimeSeries” en lugar de “timeSeries”).

    • “projects/PROJECT_ID no es un lugar de trabajo” significa que el proyecto de Google Cloud que estás usando no forma parte de un lugar de trabajo de Cloud Monitoring. Los lugares de trabajo se usan para organizar la información de supervisión de los proyectos de Google Cloud, y la mayoría de los métodos de la API de Monitoring requieren que el proyecto sea parte de un lugar de trabajo. Para obtener más información, consulta Lugares de trabajo.

  • 401 UNAUTHENTICATED con el mensaje “El usuario no está autorizado para acceder al proyecto (o métrica)”. Puede ser un problema de autorización, pero también puede significar que escribiste mal un ID del proyecto o un nombre de tipo de métrica. Revisa la ortografía y el uso de mayúsculas.

    Si no usas el Explorador de API, intenta hacerlo. Si tu llamada a la API funciona en el Explorador de API, es probable que tengas un problema de autorización en el entorno que usas para tu llamada a la API. Consulta la página de administrador de la API a fin de verificar que la API de Monitoring v3 esté habilitada para tu proyecto.

  • 400 INVALID_ARGUMENT con el mensaje “El filtro de campo tenía un valor no válido”: Comprueba la ortografía y el formato de tu filtro de supervisión. Para obtener más información, consulta Filtros de supervisión.

  • 400 INVALID_ARGUMENT con el mensaje “A la solicitud le falta el campo interval.endTime”: Aparecerá este mensaje si falta la hora de finalización o si está presente, pero no tiene el formato correcto. Si usas el Explorador de API, no cites el valor del campo de tiempo.

    Estos son algunos ejemplos de especificaciones de hora correctas:

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

Resultados faltantes

Si tu llamada a la API muestra el código de estado 200 y una respuesta vacía, existen varias posibilidades:

  • Si tu 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 consulta si obtienes resultados. Agrega los otros componentes de filtro uno por uno para compilar la solicitud.

  • Si trabajas con una métrica personalizada, es posible que no hayas especificado el proyecto en el que se define tu métrica personalizada.

Si deseas recuperar los datos de series temporales mediante timeSeries.list y faltan algunos datos, verifica las siguientes causas adicionales:

  • Si los datos tienen más de unas semanas, es posible que hayan vencido. Si deseas obtener más información, consulta Retención de datos.

  • Si se escribieron datos, es posible que aún no esté en Monitoring. Para obtener más información, consulta Latencia de los datos de métricas.

  • Comprueba que hayas especificado de forma correcta el intervalo de tiempo:

    • Verifica que la hora de finalización sea correcta.
    • Comprueba que la hora de inicio sea correcta y que sea anterior a la de finalización. Si la hora de inicio falta o tiene un formato incorrecto, se usará de forma predeterminada en el valor de la hora de finalización, y el intervalo de tiempo coincidirá solo con los puntos cuyas horas de inicio y finalización sean exactamente la hora de finalización del intervalo. Esto es válido para las métricas GAUGE, que miden un punto en el tiempo, pero no para las métricas de CUMULATIVE o DELTA, que se miden entre intervalos de tiempo. Para obtener más información, consulta Intervalos de tiempo.

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 si el problema es una condición de corta duración o transitoria.
  • 429 RESOURCE_EXHAUSTED: los reintentos son útiles, después de una demora, solo para trabajos en segundo plano de larga duración con cuota basada en el tiempo. Por ejemplo, si estás limitado a n llamadas por t segundos. Pero si agotaste una cuota basada en el volumen, los reintentos no son útiles. debes aumentar tu cuota.

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 simple 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.