Puntos de registro de depuración

Después de implementar o iniciar tu aplicación, puedes abrir el Cloud Debugger en Google Cloud Console. Cloud Debugger te permite incorporar registros a 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 tu código fuente no está disponible, consulta Agrega un punto de registro de depuración a fin de obtener instrucciones para ingresar el nombre del archivo y el número de línea de forma 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. Si colocas un punto de registro en una línea que recibe mucho tráfico, Debugger regula el punto de registro para reducir el impacto en tu aplicación.

Agente de Debugger con canary

Después de configurar un punto de registro, el agente de Debugger lo prueba en un subconjunto de tus instancias. Después de que el agente de Debugger verifica que el punto de registro se pueda ejecutar de forma correcta, 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 en un plazo de 40 segundos después de configurarlo, el agente de Debugger registra el mensaje de esas instancias en las que se aplicó el punto de registro de la versión canary.

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

El siguiente texto se muestra cuando el agente de Debugger está canary:

"Verifica la interrupción en un subconjunto de instancias de aplicaciones."

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 de la versión 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 y selecciona Crear 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 {chars}, para registrar su valor.

Agrega un punto de registro intercalado.


Si no hay un código fuente disponible, puedes ingresar la orientación de forma manual como filename:line y otros detalles en el panel Punto de registro:

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 mensaje “Se agregó la instrucción de Logging” en el nivel de registro info (que es el nivel de registro predeterminado para los puntos de registro):

gcloud debug logpoints create main.py:28 \
  "Logging statement added"

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 del mensaje que aparezca entre llaves como {myObj.myFunc()} o {a + b} se reemplazará por el valor de esa expresión en el resultado.

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

Comienza a usarlo

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”:

Establezca 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 main.py:28 
--condition="chars > 1"
--log-level="info"
"Logging statement added"

En el ejemplo anterior, el punto de registro verifica la longitud de chars cuando se ejecuta la línea 28 de la aplicación. Si el valor es mayor que 1, se agrega un mensaje de nivel info al 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 Explorador de registros dedicado.

Punto 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 Explorador 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 Logpoint History (Historial del punto de registro). Selecciona Menú y selecciona Borrar punto de registro.

Borra un punto 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 main.py:28

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

LOCATION                   CONDITION            LOG_LEVEL  LOG_MESSAGE_FORMAT                                             ID
main.py:28                                      INFO       Logging statement added.                                       53aaa3bd8d2d7-b76f-feb5d

Do you want to continue (Y/n)?  Y
Deleted 1 logpoint.