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
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.
Verás lo siguiente mientras el agente de Debugger realiza la actualización canary:
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:
- Asegúrate de que la pestaña Logpoint (Punto de registro) esté seleccionada en el panel derecho.
- 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.
- Haz clic en el número de línea en la ubicación para agregar un punto de registro.
- 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.
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):
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 esFILE:LINE
, en el queFILE
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
ocom.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 noStringBuilder.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 usarmyInteger.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
”:
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 Explorador de registros dedicado.
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 Historial del punto de registro (Logpoint History).
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.