Escribe y visualiza registros

Descripción general

Cuando se envía una solicitud a tu aplicación, App Engine escribe de forma automática un registro de solicitud. Durante el manejo de la solicitud, la app también puede escribir registros de aplicación. En esta página, aprenderás cómo escribir registros de aplicaciones desde tu aplicación, cómo ver registros en la consola de Google Cloud y cómo entender los datos de registro de la solicitud que App Engine escribe durante la solicitud. Para ver el contenido del paquete logs, consulta la referencia del paquete logs.

Para obtener más información sobre cómo descargar los datos de registro, consulta Descripción general de las exportaciones de registros.

Registros de solicitud frente a registros de aplicación

Existen dos categorías de datos de registro: los registros de solicitudes y los registros de aplicación. App Engine escribe automáticamente un registro de solicitud por cada solicitud controlada por tu aplicación, que contiene información como el ID del proyecto, la versión HTTP, entre otros datos. Para conocer una lista completa de todas las propiedades disponibles de los registros de solicitudes, consulta Registro. También puedes consultar la tabla de registro de solicitud para obtener descripciones de los campos de registro de solicitud.

Cada registro de solicitud contiene una lista de registros de aplicaciones (AppLog) asociada con esa solicitud, que se muestra en el campo Record.AppLog. Cada registro de aplicación contiene el mensaje, el nivel y la hora en que se escribió el registro.

Escribe registros de aplicación

El SDK de Go en App Engine permite que un desarrollador registre los siguientes niveles de gravedad:

  • Depuración
  • Advertencia
  • Información
  • Error
  • Crítico

En el fragmento siguiente, se muestra cómo escribir entradas de registro:

import (
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/datastore"
	"google.golang.org/appengine/log"
)

func logHandler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)

	post := &Post{Body: "sample post"}
	key := datastore.NewIncompleteKey(ctx, "Posts", nil)
	if _, err := datastore.Put(ctx, key, post); err != nil {
		log.Errorf(ctx, "could not put into datastore: %v", err)
		http.Error(w, "An error occurred. Try again.", http.StatusInternalServerError)
		return
	}
	log.Debugf(ctx, "Datastore put successful")

	w.Write([]byte("ok!"))
}

Formato de URL de registro en la consola de Google Cloud

Observa la siguiente URL de muestra para ver un ejemplo del formato de URL de registro en la consola de Google Cloud:

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Lee registros en Console

Si deseas ver los registros escritos por aplicaciones que se ejecutan en el entorno estándar, usa el Explorador de registros.

Un registro característico de App Engine contiene datos en formato de registro combinado Apache, junto con algunos campos especiales de App Engine, como figura en el siguiente registro de muestra:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Cómo entender los campos de registro de solicitud

En la siguiente tabla, se muestran los campos en orden de aparición junto con una descripción:

Orden del campo Nombre del campo ¿Siempre presente? Descripción
1 Dirección del cliente Dirección IP de cliente. Ejemplo: 192.0.2.0
2 Identidad RFC 1413 No Identidad RFC 1413 del cliente. Casi siempre es el carácter -.
3 Usuario No Solo presente si la app usa la API de usuarios y si el usuario ya accedió. Este valor es la parte del “sobrenombre” de la Cuenta de Google; por ejemplo, si la Cuenta de Google es test@example.com, el sobrenombre que se registra en este campo es test.
4 Marca de tiempo Marca de tiempo de la solicitud. Ejemplo: [27/Jun/2014:09:11:47 -0700]
5 String de consulta de la solicitud Primera línea de la solicitud; contiene el método, la ruta y la versión HTTP. Ejemplo: GET / HTTP/1.1
6 Código de estado HTTP Código de estado HTTP que se muestra. Ejemplo: 200
7 Tamaño de la respuesta Tamaño de la respuesta en bytes. Ejemplo: 414
8 Ruta del referente No En caso de que no haya referente, el registro no contendrá una ruta, sino solo -. Ejemplo de ruta del referente: "http://www.example.com/index.html".
9 Usuario-agente Identifica el navegador y el sistema operativo para el servidor web. Ejemplo: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nombre de host El nombre de host que el cliente usa para conectarse a la aplicación de App Engine. Ejemplo: (1-dot-calm-sylph-602.appspot.com).
11 Tiempo real transcurrido Tiempo real total expresado en milisegundos que App Engine dedica a la solicitud. Este intervalo de tiempo no incluye el tiempo que le toma al cliente y al servidor ejecutar la instancia de tu aplicación. Ejemplo: ms=195.
12 Milisegundos de la CPU Milisegundos de la CPU requeridos para completar la solicitud. Es la cantidad real de milisegundos que a la CPU le toma ejecutar el código de la aplicación, expresado en términos de una CPU de modelo de referencia de 1.2 GHz de Intel x86. Si la CPU que se usa es más rápida que el modelo de referencia, los milisegundos de la CPU pueden ser más que el tiempo real definido con anterioridad. Ejemplo: cpu_ms=42
13 Código de salida No Solo está presente si la instancia se cerró después de recibir la solicitud. Tiene el formato exit_code=XXX, en el que XXX es un número de 3 dígitos que corresponde a la razón por la que se cerró la instancia. Los códigos de salida no se documentan, ya que su objetivo principal es ayudar a Google a encontrar y solucionar problemas.
14 Costo estimado OBSOLETO. Costo estimado de 1,000 solicitudes como esta, en dólares. Ejemplo: cpm_usd=0.000046
15 Nombre de la lista de tareas en cola No El nombre de la lista de tareas en cola usado. Solo está presente si la solicitud usó una lista de tareas en cola. Ejemplo: queue_name=default
16 Nombre de la tarea No El nombre de la tarea que se ejecutó en la lista de tareas en cola para esta solicitud. Solo está presente si la solicitud dio como resultado poner en cola una tarea. Ejemplo: task_name=7287390692361099748
17 Cola pendiente No Solo está presente si una solicitud estuvo algún tiempo en una cola pendiente. Si existen muchas de estas en tus registros o si los valores son altos, eso podría indicar que necesitas más instancias para entregar el tráfico. Ejemplo: pending_ms=195
18 Solicitud de carga No Solo está presente si la solicitud es una solicitud de carga. Esto significa que se tuvo que iniciar una instancia. Lo ideal es que tus instancias funcionen bien por el mayor tiempo posible y que entreguen una gran cantidad de solicitudes antes de reciclarse y tener que iniciarse de nuevo. Eso implica que no deberías ver demasiadas de estas en tus registros. Ejemplo: loading_request=1.
19 Instancia Identificador único de la instancia que controla la solicitud. Ejemplo: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versión La versión de actualización de App Engine actual que se usa en App Engine de producción:

Cuotas y límites

Tu aplicación se ve afectada por las siguientes cuotas relacionadas con registros:

  • Datos de registros recuperados mediante la API de registros
  • Asignación y retención de transferencia de registro

Cuota correspondiente a los datos recuperados

Los primeros 100 megabytes de datos de registro recuperados por día mediante las llamadas a la API de registros son gratuitos. Los datos que superen los 100 megabytes generarán cargos de $0.12 por GB.

Asignación de transferencia de registros

El registro para las apps de App Engine se proporciona mediante Google Cloud Observability. Consulta los precios de Google Cloud Observability para obtener más información sobre los límites y los costos de los registros. Para el almacenamiento de los registros a largo plazo, puedes exportar registros de Google Cloud Observability a Cloud Storage, BigQuery y Pub/Sub.

El servidor de desarrollo y la API de registros

Por la configuración predeterminada, los registros se almacenan en la memoria únicamente en el servidor de desarrollo, y se puede acceder a ellos si deseas probar la función de la API de registros. Si deseas conservar los registros del servidor de desarrollo en un disco en la ubicación que elijas, proporciona la ruta de acceso y el nombre de archivo deseados en la opción de línea de comandos --logs_path como se indica a continuación:

   python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --logs_path=your-path/your-logfile-name your-app-directory