1. Introduzione
In questo codelab, imparerai a sfruttare gli strumenti di logging e monitoraggio disponibili per tutti gli sviluppatori che lavorano con Cloud Functions. Gli strumenti sono inclusi in ogni funzione Cloud che esegui il deployment in tutte le lingue supportate e dovrebbero consentirti di essere più produttivo durante la scrittura e l'utilizzo del codice serverless.

Utilizzerai una funzione Cloud attivata tramite HTTP, ma tutto ciò che tratterai si applica anche ad altri linguaggi e alle funzioni Cloud attivate da altri eventi.
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Cloud Shell
Anche se Cloud Functions e le relative funzionalità di logging e monitoraggio possono essere utilizzate in remoto dal tuo laptop, utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.
Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Ciò significa che per questo codelab ti servirà solo un browser (sì, funziona su Chromebook).
- Per attivare Cloud Shell dalla console Cloud, fai clic su Attiva Cloud Shell
(bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente).
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID.
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
Se per qualche motivo il progetto non è impostato, esegui questo comando:
gcloud config set project <PROJECT_ID>
Stai cercando PROJECT_ID? Controlla l'ID che hai utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:
Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, che potrebbero essere utili quando esegui i comandi futuri.
echo $GOOGLE_CLOUD_PROJECT
Output comando
<PROJECT_ID>
- Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f
Puoi scegliere una serie di zone diverse. Per saperne di più, consulta Regioni e zone.
3. Esegui il deployment di una semplice funzione Cloud Functions
Per avere qualcosa da monitorare, crea una funzione Cloud Functions "Hello, World". Nel menu a sinistra della console Google Cloud, fai clic su Cloud Functions, quindi su Crea funzione.

Inserisci "hello-monitor" come nome della nuova funzione Cloud Functions.

Mantieni tutti i valori predefiniti per il codice sorgente. Tuttavia, puoi scegliere una lingua/runtime diversa, se preferisci.

Infine, fai clic su Crea.

Dovresti vedere la tua funzione Cloud Functions elencata con un segno di spunta verde accanto, il che significa che è pronta per essere richiamata.

4. Testare la funzione Cloud Functions e inviare traffico utilizzando un generatore di carico
Ora che la funzione Cloud è stata eseguita correttamente, testala dalla riga di comando.
Innanzitutto, utilizzando Cloud Shell, esegui questo comando:
$ gcloud functions describe hello-monitor
Dovrebbe essere restituita una descrizione della funzione Cloud, incluso un URL per httpsTrigger, ovvero l'endpoint HTTP(S) per richiamare la funzione Cloud. Dovrebbe avere il seguente aspetto: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
L'attivazione della funzione Cloud dovrebbe ora essere semplice come l'utilizzo del comando curl su quell'URL.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Ora utilizza Vegeta, un semplice strumento di test del carico HTTP. Per installarlo, digita questo comando in Cloud Shell :
$ go get -u github.com/tsenart/vegeta
Per inviare un po' di traffico alla tua funzione Cloud (cinque richieste al secondo per un paio di minuti), utilizza il seguente comando:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Navigare tra i log
Nella visualizzazione dei dettagli della funzione Cloud Functions, fai clic su Visualizza log.

In questo modo dovresti accedere alla sezione Stackdriver Logging del tuo progetto, che mostra solo i log di Cloud Functions.

Tutte le richieste alla tua funzione Cloud devono restituire un codice di stato 200.
Quando visualizzi i log, puoi eseguire le seguenti operazioni:
- Filtra per livello di log (nel tuo caso, tutti i log sono di livello
debug). - Seleziona un periodo di tempo specifico (relativo o assoluto).
- Attiva lo streaming dei log (con Play
nella parte superiore dello schermo). - Copia un link alla voce di log (per la condivisione con i membri del team).
- Mostra una voce di log nel contesto della risorsa.
- Bloccare una voce di log (come spunto visivo).
- Esporta i log in BigQuery, Cloud Storage o Pub/Sub oppure scaricali semplicemente come file JSON o CSV.
6. Aggiorna la funzione
Utilizzando Cloud Console, vai alla visualizzazione Dettagli funzione e osserva il picco creato con il tester di carico nel numero di chiamate al secondo e nel relativo tempo di esecuzione.

Un altro strumento più dettagliato per osservare la latenza e le chiamate RPC è Stackdriver Trace, ma prima di poterlo utilizzare devi apportare alcune modifiche alle tue Cloud Functions. Segui questi passaggi:
- Aggiungi il pacchetto
node-emojisalvavita come dipendenza. - Aggiorna il codice della funzione per utilizzare il modulo node-emoji e introdurre un po' di latenza.
- Aggiungi una variabile di ambiente per abilitare Stackdriver Trace per Cloud Functions.
In Dettagli funzione, fai clic su Modifica per modificare la funzione.

Modifica il file package.json per aggiungere una dipendenza per il pacchetto node-emoji.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Modifica la funzione effettiva cambiando i contenuti di index.js come segue:
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
};
In questo modo, viene aggiunta un'emoji casuale al messaggio restituito dalla funzione Cloud Functions dopo una pausa di 300 millisecondi.
Infine, aggiungi una variabile di ambiente Cloud Functions denominata GOOGLE_CLOUD_TRACE_ENABLED e impostala su true come segue:

Fai clic su Salva.
Torna a Cloud Shell e richiama il comando per generare un po' di carico sulla funzione Cloud Functions appena implementata:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Ora puoi osservare l'elenco delle tracce prodotte senza altri requisiti di configurazione e senza una libreria di tracciamento specifica nel codice.
7. Traccia la funzione Cloud aggiornata
Utilizzando il menu a sinistra, vai a Elenco di tracce (in Stackdriver Trace).

Dovresti visualizzare un messaggio simile a quello dello screenshot seguente:

In questo modo dovrebbe essere abbastanza ovvio che la latenza introdotta nella tua funzione Cloud viene misurata a 300 millisecondi.
Ogni punto del grafico è una richiesta per la quale puoi visualizzare informazioni dettagliate, come timestamp, metodo e stato HTTP, etichette, un link alla voce di log corrispondente e qualsiasi chiamata RPC successiva effettuata dalla funzione cloud.

Se vuoi aumentare lo zoom, fai clic e trascina il cursore sul grafico. 
Per diminuire lo zoom, fai clic su Annulla zoom nella parte superiore della pagina.
Poiché hai eseguito il deployment di una singola Cloud Function, il grafico mostra solo GET richieste sull'URI hello-monitor, ma puoi filtrare le tracce in base al metodo HTTP (GET, POST, DELETE), allo stato HTTP (2XX, 3XX) o utilizzando il filtro delle richieste.
Vai a Panoramica nel menu a sinistra:

In questa pagina di panoramica puoi trovare le tracce recenti e altri approfondimenti.

Puoi anche creare report personalizzati in base a una combinazione di un filtro delle richieste URI, un metodo HTTP, uno stato HTTP e un intervallo di tempo. Ti consente persino di confrontare i valori generati con un valore di riferimento temporale.

Se riesci a configurare gli intervalli di tempo corretti con un numero sufficiente di punti dati, puoi generare un report che mostri l'importante spostamento della latenza tra la funzione Cloud iniziale e quella nuova.


Un report personalizzato di questo tipo può essere utilizzato per scoprire quando è stato introdotto un problema di prestazioni e per monitorare un indicatore del livello di servizio (SLI), ad esempio la latenza delle richieste degli utenti finali.
8. È il momento di eseguire la pulizia delle risorse
Il codelab termina qui.
Anche se Cloud Functions e gli strumenti Stackdriver sono piattaforme serverless che non comportano costi quando non sono in uso, comportati in modo responsabile e elimina la tua funzione Cloud. Basta selezionare hello-monitor in Panoramica nella sezione Cloud Functions e fare clic su Elimina.

9. Passaggi successivi
Ecco alcuni articoli da leggere:
/