Cómo registrar eventos de aplicaciones con Go

Esta parte del instructivo de Bookshelf muestra cómo una app puede incorporar registros detallados para ayudar a detectar, depurar y supervisar los posibles problemas. El registro de eventos puede ayudarte a identificar y resolver problemas, durante el desarrollo y en la etapa de producción de la app.

Esta página forma parte de un instructivo de varias páginas. Para comenzar desde el principio y leer las instrucciones de configuración, visita la app de Bookshelf para Go.

Ingresa este comando para ir al directorio que contiene el código de muestra:

Linux/macOS

cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/getting-started/bookshelf

Windows

cd %GOPATH%\src\github.com\GoogleCloudPlatform\golang-samples\getting-started\bookshelf

Cómo ejecutar la app en la máquina local

  1. Ejecuta la app para iniciar un servidor web local:

    cd app
    go run app.go auth.go template.go
    
  2. En el navegador web, ingresa la siguiente dirección:

    http://localhost:8080

Presiona Control + C para salir del servidor web local.

Cómo implementar la app en el entorno flexible de App Engine

  1. En el directorio app, ingresa el siguiente comando para implementar la muestra:

    gcloud app deploy
    
  2. En el navegador web, ingresa la siguiente dirección. Reemplaza [YOUR_PROJECT_ID] por el ID del proyecto:

    https://[YOUR_PROJECT_ID].appspot.com
    

Si actualizas tu app, podrás implementar la versión actualizada mediante el mismo comando que usaste para implementar la app por primera vez. La implementación nueva crea una versión nueva de tu app y la convierte a la versión predeterminada. Las versiones anteriores de la app se conservan, al igual que sus instancias de VM asociadas. Ten en cuenta que todas estas instancias de VM y versiones de la app son recursos facturables.

Para reducir costos, borra las versiones no predeterminadas de la app.

Para borrar una versión de una app, haz lo siguiente:

  1. En GCP Console, dirígete a la página Versiones de App Engine.

    Ir a la página de Versiones

  2. Haz clic en la casilla de verificación junto a la versión de app no predeterminada que deseas borrar.
  3. Haz clic en el botón Borrar en la parte superior de la página para borrar la versión de la app.

Para obtener toda la información acerca de la limpieza de los recursos facturables, consulta la sección Limpieza en el paso final de este instructivo.

Cómo comprender el código

Después de implementar y ejecutar tu app, es importante comprender qué tan bien está funcionando. Cloud Platform proporciona herramientas de registro y supervisión integradas en GCP Console, de manera que puedas obtener rápidamente una visión potente de la actividad detallada dentro de tu app, lo que puede ayudarte a identificar problemas graves o tendencias.

La app de muestra de Bookshelf usa el paquete log estándar de Go para el registro de errores, y el kit de herramientas web CombinedLoggingHandler de Gorilla para los registros de solicitudes. Los siguientes ejemplos de código muestran el registro de solicitudes HTTP, errores de solicitudes HTTP y eventos de la aplicación.

Cómo registrar errores al manejar solicitudes HTTP

Este código configura el registro de errores importantes que ocurren dentro de la app. Cada controlador en la app es un appHandler que devuelve un appError. Si el controlador devuelve un appError no nulo, se muestra un mensaje al usuario y se registran los detalles del error y el mensaje:

type appHandler func(http.ResponseWriter, *http.Request) *appError

type appError struct {
	Error   error
	Message string
	Code    int
}

func (fn appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	if e := fn(w, r); e != nil { // e is *appError, not os.Error.
		log.Printf("Handler error: status code: %d, message: %s, underlying err: %#v",
			e.Code, e.Message, e.Error)

		http.Error(w, e.Message, e.Code)
	}
}

Cómo registrar solicitudes HTTP

Cada solicitud HTTP se registra mediante el kit de herramientas web CombinedLoggingHandler de Gorilla. En el siguiente código, r es el mux.Router de Gorilla que se utiliza para enrutar todos los controladores de solicitudes de la aplicación. CombinedLoggingHandler une cada solicitud a registrar con os.Stderr antes de que se entregue la solicitud.

// Delegate all of the HTTP routing and serving to the gorilla/mux router.
// Log all requests using the standard Apache format.
http.Handle("/", handlers.CombinedLoggingHandler(os.Stderr, r))

Cómo registrar eventos de la aplicación

La aplicación no tiene ninguna instrucción de registro general o de registro de depuración, pero puede usar el paquete log estándar para agregarlas:

log.Printf("Something happened: %v", x)

Cómo comprender la configuración de registro

Cómo ejecutar la app en el entorno flexible de App Engine

Cuando la app de muestra se ejecuta en el entorno flexible de App Engine, Google Cloud Logging recopila todo lo que se registra en stderr o stdout y lo habilita para su visualización, búsqueda y exportación al visor de registros de GCP Console.

Cómo ver registros

Después de implementar y ejecutar la app de muestra, los datos de registros se comenzarán a recopilar. El análisis de los datos de registro se puede realizar con las herramientas de supervisión de registros incorporadas a GCP Console. La siguiente imagen muestra los eventos registrados en GCP Console.

Cómo registrar en la consola

Si quieres realizar un análisis incluso más detallado, puedes transmitir o importar los registros de la app a BigQuery o exportarlos a un depósito de Google Cloud Storage. Puedes hacerlo de ambas formas directamente desde GCP Console.

¿Te ha resultado útil esta página? Enviar comentarios: