Puntos de registro de depuración

Después de implementar o iniciar tu aplicación, puedes abrir el Depurador de Cloud en Google Cloud Console. Cloud Debugger te permite incorporar registros en servicios en ejecución sin reiniciar ni interferir en el funcionamiento normal del servicio. Esto es útil para depurar problemas de producción sin necesidad de agregar instrucciones de registro y volver a implementar.

Visita la página de Depuración de Cloud Console para usar Google Cloud Debugger.

Antes de comenzar

Cloud Debugger se puede usar con o sin acceso al código fuente de la aplicación. Si el código fuente no está disponible, consulta Agrega un punto de registro de depuración a continuación para obtener instrucciones sobre cómo ingresar el nombre del archivo y el número de línea de manera manual.

Si el código fuente no está almacenado en Google Cloud Repositories, se muestra de manera automática en la vista de Depuración.

Para poder acceder a un código fuente almacenado en otro lado, como una ubicación local o un repositorio de Git, es posible que debas seleccionar una ubicación de código fuente.

Puntos de registro

Los puntos de registro te permiten incorporar registros en servicios en ejecución sin reiniciar ni interferir en el funcionamiento normal del servicio. Cada vez que una instancia ejecuta código en la ubicación del punto de registro, Cloud Debugger registra un mensaje. El resultado se envía al registro correspondiente para el entorno del destino. En App Engine, por ejemplo, el resultado se envía al registro de solicitud en Cloud Logging.

Los puntos de registro permanecen activos durante 24 horas luego de su creación, o hasta que se borran o se vuelva a implementar el servicio.

Agente de Debugger con canary

Una vez que configuras un punto de registro, el agente de Debugger prueba el punto de registro en un subconjunto de tus instancias. Después de que el agente de Debugger verifica que el punto de registro se pueda ejecutar correctamente, el punto de registro se aplica a todas tus instancias. El proceso demora unos 40 segundos.

Después de este proceso, cuando el punto de registro se activa, el agente de Debugger registra el mensaje. Si el punto de registro se activa dentro de los 40 segundos posteriores a su configuración, el agente de Debugger registra el mensaje de esas instancias a las que se le aplicó el punto de registro versión canary.

El agente de Debugger implementa varias estrategias para minimizar la cantidad de latencia generada cuando se capturan los datos.

Verás lo siguiente mientras el agente de Debugger realiza la actualización canary:

El agente de Debugger realiza actualizaciones canary de instancias

Para obtener información sobre qué hacer si el agente de Debugger falla en el modo de Canary, ve a la sección de solución de problemas en la página de instantáneas de depuración.

Para conocer qué versiones del agente de Debugger tienen la funcionalidad canary, consulta las páginas específicas del lenguaje.

Agente de Debugger sin canary

Cuando usas el agente de Debugger sin canary y estableces un punto de registro, se aplica a todas las instancias en ejecución de tu app. La primera vez que una instancia ejecuta el código en la ubicación del punto de registro, el agente de Debugger registra el mensaje. El agente de Debugger implementa varias estrategias para minimizar la cantidad de latencia generada cuando se capturan los datos.

Agrega un punto de registro de depuración

Console

Para agregar un punto de registro desde Cloud Console, sigue estos pasos:

  1. Asegúrate de que la pestaña Logpoint (Punto de registro) esté seleccionada en el panel derecho.
  2. En el panel izquierdo, selecciona el archivo que contiene el código fuente en el que quieres agregar el punto de registro. El contenido del archivo se muestra en el panel central.
  3. Haz clic en el número de línea en la ubicación para agregar un punto de registro.
  4. Completa el mensaje en el campo logpoint("") y haz clic en el botón Agregar. Puedes ingresar una expresión entre llaves, como {newScore.score}, para registrar su valor.

Agrega un punto de registro intercalado


Si no hay un código fuente disponible, puedes ingresar la línea de nombre de archivo y otros detalles de forma manual en el panel de Punto de registro (Logpoint):Agrega un punto de registro de manera manual

gcloud

Para agregar un punto de registro desde la línea de comandos, ingresa el siguiente código:

gcloud debug logpoints create LOCATION MESSAGE

Aquí:

  • LOCATION es el nombre del archivo y la línea en la que se configura el punto de registro. El formato es FILE:LINE, en el que FILE puede ser el nombre del archivo o el nombre del archivo precedido por los componentes de la ruta de acceso suficientes como para diferenciarlos de otros archivos con el mismo nombre. Es un error proporcionar un nombre de archivo que no sea único en el destino de depuración.
  • MESSAGE es el mensaje que deseas registrar.

En el ejemplo siguiente, se registra el valor de score en el nivel de registro info (que es el nivel de registro predeterminado para los puntos de registro):

gcloud debug logpoints create HighScoreService.java:105 \
  "User {name} scored {newScore.score}"

Cuando se ejecuta la línea 105 de HighScoreService.java executes, el mensaje se registra con los valores de las variables name y newScore.score que se insertan en la string de resultado.

Formato del mensaje de punto de registro

El mensaje de un punto de registro determina cuál es la información que se registra en el resultado. Las expresiones te permiten evaluar y registrar valores de interés. Cualquier información en el mensaje entre llaves {myObj.myFunc()} o {a + b} se reemplazará por el valor de esa expresión en el resultado. En el mensaje User {name} scored {newScore.score} del ejemplo anterior, se registrará un resultado similar a User user1 scored 99.

Puedes usar las siguientes funciones de lenguaje para las expresiones:

Java

Se admiten la mayoría de las expresiones de Java, incluidas las siguientes opciones:
  • Variables locales: a == 8.
  • Operaciones numéricas y booleanas: x + y < 20.
  • Instancia y campos estáticos: this.counter == 20, this.myObj.isShutdown, myStatic o com.mycompany.MyClass.staticMember.
  • Comparaciones de strings con el operador de igualdad: myString == "abc".
  • Llamadas a la función. Solo se pueden usar funciones de solo lectura. Por ejemplo, se admite StringBuilder.indexOf(), pero no StringBuilder.append().
  • Conversión de tipos, con tipos completamente calificados: ((com.myprod.ClassImpl) myInterface).internalField

No se admiten las siguientes funciones de lenguaje:

  • La extracción de tipos numéricos, como Integer; debes usar myInteger.value en su lugar.

Python

Se admiten la mayoría de las expresiones de Python, incluidas las siguientes opciones:
  • Lectura de variables locales y globales
  • Lectura de arreglos, listas, segmentos, diccionarios y objetos
  • Llamada de métodos sencillos

No se admiten las siguientes funciones de lenguaje:

  • Llamada a funciones que asignan objetos nuevos o usan construcciones complejas
  • Creación de objetos nuevos dentro de la expresión

Go

Se admite la mayoría de las sintaxis de expresión de Go, incluidas las siguientes opciones:
  • Lectura de variables locales y globales
  • Lectura de arreglos, segmentos, mapas y estructuras

No se admiten las siguientes funciones de lenguaje:

  • Lectura de valores de interfaz
  • Tipo de conversiones y literales de composición
  • Llamadas a funciones que no sean len

Condición de punto de registro

La condición de punto de registro es una expresión simple en el lenguaje de la aplicación que se debe evaluar como verdadera para que el punto de registro se registre. Las condiciones de punto de registro se evalúan cada vez que una instancia ejecuta una línea, hasta que se venza o se borre el punto de registro.

La condición es una expresión booleana completa que puede incluir operadores lógicos:

travelAccessory == “Towel”
ultimateAnswer <= 42
travelAccessory == “Towel” && ultimateAnswer <= 42

Las mismas funciones de lenguaje que se admiten para las expresiones están disponibles para las condiciones.

Console

Ingresa la condición dentro de la declaración “if”:

Configura una condición intercalada

Si no hay un código fuente disponible, puedes especificar la condición en el panel Punto de registro.

gcloud

Las condiciones se expresan con la marca --condition de logpoints create:

gcloud debug logpoints create HighScoreService.java:105 
--condition="newScore.score > 40"
--log-level="warning"
"Suspiciously high score ({newScore.score}) from user {name}"

En el ejemplo anterior, el punto de registro verifica el valor de newScore.score cuando se ejecuta la línea 105 de la aplicación. Si el valor es mayor a 40, se agrega un mensaje de advertencia en el registro.

Visualiza el resultado

El resultado del punto de registro se envía al registro correspondiente para el entorno del destino.

App Engine

Los puntos de registro configurados en aplicaciones de App Engine envían sus resultados al registro de solicitudes en Cloud Logging.

Puedes ver los registros en el Panel de registros o en el Visor de registros dedicado.

Puntos de registro en el panel de registros

Compute Engine

Los puntos de registro configurados en apps de Compute Engine envían los resultados a la misma ubicación que las instrucciones de registro normales. Por ejemplo, en Python, el módulo de registro predeterminado envía su resultado a stdout, pero se puede configurar para que lo escriba en un archivo específico.

Puedes configurar el agente de Logging para que desvíe esos registros a Cloud Logging. Allí, podrás ver los registros en el Visor de registros.

Borra puntos de registro

Luego de 24 horas, los puntos de registro se vuelven inactivos y dejan de registrar mensajes, y se borran de manera automática luego de 30 días. Puedes borrar puntos de registro de manera manual, lo que detendrá el registro y lo quitará del historial para referencias futuras. Sin embargo, ten en cuenta que si borras un punto de registro no se borrarán los mensajes de registro que ya se generaron.

Console

Para borrar un punto de registro de manera manual, usa el Menú ampliado en el panel Historial del punto de registro (Logpoint History).

Borrar puntos de registro

gcloud

Para borrar un punto de registro de manera manual, puedes identificarlo con su ID o con expresiones regulares en la ubicación del código:

gcloud debug logpoints delete HighScoreService.java:105

Debug target not specified. Using default target: default-1
This command will delete the following logpoints:

LOCATION                   CONDITION            LOG_LEVEL  LOG_MESSAGE_FORMAT                                             ID
HighScoreService.java:105                       INFO       User {name} scored {newScore.score}.                           53aaa3bd8d2d7-b76f-feb5d
HighScoreService.java:105  newScore.score > 40  WARNING    Suspiciously high score ({newScore.score}) from user {name}  53aaa3bsdffd7-b56f-fasfg

Do you want to continue (Y/n)?  Y
Deleted 2 logpoints.