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 se incluyen con cada Cloud Function que implementas en todos los lenguajes compatibles y deberían permitirte ser más productivo cuando escribes y operas tu código sin servidores.

Usarás una Cloud Function activada por HTTP, pero todo lo que abarcaremos también se aplica a otros lenguajes y a las Cloud Functions activadas 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 que no se te facture 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 una Cloud Function de "Hello, World". 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.

Conserva todos los valores predeterminados del código fuente. (Sin embargo, puedes elegir otro lenguaje o tiempo de ejecución 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. Probar la Cloud Function y enviar tráfico con un generador de carga
Ahora que la Cloud Function se implementó correctamente, pruébala desde la línea de comandos.
Primero, usa Cloud Shell para emitir el siguiente comando:
$ gcloud functions describe hello-monitor
Esto debería devolver una descripción de Cloud Function, incluida una URL para httpsTrigger, que es el extremo HTTP(S) para invocar Cloud Function. Debería verse de la siguiente manera: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Activar la Cloud Function ahora 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 carga HTTP. Para instalarlo, en Cloud Shell, simplemente escribe el siguiente comando :
$ go get -u github.com/tsenart/vegeta
Para enviar tráfico a tu Cloud Function (cinco solicitudes por segundo durante un par de minutos), usa el siguiente comando:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Cómo navegar por los registros
En la vista de detalles de Cloud Function, haz clic en Ver registros.

Esto debería llevarte a la sección Stackdriver Logging de tu proyecto, en la que se muestran solo los registros de Cloud Functions.

Todas las solicitudes a tu Cloud Function deben devolver un código de estado 200.
Cuando veas los registros, podrás hacer lo siguiente:
- Filtra por nivel de registro (en tu caso, todos los registros son de nivel
debug). - Selecciona un período específico (relativo o absoluto).
- Habilita la transmisión de registros (con Play
en la parte superior de la pantalla). - Copiar un vínculo a la entrada de registro (para compartirlo con los miembros del equipo)
- Muestra una entrada de registro en el contexto de recursos.
- Fija una entrada de registro (como una señal visual).
- Exporta registros a BigQuery, Cloud Storage o Pub/Sub (o simplemente descárgalos como archivos JSON o CSV).
6. Actualiza la función
En la consola de Cloud, navega a la vista Detalles de la función y observa el aumento repentino que creaste con tu verificador de carga 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 a RPC es Stackdriver Trace, pero, antes de que puedas usarla, debes realizar algunos cambios en tus Cloud Functions. Puedes hacer lo siguiente:
- Agrega el paquete
node-emojique salva vidas como dependencia. - Actualiza el código de la función para usar el módulo node-emoji y agregar algo de latencia.
- Agrega una variable de entorno para 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"
}
}
Edita la función real cambiando 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
};
Esto agrega un emoji aleatorio al mensaje que devuelve Cloud Function después de una pausa de 300 milisegundos.
Por último, agrega una variable de entorno de Cloud Functions llamada GOOGLE_CLOUD_TRACE_ENABLED y configúrala en true de la siguiente manera:

Haz clic en Guardar.
Vuelve 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
Ahora puedes observar la lista de registros producidos sin otros requisitos de configuración ni una biblioteca de registro 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:

Esto debería dejar en claro que la latencia introducida en tu Cloud Function se mide en 300 milisegundos.
Cada punto del gráfico es una solicitud para 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, haz clic en el gráfico y arrástralo. 
Para alejar la imagen, haz clic en Deshacer zoom en la parte superior de la página.
Como implementaste una sola Cloud Function, el gráfico solo muestra solicitudes GET en el URI hello-monitor, pero puedes filtrar los registros por método HTTP (GET, POST, DELETE), por estado HTTP (2XX, 3XX) o con el filtro de solicitudes.
Navega a Overview en el menú de la izquierda:

En esta página de resumen, puedes encontrar registros recientes y otras estadísticas.

También puedes crear informes personalizados basados en una combinación de un filtro de solicitudes de URI, un método HTTP, un estado HTTP y un período. Incluso te permite comparar los valores generados con un período de referencia.

Si logras configurar los períodos correctos con suficientes puntos de datos, puedes generar un informe que muestre el cambio importante en la latencia entre la Cloud Function inicial y la nueva.


Este tipo de informe personalizado se puede usar para saber cuándo se introdujo un problema de rendimiento y hacer un seguimiento de un indicador de nivel de servicio (SLI), como la latencia de las solicitudes de los usuarios finales.
8. Es hora de limpiar los recursos
Con esto concluye el codelab.
Si bien Cloud Functions y las herramientas de 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 tienes que seleccionar hello-monitor en Descripción general en Cloud Functions y hacer clic en Borrar.

9. Próximos pasos
Aquí tienes algunas lecturas complementarias:
/