1. Introduzione
Ultimo aggiornamento: 21 giugno 2023
Avvisi relativi agli errori basati su log per la disponibilità
Gli avvisi basati sui log possono essere utilizzati per determinare la disponibilità di un'applicazione monitorando eventi o pattern specifici nei log.*.* Se ricevi avvisi relativi a interruzioni o altri problemi che interessano gli utenti, puoi adottare misure per ridurre al minimo l'impatto sugli utenti e sui clienti.
Sebbene i controlli dell'uptime forniscano un'istantanea generale della disponibilità, potrebbe essere più accurato utilizzare i messaggi di errore derivati dai log come indicatori di tipi più specifici di indisponibilità e per avere un'idea della percentuale di utenti che riscontrano un problema.
Gli errori possono derivare da una serie di cause, che vanno dagli errori degli utenti alla manutenzione, agli upgrade e persino a fattori esterni al sistema, come il maltempo. La chiave degli avvisi non è cercare di prevedere tutte le possibili cause, ma piuttosto scegliere alcuni sintomi chiave che possono servire come punto di partenza per la risoluzione dei problemi.
Argomenti Pub/Sub come canale di notifica degli avvisi
Un argomento Pub/Sub può essere utilizzato come canale di notifica di Google Cloud Monitoring per inviare avvisi a una sottoscrizione Pub/Sub. In questo modo puoi integrare gli avvisi di Cloud Monitoring con altri sistemi, inclusi servizi di notifica di terze parti.
Per utilizzare un argomento Pub/Sub come canale di notifica, devi prima creare un argomento Pub/Sub e una sottoscrizione Pub/Sub. Poi, devi creare un canale di notifica Cloud Monitoring che utilizzi l'argomento Pub/Sub come destinazione.
Quando viene attivato un avviso, Cloud Monitoring invia un messaggio all'argomento Pub/Sub. Il sottoscrittore della sottoscrizione Pub/Sub può quindi elaborare il messaggio e intraprendere l'azione appropriata.
Cosa creerai
In questo codelab, eseguirai il deployment di un'app, creerai un argomento Pub/Sub e un avviso basato su log che verifica la presenza di errori in una parte specifica dell'app e utilizza l'argomento Pub/Sub come canale di notifica.
Cosa imparerai a fare
- Come creare un argomento Pub/Sub
- Come creare un avviso basato su log
Questo codelab è incentrato sulla creazione di un avviso per gli errori. Concetti e codice dell'applicazione non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla.
Che cosa ti serve
- Un account Google Cloud con autorizzazioni per:
- Esegui il deployment delle applicazioni Cloud Run
- Crea argomenti Pub/Sub
- crea avvisi
2. Preparazione
Seleziona o crea un progetto Google Cloud
Per selezionare un progetto esistente, utilizza il menu a discesa:

Per creare un nuovo progetto in Google Cloud, puoi seguire questi passaggi:
- Vai alla console di Google Cloud Platform.
- Fai clic sul pulsante Crea progetto.
- Inserisci un nome per il progetto.
- Seleziona un account di fatturazione per il tuo progetto.
- Fai clic su pulsante Crea.
Il progetto verrà creato e visualizzerai la dashboard del progetto. Da qui, puoi iniziare a utilizzare i servizi Google Cloud.
Ecco alcuni dettagli aggiuntivi su ogni passaggio:
- Nome:il nome del progetto deve essere univoco all'interno dell'organizzazione.
- Account di fatturazione:puoi utilizzare un account di fatturazione esistente o crearne uno nuovo.
- Crea:dopo aver inserito tutte le informazioni richieste, fai clic sul pulsante Crea per creare il progetto.
Per saperne di più, consulta la documentazione di Google Cloud sulla creazione di progetti.
3. Esegui il deployment dell'applicazione API
Di cosa tratta l'applicazione o l'API di esempio?
La nostra applicazione è una semplice applicazione API Inventory che espone un endpoint API REST con un paio di operazioni per elencare gli articoli dell'inventario e ottenere il conteggio dell'inventario di articoli specifici.
Una volta eseguito il deployment dell'API e supponendo che sia ospitata all'indirizzo https://<somehost>, possiamo accedere agli endpoint API nel seguente modo:
https://<somehost>/inventory
Verranno elencati tutti gli articoli di prodotto con i livelli di inventario disponibili.
https://<somehost>/inventory/{productid}
In questo modo verrà fornito un singolo record con l'ID prodotto e il livello di inventario disponibile per quel prodotto.
I dati della risposta restituita sono in formato JSON.
Nota: questa applicazione API è solo a scopo dimostrativo e non rappresenta un'implementazione API sicura e solida. Lo scopo è quello di avere a disposizione un'applicazione rapida per esplorare lo scopo principale del lab, ovvero Google Cloud Operations.
Dati di esempio e richiesta/risposta API
Per semplificare le cose, l'applicazione non è basata su un database nel backend. Contiene tre ID prodotto di esempio e i relativi livelli di inventario disponibile.
ID prodotto | Livello di inventario disponibile |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Di seguito sono riportati la richiesta e la risposta dell'API di esempio:
Richiesta API | Risposta dell'API |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -1} |
Clona il repository
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.
Configura gcloud
In Cloud Shell, imposta l'ID progetto e salvalo come variabile PROJECT_ID.
PROJECT_ID=[YOUR-PROJECT-ID]
gcloud config set project $PROJECT_ID
Ora esegui questo comando:
$ git clone https://github.com/rominirani/cloud-code-sample-repository.git
In questa cartella verrà creata una cartella denominata cloud-code-sample-repository.
(Facoltativo) Esegui l'applicazione su Cloud Shell
Per eseguire l'applicazione localmente:
- Dal terminale, vai alla versione Python dell'API tramite il seguente comando:
$ cd cloud-code-sample-repository
$ cd python-flask-api
- Nel terminale, fornisci il comando seguente (al momento della stesura, Cloud Shell viene fornito con Python 3.9.x installato e utilizzeremo la versione predefinita. Se prevedi di eseguirlo localmente sul tuo laptop, puoi utilizzare Python 3.8+) :
$ python app.py
- Puoi eseguire il seguente comando per avviare il server Python in locale.

Fai clic su Anteprima sulla porta 8080. 5. Si aprirà una finestra del browser. Visualizzerai un errore 404, il che va bene. Modifica l'URL e cambia la parte dopo il nome host in /inventory.
Ad esempio, sul mio computer ha questo aspetto:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Verrà visualizzato l'elenco degli articoli di inventario come spiegato in precedenza:

- Ora puoi arrestare il server andando al terminale e premendo Ctrl+C.
Esegui il deployment dell'applicazione
Ora eseguiremo il deployment di questa applicazione API su Cloud Run. La procedura prevedeva l'utilizzo del client a riga di comando gcloud per eseguire il comando di deployment del codice in Cloud Run.
Dal terminale, esegui il seguente comando gcloud:
$ gcloud run deploy --source .
Ti verranno poste diverse domande e alcuni punti sono menzionati di seguito:
- Nome del servizio (python-flask-api): scegli questo valore predefinito o un nome come my-inventory-api
- API [run.googleapis.com] not enabled on project [613162942481]. Vuoi abilitare e riprovare (l'operazione richiederà alcuni minuti)? (y/N)? Y
- Specifica una regione: scegli 31 (us-west-1)
- API [artifactregistry.googleapis.com] not enabled on project [613162942481]. Vuoi abilitare e riprovare (l'operazione richiederà alcuni minuti)? (y/N)? Y
- Il deployment dall'origine richiede un repository Docker Artifact Registry per archiviare i container creati. Verrà creato un repository denominato [cloud-run-source-deploy] nella regione [us-west1].
- Do you want to continue (Y/n)? Y
- Consenti chiamate non autenticate a [my-inventory-api] (y/N)? Y
Alla fine, verrà avviato il processo per prendere il codice sorgente, containerizzarlo, eseguirne il push su Artifact Registry e poi eseguire il deployment del servizio e della revisione Cloud Run. Devi avere pazienza durante questa procedura (può richiedere 3-4 minuti) e dovresti vedere che la procedura viene completata con l'URL del servizio visualizzato.
Di seguito è riportato un esempio di esecuzione:

testa l'applicazione
Ora che abbiamo eseguito il deployment dell'applicazione in Cloud Run, puoi accedere all'applicazione API nel seguente modo:
- Prendi nota dell'URL del servizio del passaggio precedente. Ad esempio, nella mia configurazione viene visualizzato come
https://my-inventory-api-bt2r5243dq-uw.a.run.app. Chiamiamolo<SERVICE_URL>. - Apri un browser e accedi ai seguenti tre URL per gli endpoint API:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Deve essere conforme alle specifiche che abbiamo fornito in una sezione precedente con richiesta e risposta API di esempio.
Recupera i dettagli del servizio da Cloud Run
Abbiamo eseguito il deployment del nostro servizio API su Cloud Run, un ambiente di serverless computing. Possiamo visitare il servizio Cloud Run tramite la console Google Cloud in qualsiasi momento.
Nel menu principale, vai a Cloud Run. Verrà visualizzato l'elenco dei servizi in esecuzione in Cloud Run. Dovresti visualizzare il servizio di cui hai appena eseguito il deployment. A seconda del nome selezionato, dovresti vedere qualcosa di simile a questo:

Fai clic sul nome del servizio per visualizzarne i dettagli. Di seguito sono riportati i dettagli del campione:

Nota l'URL, che non è altro che l'URL del servizio che puoi inserire nel browser e accedere all'API Inventory che abbiamo appena implementato. Consulta le metriche e altri dettagli.
Iniziamo subito con la suite operativa di Google Cloud.
4. Crea un argomento Pub/Sub per ricevere la notifica di avviso
Per creare un argomento Pub/Sub, puoi seguire questi passaggi nella console Google Cloud:
- Cerca Pub/Sub nella casella di ricerca e vai a Pub/Sub.

- Se non l'hai già fatto, fai clic sulla scheda Argomenti.

- Fai clic sul pulsante Crea argomento.

- Inserisci un nome riconoscibile per l'argomento.

- Fai clic sul pulsante Crea.

- Copia il nome dell'argomento utilizzando il pulsante dell'icona di copia. Ti servirà per la sezione successiva.

5. Crea un criterio di avviso per gli errori
Esplorare i log degli errori
Per visualizzare i log degli errori per l'applicazione:
Fai clic sulla scheda Registrazione.
Verrà visualizzata un'interfaccia di log in cui puoi selezionare/deselezionare in modo specifico varie risorse (progetto, risorsa Google Cloud, nomi di servizi e così via) insieme ai livelli di log per filtrare i messaggi di log in base alle esigenze.

Simula alcune richieste non valide al servizio di inventario fornendo ID prodotto diversi da I-1, I-2 e I-3. Ad esempio, una richiesta errata è:
https://<SERVICE_URL>/inventory/I-999
Ora cercheremo tutti gli AVVISI generati dalla nostra API quando viene fornito un ID prodotto errato nella query.
Creare una policy di avviso personalizzata basata su log per gli errori
Supponiamo di voler monitorare la presenza di un messaggio di errore molto specifico per una parte dell'applicazione. Ad esempio, se notiamo un numero elevato di errori nella ricerca degli ID prodotto. Questo problema è sintomo di molti possibili problemi (un link non funzionante, un'incoerenza del database o un bot che enumera il nostro sito). Anche se sarebbe difficile o impossibile immaginare ogni potenziale causa, l'invio di questo messaggio da parte dell'applicazione anche una sola volta è un problema di alto livello di cui vogliamo essere a conoscenza. Per ricevere un avviso, dobbiamo creare una policy basata sui dati nei nostri log degli errori.
- Nella casella di query, inserisci i seguenti parametri di query:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
Il sito dovrebbe avere il seguente aspetto:

- Fai clic su Esegui query. Verranno visualizzate tutte le richieste ricevute e quelle che presentano questo problema.

- Per convertire quanto sopra in un avviso, fai clic sul pulsante Crea avviso visualizzato in Esplora log appena sotto il campo della query, a destra:

- Verrà visualizzato il modulo per creare un criterio di avviso basato su log.

- Utilizza la query iniziale per i log da includere nell'avviso:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

- Imposta la frequenza delle notifiche e la durata dell'incidente. Ai fini dell'esempio, puoi utilizzare i valori minimi per ciascuno:

- Infine, in "A chi inviare le notifiche?", seleziona il canale di notifica Pub/Sub che hai creato in precedenza:

- Fai clic su Salva. Per visualizzare e gestire la policy di avviso, visita la pagina Avvisi e controlla la sezione Policy:

6. Complimenti
Congratulazioni, hai configurato correttamente il controllo di uptime per inviare avvisi a Pub/Sub.