Avvisi: errori basati su log negli argomenti Pub/Sub

1. Introduzione

Ultimo aggiornamento: 21 giugno 2023

Avvisi sugli errori basati su log per la disponibilità

È possibile utilizzare avvisi basati su log per determinare la disponibilità di un'applicazione mediante il monitoraggio di eventi o pattern specifici nei log*.* Ricevere avvisi relativi a interruzioni o altri problemi che interessano gli utenti ti consente di adottare misure per ridurre al minimo l'impatto su utenti e clienti.

Anche se i controlli di uptime forniscono un'istantanea generale della disponibilità, può 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 stanno riscontrando un problema.

Gli errori possono derivare da una serie di cause, dagli errori dell'utente alla manutenzione del sistema, agli upgrade e persino a fattori esterni al sistema, come le condizioni meteorologiche avverse. La chiave negli avvisi non è cercare di anticipare tutte le possibili cause, ma piuttosto scegliere alcuni sintomi chiave che possono servire come inizio per la risoluzione dei problemi.

Argomenti Pub/Sub come canale di notifica di avviso

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 i servizi di notifica di terze parti.

Per utilizzare un argomento Pub/Sub come canale di notifica, devi prima creare un argomento e una sottoscrizione Pub/Sub. Quindi, devi creare un canale di notifica di 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 le azioni appropriate.

Cosa creerai

In questo codelab, eseguirai il deployment di un'app, creerai un argomento Pub/Sub e creerai 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

  • Creare un argomento Pub/Sub
  • Come creare un avviso basato su log

Questo codelab è incentrato sulla creazione di un avviso per gli errori. I concetti e il 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:

b35bf95b8bf3d5d8.png

Per creare un nuovo progetto in Google Cloud, puoi seguire questi passaggi:

  1. Vai alla console di Google Cloud.
  2. Fai clic sul pulsante Crea progetto.
  3. Inserisci un nome per il progetto.
  4. Seleziona un account di fatturazione per il tuo progetto.
  5. Fai clic su pulsante Crea.

Il progetto verrà creato e verrà visualizzata la dashboard del progetto. Da qui puoi iniziare a utilizzare i servizi Google Cloud.

Di seguito sono riportati alcuni dettagli aggiuntivi su ogni passaggio:

  • Nome: il nome del progetto deve essere univoco all'interno della tua 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

Qual è l'argomento dell'applicazione o dell'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 un conteggio specifico dell'inventario degli articoli.

Dopo aver eseguito il deployment dell'API e supponendo che sia ospitata su https://<somehost>, possiamo accedere agli endpoint API come segue:

https://<somehost>/inventory

Verranno elencati tutti gli articoli di prodotto con i livelli di inventario disponibili.

https://<somehost>/inventory/{productid}

In questo modo otterrai un unico record con ID prodotto e livello di inventario disponibile per quel prodotto.

I dati di risposta restituiti sono in formato JSON.

Nota: questa applicazione API è solo a scopo dimostrativo e non rappresenta un'implementazione dell'API sicura e affidabile. Lo scopo è quello di mettere a nostra disposizione un'applicazione rapida per esplorare lo scopo chiave del lab, ovvero la Suite operativa di Google Cloud.

Dati di esempio e richiesta/risposta dell'API

Per semplificare le cose, l'applicazione non è basata su un database nel backend. Contiene 3 ID prodotto di esempio e i relativi livelli di inventario disponibili.

ID prodotto

Livello dell'inventario disponibile

I-1

10

I-2

20

I-3

30

Di seguito sono riportati alcuni esempi di Richiesta e risposta dell'API:

Richiesta API

Risposta dell'API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Clona il repository

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console di Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

f6ef2b5f13479f3a.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. 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

Verrà creata una cartella denominata cloud-code-sample-repository in questa cartella.

(Facoltativo) Esegui l'applicazione su Cloud Shell

Puoi eseguire l'applicazione in locale seguendo questa procedura:

  1. Dal terminale, passa alla versione Python dell'API tramite questo comando:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. Nel terminale, fornisci il comando seguente (al momento della scrittura, 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

  1. Puoi eseguire questo comando per avviare il server Python localmente.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Fai clic su Anteprima sulla porta 8080. 5. Si aprirà una finestra del browser. Verrà visualizzato un errore 404 e va bene. Modifica l'URL e sostituiscilo con /inventory dopo il nome host.

Ad es. sul mio computer, avrà il seguente aspetto:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Verrà visualizzato l'elenco degli elementi dell'inventario, come spiegato in precedenza:

709d57ee2f0137e4.png

  1. Puoi arrestare subito il server andando al Terminale e premendo Ctrl-C

Esegui il deployment dell'applicazione

Ora eseguiremo il deployment di questa applicazione API in Cloud Run. Il processo prevede l'utilizzo del client a riga di comando gcloud per eseguire il comando ed eseguire il deployment del codice in Cloud Run.

Dal terminale, fornisci il seguente comando gcloud:

$ gcloud run deploy --source .

Ti verranno poste più domande e alcuni dei punti sono menzionati di seguito:

  1. Nome servizio (python-flask-api): scegli questo valore predefinito o ad esempio my-inventory-api
  2. API [run.googleapis.com] non abilitata sul progetto [613162942481]. Vuoi attivare e riprovare (l'operazione richiederà alcuni minuti)? (y/N)? Y
  3. Specifica una regione: scegli 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] non abilitata nel progetto [613162942481]. Vuoi attivare e riprovare (l'operazione richiederà alcuni minuti)? (y/N)? Y
  5. 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].
  6. Do you want to continue (Y/n)? Y
  7. Consentire chiamate non autenticate a [my-inventory-api] (y/N)? Y

Alla fine, questo avvierà il processo per prendere il codice sorgente, containerizzarlo, eseguirne il push su Artifact Registry e quindi eseguire il deployment del servizio e della revisione Cloud Run. Dovresti essere paziente durante questa procedura (che può richiedere 3-4 minuti) e dovresti vedere il completamento del processo con l'URL del servizio che ti viene mostrato.

Di seguito è riportato un esempio di esecuzione:

87ba8dbf88e8cfa4.png

testa l'applicazione

Ora che abbiamo eseguito il deployment dell'applicazione in Cloud Run, puoi accedere all'applicazione API in questo modo:

  1. Prendi nota dell'URL del servizio nel passaggio precedente. Ad esempio, nella mia configurazione, è indicato come https://my-inventory-api-bt2r5243dq-uw.a.run.app. Chiamiamo questo <SERVICE_URL>.
  2. Apri un browser e accedi ai tre URL seguenti per gli endpoint API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Dovrebbe rispettare le specifiche che abbiamo fornito in una sezione precedente con esempi di richiesta e risposta dell'API.

Recupera i dettagli del servizio da Cloud Run

Abbiamo eseguito il deployment del nostro servizio API in 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 vedere il servizio di cui hai appena eseguito il deployment. A seconda del nome selezionato, il risultato dovrebbe essere simile al seguente:

2633965c4bc957cc.png

Fai clic sul nome del servizio per visualizzare i dettagli. Di seguito sono riportati i dettagli di esempio:

33042ae64322ce07.png

Osserva l'URL, che non è altro che l'URL del servizio che puoi forare nel browser e che puoi accedere all'API Inventory di cui abbiamo appena eseguito il deployment. Dai un'occhiata alle metriche e ad altri dettagli.

Cominciamo 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:

  1. Cerca Pub/Sub nella casella di ricerca e vai a Pub/Sub. 935028bd8f6328ef.png
  2. Fai clic sulla scheda Argomenti se non è quella su cui ti trovi già. 7fd8bf91386a88fd.png
  3. Fai clic sul pulsante Crea argomento. cd9d197f9023c41b.png
  4. Inserisci un nome riconoscibile per l'argomento.

173f313b4a3c4934.png

  1. Fai clic sul pulsante Crea. ca9a02477da21a44.png
  2. Copia il Nome argomento utilizzando il pulsante icona di copia. Ti servirà per la prossima sezione.

20848252ee83df93.png

5. Crea un criterio di avviso per gli errori

Esplorazione dei log degli errori

Per visualizzare i log degli errori per l'applicazione:

Fai clic sulla scheda Logging.

Verrà visualizzata un'interfaccia di log in cui puoi selezionare/deselezionare in modo specifico varie risorse (progetto, risorsa Google Cloud, nomi servizi ecc.) insieme ai livelli di log per filtrare i messaggi di log in base alle esigenze.

6605b68395185b89.png

Simula alcune richieste non valide al servizio di inventario fornendo ID prodotto diversi da I-1, I-2 e I-3. Ad es. una richiesta errata è:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Ora cercheremo tutti gli AVVISO generati dalla nostra API quando nella query viene fornito un ID prodotto errato.

Creazione di un criterio di avviso personalizzato basato su log per errori

Supponiamo di voler fare attenzione a un messaggio di errore molto specifico per una parte dell'applicazione. Supponiamo che notiamo un numero elevato di errori nella ricerca degli ID prodotto. Questo problema è sintomo di molti possibili problemi (un link non valido, un'incoerenza nel database o un bot che enumera il nostro sito). Anche se sarebbe difficile o impossibile immaginare ogni potenziale causa, l'applicazione che invia questo messaggio anche una volta è un problema generale di cui vogliamo essere al corrente. Per inviare un avviso in merito, dobbiamo creare un criterio basato sui dati presenti nei nostri log degli errori.

  1. Nella casella della query, inserisci i seguenti parametri di query:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "AVVISO nell'app: Ricevuta richiesta di inventario per productid errato"

Il sito dovrebbe avere il seguente aspetto:

f672154cfebf0051.png

  1. Fai clic su Esegui query. Verranno visualizzate tutte le richieste pervenute e che presentano questo problema.

77c190e3a2fab6bf.png

  1. Per convertire quanto sopra in un avviso, fai clic sul pulsante Crea avviso, visibile in Esplora log, subito sotto il campo della query, a destra:

4cd3fcf142189376.png

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

b82446854bad87fc.png

  1. 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"

764227db73ec3de6.png

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

bb3d96448ec998a1.png

  1. Infine, la domanda "Chi deve ricevere una notifica?" seleziona il canale di notifica Pub/Sub che hai creato in precedenza:

3593c48c29d4b76c.png

  1. Fai clic su Salva. Per visualizzare e gestire il criterio di avviso, visita la pagina Avvisi e controlla in Criteri: ca08ea380fb37c91.png

6. Complimenti

Congratulazioni. Hai configurato correttamente il controllo di uptime per inviare avvisi a Pub/Sub.