1. Introducción
En este codelab, aprenderás a aprovechar las herramientas de registro y supervisión disponibles para todos los desarrolladores que trabajan con Cloud Functions. Las herramientas vienen con cada Cloud Function que implementas en todos los lenguajes compatibles y deberían permitirte aumentar tu productividad cuando escribes y operas tu código sin servidores.
Usarás una Cloud Function activada por HTTP, pero todo lo que se trate también se aplica a otros lenguajes y a Cloud Functions activada por otros eventos.
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de G Suite, debes crear una).
Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID
.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza” en la que se aconseja cómo cerrar recursos para no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Cloud Shell
Si bien Cloud Functions y sus capacidades de registro y supervisión se pueden usar de forma remota desde tu laptop, usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud.
Esta máquina virtual basada en Debian está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Esto significa que todo lo que necesitarás para este Codelab es un navegador (sí, funciona en una Chromebook).
- Para activar Cloud Shell desde la consola de Cloud, solo haz clic en Activar Cloud Shell
(el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).
Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu PROJECT_ID
:
gcloud auth list
Resultado del comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
Si, por algún motivo, el proyecto no está configurado, solo emite el siguiente comando:
gcloud config set project <PROJECT_ID>
Si no conoce su PROJECT_ID
, Observa el ID que usaste en los pasos de configuración o búscalo en el panel de la consola de Cloud:
Cloud Shell también configura algunas variables de entorno de forma predeterminada, lo que puede resultar útil cuando ejecutas comandos futuros.
echo $GOOGLE_CLOUD_PROJECT
Resultado del comando
<PROJECT_ID>
- Establece la zona predeterminada y la configuración del proyecto.
gcloud config set compute/zone us-central1-f
Puedes elegir una variedad de zonas diferentes. Para obtener más información, consulta Regiones y zonas.
3. Implementa una Cloud Function simple
Para tener algo que supervisar, crea un mensaje "Hello, World" de Google Cloud. En el menú de la izquierda de la consola de Google Cloud, haz clic en Cloud Functions y, luego, en Crear función.
Ingresa "hello-monitor" como el nombre de tu nueva Cloud Function.
Mantén todos los valores predeterminados del código fuente. (Sin embargo, puedes elegir un idioma o entorno de ejecución diferente si lo deseas).
Por último, haga clic en Crear.
Deberías ver tu Cloud Function con una marca de verificación verde junto a ella, lo que significa que está lista para invocarse.
4. Prueba la Cloud Function y envía tráfico con un generador de cargas
Ahora que la Cloud Function se implementó correctamente, pruébala desde la línea de comandos.
Primero, en Cloud Shell, emite el siguiente comando:
$ gcloud functions describe hello-monitor
Se debería mostrar una descripción de la Cloud Function, incluida una URL para httpsTrigger
, que es el extremo HTTP(S) para invocar la Cloud Function. Debería verse de la siguiente manera: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Ahora, activar la Cloud Function debería ser tan simple como usar el comando curl
en esa URL.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Ahora usa Vegeta, una herramienta simple de prueba de cargas HTTP. Para instalarla, desde Cloud Shell, simplemente escribe el siguiente comando :
$ go get -u github.com/tsenart/vegeta
Para enviar algo de tráfico a tu Cloud Function (cinco solicitudes por segundo durante unos minutos), usa el siguiente comando:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Navega por los registros
Haz clic en Ver registros en la vista de detalles de tu Cloud Function.
Esto debería llevarte a la sección Stackdriver Logging de tu proyecto, que te mostrará solo tus registros de Cloud Function.
Todas las solicitudes a tu Cloud Function deben mostrar un código de estado 200.
Cuando visualizas los registros, puedes hacer lo siguiente:
- Filtra por nivel de registro (en tu caso, todos los registros tienen nivel de
debug
). - Selecciona un período específico (relativo o absoluto).
- Habilita la transmisión de registros (con Reproducir
en la parte superior de la pantalla).
- Copia un vínculo a la entrada de registro (para compartirlo con los miembros del equipo).
- Mostrar una entrada de registro en el contexto de recursos.
- Fija una entrada de registro (como una indicación visual).
- Exporta registros a BigQuery, Cloud Storage o Pub/Sub (o solo descárgalos como archivos JSON o CSV).
6. Actualiza la función
Con la consola de Cloud, navega a la vista Detalles de la función y observa el aumento repentino que creaste con el verificador de cargas en la cantidad de invocaciones por segundo y su tiempo de ejecución.
Otra herramienta más detallada para observar la latencia y las llamadas RPC es Stackdriver Trace, pero antes de poder usarlo, debes realizar algunos cambios en Cloud Functions. Puedes hacer lo siguiente:
- Agrega el paquete
node-emoji
que salva vidas como dependencia. - Actualiza el código de la función para usar el módulo node-emoji y generar latencia.
- Agrega una variable de entorno a fin de habilitar Stackdriver Trace para Cloud Functions.
En Detalles de la función, haz clic en Editar para modificar la función.
Edita el archivo package.json
para agregar una dependencia para el paquete node-emoji
.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Para editar la función real, cambia el contenido de index.js
por lo siguiente:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
De esta manera, se agrega un emoji aleatorio al mensaje que muestra la Cloud Function después de una pausa de 300 milisegundos.
Por último, agrega una variable de entorno de Cloud Function llamada GOOGLE_CLOUD_TRACE_ENABLED
y establécela en true
de la siguiente manera:
Haz clic en Guardar.
Regresa a Cloud Shell y recupera el comando para generar algo de carga en la Cloud Function recién implementada:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Ya tienes todo listo para observar la lista de seguimientos producidos sin otros requisitos de configuración ni una biblioteca de seguimiento específica en tu código.
7. Realiza un seguimiento de la Cloud Function actualizada
En el menú de la izquierda, navega a Lista de seguimientos (en Stackdriver Trace).
Deberías ver algo similar a la siguiente captura de pantalla:
Eso debería dejar en claro que la latencia ingresada en su Cloud Function se mide en 300 milisegundos.
Cada punto del gráfico es una solicitud de la que puedes ver información detallada, como la marca de tiempo, el método y el estado HTTP, sus etiquetas, un vínculo a la entrada de registro correspondiente y cualquier llamada RPC posterior que realice la Cloud Function.
Si quieres acercar la imagen, simplemente haz clic y arrastra el gráfico.
Para alejar, haz clic en Deshacer el zoom en la parte superior de la página.
Debido a que implementaste una sola Cloud Function, el gráfico solo muestra solicitudes GET
en el URI hello-monitor
, pero puedes filtrar los seguimientos por método HTTP (GET, POST, DELETE) por estado HTTP (2XX, 3XX) o mediante el filtro de solicitudes.
Navega a Descripción general en el menú de la izquierda:
En esta página de descripción general, puedes encontrar los seguimientos recientes y otras estadísticas.
También puedes crear informes personalizados basados en una combinación de un filtro de solicitud de URI, un método HTTP, un estado HTTP y un intervalo de tiempo. Incluso te permite comparar los valores generados con un modelo de referencia de tiempo.
Si logras configurar los intervalos de tiempo correctos con suficientes datos, puedes generar un informe en el que se muestre el cambio importante en la latencia entre la Cloud Function inicial y la nueva.
Este informe personalizado se puede usar para detectar cuándo se presentó un problema de rendimiento y hacer un seguimiento de un indicador de nivel de servicio (SLI), como la latencia de la solicitud del usuario final.
8. Es hora de limpiar los recursos
Con esto concluye el codelab.
Si bien las herramientas de Cloud Functions y Stackdriver son plataformas sin servidores que no generan costos cuando no se usan, sé un buen ciudadano de la nube y borra tu Cloud Function. Solo selecciona hello-monitor
en Descripción general, en Cloud Functions, y haz clic en Borrar.
9. Próximos pasos
Aquí tienes una lectura de seguimiento:
/