Questo tutorial ti insegna a risolvere gli errori di runtime riscontrati quando utilizzi Eventarc per instradare eventi da Cloud Storage a un servizio Cloud Run non autenticato utilizzando Cloud Audit Logs.
Crea un repository standard Artifact Registry
Crea un repository standard di Artifact Registry per archiviare l'immagine container:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Sostituisci REPOSITORY
con un nome univoco per il repository.
Crea un bucket Cloud Storage
Crea un bucket Cloud Storage in ciascuna delle due regioni come origine evento per il servizio Cloud Run:
Crea un bucket in
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Crea un bucket in
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Dopo aver creato l'origine evento, esegui il deployment del servizio di ricezione di eventi su Cloud Run.
Esegui il deployment del ricevitore di eventi
Esegui il deployment di un servizio Cloud Run che riceve e registra gli eventi.
Recupera il esempio di codice clonando il repository GitHub:
Vai
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Esamina il codice di questo tutorial, che consiste in quanto segue:
Un gestore di eventi che riceve l'evento in entrata come CloudEvent all'interno della richiesta HTTP
POST
:Vai
Java
.NET
Node.js
Python
Un server che utilizza il gestore di eventi:
Vai
Java
.NET
Node.js
Python
Un Dockerfile che definisce l'ambiente operativo per il servizio. I contenuti del Dockerfile variano in base alla lingua:
Vai
Java
.NET
Node.js
Python
Crea l'immagine container con Cloud Build e caricala in Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Esegui il deployment dell'immagine container su Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Se il deployment ha esito positivo, la riga di comando visualizza l'URL del servizio.
Crea un trigger
Dopo aver eseguito il deployment di un servizio Cloud Run, configura un trigger per rilevare gli eventi di Cloud Storage tramite gli audit log.
Crea un trigger Eventarc per rimanere in ascolto degli eventi di Cloud Storage instradati utilizzando Cloud Audit Logs:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Viene creato un trigger denominato
troubleshoot-trigger
.Per confermare la creazione di
troubleshoot-trigger
, esegui:gcloud eventarc triggers list
L'output dovrebbe essere simile al seguente:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Generare e visualizzare un evento
Verifica di aver eseguito correttamente il deployment del servizio e di poter ricevere eventi da Cloud Storage.
Crea e carica un file nel bucket di archiviazione
BUCKET1
:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
Monitora i log per verificare se il servizio ha ricevuto un evento. Per visualizzare la voce di log, completa i seguenti passaggi:
Filtra le voci di log e restituisci l'output in formato JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
Cerca una voce di log simile alla seguente:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Tieni presente che inizialmente non viene restituita alcuna voce di log. Ciò indica che si è verificato un problema nella configurazione che devi esaminare.
Esaminare il problema
Segui la procedura per capire perché il servizio non riceve eventi.
Tempo di inizializzazione
Anche se il trigger viene creato immediatamente, la propagazione e il filtraggio degli eventi possono richiedere fino a due minuti. Esegui questo comando per verificare che un trigger sia attivo:
gcloud eventarc triggers list
L'output indica lo stato del trigger. Nel seguente esempio,
troubleshoot-trigger
sarà attivo entro le ore 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Una volta attivato il trigger, carica di nuovo un file nel bucket di archiviazione. Gli eventi vengono scritti nei log del servizio Cloud Run. Se il servizio non riceve eventi, il problema potrebbe essere correlato alle dimensioni degli eventi.
Audit log
In questo tutorial, gli eventi Cloud Storage vengono instradati utilizzando Cloud Audit Logs e inviati a Cloud Run. Verifica che gli audit log siano abilitati per Cloud Storage.
Nella console Google Cloud , vai alla pagina Log di controllo.
- Seleziona la casella di controllo Google Cloud Storage.
- Assicurati che siano selezionati i tipi di log Lettura amministratore, Lettura dati e Scrittura dati.
Dopo aver abilitato Cloud Audit Logs, carica di nuovo il file nel bucket di archiviazione e controlla i log. Se il servizio continua a non ricevere eventi, il problema potrebbe essere correlato alla località del trigger.
Posizione del trigger
Potrebbero esserci più risorse in località diverse e devi filtrare gli eventi provenienti da origini che si trovano nella stessa regione della destinazione Cloud Run. Per saperne di più, consulta le località supportate da Eventarc e Informazioni sulle località Eventarc.
In questo tutorial hai eseguito il deployment del servizio Cloud Run su
us-central1
. Poiché hai impostato eventarc/location
su us-central1
, hai anche
creato un trigger nella stessa posizione.
Tuttavia, hai creato due bucket Cloud Storage nelle località us-east1
e
us-west1
. Per ricevere eventi da queste località, devi creare
trigger Eventarc in queste località.
Crea un trigger Eventarc che si trova in us-east1
:
Conferma la posizione del trigger esistente:
gcloud eventarc triggers describe troubleshoot-trigger
Imposta la località e la regione su
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Esegui nuovamente il deployment del ricevitore di eventi creando ed eseguendo il deployment dell'immagine container in Cloud Run.
Crea un nuovo trigger che si trova in
us-east1
:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Verifica che il trigger sia stato creato:
gcloud eventarc triggers list
L'inizializzazione di un trigger può richiedere fino a due minuti prima che inizi a instradare gli eventi.
Per verificare che il trigger sia ora implementato correttamente, genera e visualizza un evento.
Altri problemi che potresti riscontrare
Potresti riscontrare altri problemi durante l'utilizzo di Eventarc.
Dimensione dell'evento
Gli eventi che invii non devono superare i limiti di dimensione degli eventi.
Un trigger che in precedenza forniva eventi ha smesso di funzionare
Verifica che l'origine stia generando eventi. Controlla Cloud Audit Logs e assicurati che il servizio monitorato emetta log. Se i log vengono registrati, ma gli eventi non vengono distribuiti, contatta l'assistenza.
Verifica che esista un argomento Pub/Sub con lo stesso nome del trigger. Eventarc utilizza Pub/Sub come livello di trasporto e utilizzerà un argomento Pub/Sub esistente o creerà e gestirà automaticamente un argomento per te.
- Per elencare i trigger, vedi
gcloud eventarc triggers list
. Per elencare gli argomenti Pub/Sub, esegui:
gcloud pubsub topics list
Verifica che il nome dell'argomento Pub/Sub includa il nome del trigger creato. Ad esempio:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Se l'argomento Pub/Sub non è presente, crea di nuovo il trigger per un provider, un tipo di evento e una destinazione Cloud Run specifici.
- Per elencare i trigger, vedi
Verifica che il trigger sia stato configurato per il servizio.
Nella console Google Cloud , vai alla pagina Servizi.
Fai clic sul nome del servizio per aprire la pagina Dettagli servizio.
Fai clic sulla scheda Attivatori.
Il trigger Eventarc associato al servizio deve essere elencato.
Verifica l'integrità dell'argomento e della sottoscrizione Pub/Sub utilizzando i tipi di metriche Pub/Sub.
Puoi monitorare i messaggi inoltrati non recapitabili utilizzando la metrica
subscription/dead_letter_message_count
. Questa metrica mostra il numero di messaggi non recapitabili che Pub/Sub inoltra da una sottoscrizione.Se i messaggi non vengono pubblicati nell'argomento, controlla Cloud Audit Logs e assicurati che il servizio monitorato emetta log. Se i log vengono registrati, ma gli eventi non vengono recapitati, contatta l'assistenza.
Puoi monitorare gli abbonamenti push utilizzando la metrica
subscription/push_request_count
e raggruppandola perresponse_code
esubcription_id
.Se vengono segnalati errori push, controlla i log del servizio Cloud Run. Se l'endpoint di ricezione restituisce un codice di stato diverso da OK, significa che il codice Cloud Run non funziona come previsto e devi contattare l'assistenza.
Per saperne di più, vedi Creare criteri di avviso basati su soglie delle metriche.