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 forniti con ogni funzione Cloud Functions di cui esegui il deployment in tutti i linguaggi supportati e dovrebbero consentirti di essere più produttivo quando scrivi e utilizzi il codice serverless.
Utilizzerai una funzione Cloud Functions attivata da HTTP, ma gli argomenti trattati si applicano anche ad altri linguaggi e a Cloud Functions attivati da altri eventi.
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID
.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Cloud Shell
Mentre Cloud Functions e le sue funzionalità di logging e monitoraggio possono essere utilizzati da 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 necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Ciò significa che per questo codelab è sufficiente un browser (sì, funziona su Chromebook).
- Per attivare Cloud Shell dalla console Cloud, fai semplicemente clic su Attiva Cloud Shell
(il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi minuti).
Dopo la connessione a Cloud Shell, dovresti vedere che hai già eseguito l'autenticazione e che il progetto è già impostato su 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, invia semplicemente il seguente comando:
gcloud config set project <PROJECT_ID>
Stai cercando il tuo PROJECT_ID
? Controlla l'ID utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:
Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, cosa che può essere utile quando eseguirai 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 zone diverse. Per ulteriori informazioni, consulta Regioni e Zone.
3. Esegui il deployment di una funzione Cloud Functions semplice
Per avere qualcosa da monitorare, crea un "Hello World" la funzione Cloud Function. 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 tutte le impostazioni predefinite per il codice sorgente. Tuttavia, se vuoi, puoi scegliere una lingua/un runtime diverso.
Infine, fai clic su Crea.
Dovresti vedere la funzione Cloud Functions elencata con un segno di spunta verde accanto alla funzione, che indica che è pronta per essere richiamata.
4. Testa la funzione Cloud Functions e invia il traffico utilizzando un generatore di carico
Ora che il deployment della funzione Cloud Functions è stato eseguito correttamente, testala dalla riga di comando.
Per prima cosa, utilizzando Cloud Shell, emetti questo comando:
$ gcloud functions describe hello-monitor
Dovrebbe essere restituita una descrizione della funzione Cloud Functions, incluso un URL per httpsTrigger
, che è l'endpoint HTTP(S) per richiamare la funzione Cloud Functions. Dovrebbe avere un aspetto simile al seguente: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Ora l'attivazione della funzione Cloud Functions dovrebbe essere semplice: basta utilizzare il 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, da Cloud Shell, digita semplicemente il seguente comando :
$ go get -u github.com/tsenart/vegeta
Per inviare del traffico alla funzione Cloud Functions (cinque richieste al secondo per un paio di minuti), utilizza il comando seguente:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Naviga tra i log
Nella visualizzazione dei dettagli della funzione Cloud Functions, fai clic su Visualizza log.
Questo dovrebbe portarti alla sezione Stackdriver Logging del tuo progetto, dove vedrai solo i log della funzione Cloud Functions.
Tutte le richieste alla funzione Cloud Functions devono restituire un codice di stato 200.
Quando visualizzi i log, puoi:
- Filtra per livello di log (in questo caso, tutti i log sono a livello di
debug
). - Seleziona un periodo di tempo specifico (relativo o assoluto).
- Attiva il flusso di log (con Riproduci
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.
- Fissa una voce di log (come segnale visivo).
- Esporta i log in BigQuery, Cloud Storage o Pub/Sub (oppure scaricali semplicemente come file JSON o CSV).
6. Aggiorna la funzione
Utilizzando la console Cloud, vai alla visualizzazione Dettagli funzione e osserva il picco che hai creato con il tester del carico per il numero di chiamate al secondo e il 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 a Cloud Functions. Segui questi passaggi:
- Aggiungi il pacchetto
node-emoji
salvavita 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
};
Ciò consente di aggiungere un'emoji casuale al messaggio restituito dalla funzione Cloud Functions dopo una pausa di 300 millisecondi.
Infine, aggiungi una variabile di ambiente della funzione 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 carico sulla funzione Cloud Functions di cui è stato appena eseguito il deployment:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Ora puoi esaminare l'elenco delle tracce prodotte senza altri requisiti di configurazione e senza libreria di tracciamento specifica nel codice.
7. Traccia la funzione Cloud Functions aggiornata
Dal menu a sinistra, vai a Elenco di tracce (in Stackdriver Trace).
Dovresti vedere qualcosa di simile al seguente screenshot:
Questo dovrebbe chiarire che la latenza introdotta nella funzione Cloud Functions è effettivamente misurata a 300 millisecondi.
Ogni punto del grafico è una richiesta per la quale puoi visualizzare informazioni dettagliate, come timestamp, metodo e stato HTTP, relative etichette, un link alla voce di log corrispondente e qualsiasi chiamata RPC successiva effettuata dalla funzione Cloud Functions.
Per aumentare lo zoom, fai clic sul grafico e trascinalo.
Per diminuire lo zoom, fai clic su Annulla zoom nella parte superiore della pagina.
Poiché hai eseguito il deployment di una singola funzione Cloud Functions, il grafico mostra solo le richieste GET
nell'URI hello-monitor
, ma puoi filtrare le tracce per metodo HTTP (GET, POST, DELETE) in base allo stato HTTP (2XX, 3XX) o utilizzando il filtro delle richieste.
Vai a Panoramica nel menu a sinistra:
In questa pagina Panoramica puoi trovare tracce recenti e altri insight.
Inoltre, è possibile creare report personalizzati basati su una combinazione di un filtro per le richieste URI, un metodo HTTP, uno stato HTTP e un intervallo di tempo. Ti consente anche di confrontare i valori generati con un riferimento temporale.
Se riesci a impostare gli intervalli di tempo corretti con punti dati sufficienti, puoi generare un report che mostri l'importante scostamento di latenza tra la funzione Cloud Functions iniziale e quella nuova.
Un report personalizzato di questo tipo può essere utilizzato per scoprire quando è stato introdotto un problema di prestazioni e monitorare un indicatore del livello del servizio (SLI), come la latenza delle richieste dell'utente finale.
8. Tempo per la pulizia delle risorse
Con questo si conclude il codelab.
Sebbene Cloud Functions e gli strumenti Stackdriver siano piattaforme serverless che non comportano costi quando non sono in uso, ti consigliamo di essere un buon cittadino del cloud ed eliminare la tua funzione Cloud Functions. È sufficiente selezionare hello-monitor
in Panoramica in Cloud Functions e fare clic su Elimina.
9. Passaggi successivi
Ecco alcune informazioni di follow-up:
/