Esegui il deployment di un job per importare i log da Cloud Storage a Cloud Logging

Last reviewed 2024-01-02 UTC

Questo documento descrive come eseguire il deployment dell'architettura di riferimento descritta in Importare i log da Cloud Storage a Cloud Logging.

Queste istruzioni sono rivolte a ingegneri e sviluppatori, tra cui DevOps, SRE (Site Reliability Engineer) e investigatori della sicurezza, che vogliono configurare ed eseguire il job di importazione dei log. Questo documento presuppone anche che tu abbia familiarità con l'esecuzione dei job di importazione di Cloud Run e come utilizzare Cloud Storage e Cloud Logging.

Architettura

Il seguente diagramma mostra come vengono utilizzati i servizi Google Cloud in questa architettura di riferimento:

Diagramma del flusso di lavoro dell'importazione dei log da Cloud Storage a Cloud Logging.

Per maggiori dettagli, consulta Importare i log da Cloud Storage a Cloud Logging.

Obiettivi

  • Crea e configura un job di importazione di Cloud Run
  • Crea un account di servizio per eseguire il job

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

  1. Assicurati che i log che intendi importare siano stati precedentemente esportati in Cloud Storage, il che significa che sono già organizzati nel formato di esportazione previsto.

  2. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

  3. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  4. Sostituisci PROJECT_ID con l'ID progetto di destinazione.

  5. Assicurati che la fatturazione sia abilitata per il tuo progetto Google Cloud.

  6. Abilita le API Cloud Run and Identity and Access Management (IAM).

    gcloud services enable run.googleapis.com iam.googleapis.com

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per il deployment di questa soluzione, chiedi all'amministratore di concederti i ruoli IAM seguenti:

  • Per concedere il ruolo Writer log sul bucket di log: Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin) sul progetto di destinazione
  • Per concedere il ruolo Visualizzatore oggetti Storage nel bucket di archiviazione: Amministratore Storage (roles/storage.admin) sul progetto in cui è ospitato il bucket di archiviazione
  • Per creare un account di servizio: Crea account di servizio (roles/iam.serviceAccountCreator) nel progetto di destinazione
  • Per abilitare i servizi nel progetto: Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin) nel progetto di destinazione
  • Per eseguire l'upgrade del bucket di log ed eliminare i log importati: Amministratore Logging (roles/logging.admin) nel progetto di destinazione
  • Per creare, eseguire e modificare il job di importazione: Sviluppatore Cloud Run (roles/run.developer) sul progetto di destinazione

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Esegui l'upgrade del bucket di log per utilizzare Analisi dei log

Ti consigliamo di utilizzare il bucket di log predefinito e di eseguirne l'upgrade per utilizzare Analisi dei log. Tuttavia, in un ambiente di produzione, puoi utilizzare il tuo bucket di log se il bucket predefinito non soddisfa i tuoi requisiti. Se decidi di utilizzare un tuo bucket, devi eseguire il routing dei log importati nel progetto di destinazione a questo bucket di log. Per ulteriori informazioni, consulta Configurare i bucket di log e Creare un sink.

Quando esegui l'upgrade del bucket, puoi utilizzare SQL per eseguire query sui log e analizzarli. Non sono previsti costi aggiuntivi per l'upgrade del bucket o per l'utilizzo di Analisi dei log.

Per eseguire l'upgrade del bucket di log predefinito nel progetto di destinazione:

  • Esegui l'upgrade del bucket di log predefinito per utilizzare Analisi dei log:

    gcloud logging buckets update BUCKET_ID --location=LOCATION --enable-analytics
    

    Sostituisci quanto segue:

    • BUCKET_ID: il nome del bucket di log (ad esempio, _Default)
    • LOCATION: una regione supportata (ad esempio, global)

Crea il job di importazione di Cloud Run

Quando crei il job, puoi utilizzare l'immagine container predefinita fornita per questa architettura di riferimento. Se devi modificare l'implementazione per cambiare il periodo di conservazione di 30 giorni o se hai altri requisiti, puoi creare un'immagine personalizzata.

  • In Cloud Shell, crea il job con le configurazioni e le variabili di ambiente:

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --region=REGION \
    --tasks=TASKS \
    --max-retries=0 \
    --task-timeout=60m \
    --cpu=CPU \
    --memory=MEMORY \
    --set-env-vars=END_DATE=END_DATE,LOG_ID=LOG_ID,\
    START_DATE=START_DATE,STORAGE_BUCKET_NAME=STORAGE_BUCKET_NAME,\
    PROJECT_ID=PROJECT_ID
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome del lavoro.
    • IMAGE_URL: il riferimento all'immagine container. Utilizza us-docker.pkg.dev/cloud-devrel-public-resources/samples/import-logs-solution o l'URL dell'immagine personalizzata, se ne hai creata una seguendo le istruzioni in GitHub.
    • REGION: la regione in cui vuoi che si trovi il job. Per evitare costi aggiuntivi, ti consigliamo di mantenere la regione del job uguale o all'interno della stessa regione multiregionale del bucket Cloud Storage. Ad esempio, se il bucket si trova in più regioni degli Stati Uniti, puoi utilizzare us-central1. Per i dettagli, consulta Ottimizzazione dei costi.
    • TASKS: il numero di attività che il job deve eseguire. Il valore predefinito è 1. Puoi aumentare il numero di attività in caso di timeout.
    • CPU: il limite di CPU, che può essere pari a 1, 2, 4, 6 o 8 CPU. Il valore predefinito è 2. È possibile aumentare il numero in caso di timeout. Per maggiori dettagli, consulta Configurare i limiti della CPU.
    • MEMORY: il limite di memoria. Il valore predefinito è 2Gi. Puoi aumentare il numero in caso di timeout. Per maggiori dettagli, consulta Configurare i limiti di memoria.
    • END_DATE: la fine dell'intervallo di date nel formato MM/GG/AAAA. I log con timestamp precedenti o corrispondenti a questa data vengono importati.
    • LOG_ID: l'identificatore dei log dei log da importare. L'ID log fa parte del campo logName della voce di log. Ad esempio: cloudaudit.googleapis.com.
    • START_DATE: l'inizio dell'intervallo di date nel formato MM/GG/AAAA. I log con timestamp successivi o corrispondenti a questa data vengono importati.
    • STORAGE_BUCKET_NAME: il nome del bucket Cloud Storage in cui sono archiviati i log (senza il prefisso gs://).

    L'opzione max-retries è impostata su zero per impedire i nuovi tentativi per le attività non riuscite, il che può causare voci di log duplicate.

    Se il job Cloud Run ha esito negativo a causa di un timeout, può verificarsi un'importazione incompleta. Per evitare importazioni incomplete a causa di timeout, aumenta il valore tasks, nonché le risorse CPU e memoria.

Aumentando questi valori, i costi potrebbero aumentare. Per i dettagli sui costi, consulta Ottimizzazione dei costi.

Crea un account di servizio per eseguire il job Cloud Run

  1. In Cloud Shell, crea l'account di servizio gestito dall'utente:

    gcloud iam service-accounts create SA_NAME
    

    Sostituisci SA_NAME con il nome dell'account di servizio.

  2. Concedi il ruolo Visualizzatore oggetti Storage nel bucket di archiviazione:

    gcloud storage buckets add-iam-policy-binding gs://STORAGE_BUCKET_NAME \
    --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/storage.objectViewer
    

    Sostituisci quanto segue:

    • STORAGE_BUCKET_NAME: il nome del bucket di archiviazione utilizzato nella configurazione del job di importazione. Ad esempio, my-bucket.
    • PROJECT_ID: l'ID progetto di destinazione.
  3. Concedi il ruolo Writer log nel bucket di log:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/logging.logWriter
    
  4. Imposta l'account di servizio per il job Cloud Run:

    gcloud run jobs update JOB_NAME \
    --region=REGION \
    --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Sostituisci REGION con la stessa regione in cui hai eseguito il deployment del job di importazione di Cloud Run.

Esegui il job di importazione

  • In Cloud Shell, esegui il job creato:

    gcloud run jobs execute JOB_NAME \
    --region=REGION
    

Per ulteriori informazioni, consulta Eseguire job e Gestire le esecuzioni di job.

Se devi eseguire nuovamente il job, elimina i log importati in precedenza per evitare di creare duplicati. Per maggiori dettagli, consulta Eliminare i log importati più avanti in questo documento.

Quando esegui una query sui log importati, i duplicati non vengono visualizzati nei risultati della query. Cloud Logging rimuove i duplicati (voci di log dello stesso progetto, con lo stesso ID di inserimento e lo stesso timestamp) dai risultati della query. Per maggiori informazioni, consulta il campo insert_id nel riferimento dell'API Logging.

Verifica i risultati

Per verificare che il job sia stato completato correttamente, in Cloud Shell puoi eseguire query sui risultati dell'importazione:

  gcloud logging read 'log_id("imported_logs") AND timestamp<=END_DATE'

L'output mostra i log importati. Se questo progetto è stato utilizzato per eseguire più di un job di importazione entro il periodo di tempo specificato, l'output mostra anche i log importati da quei job.

Per ulteriori opzioni e dettagli sull'esecuzione di query sulle voci di log, consulta gcloud logging read.

Elimina log importati

Se devi eseguire lo stesso job più di una volta, elimina i log importati in precedenza per evitare voci duplicate e costi maggiori.

  • Per eliminare i log importati, esegui l'eliminazione dei log in Cloud Shell:

    gcloud logging logs delete imported_logs
    

Tieni presente che l'eliminazione dei log importati elimina tutte le voci di log importate nel progetto di destinazione e non solo i risultati dell'esecuzione dell'ultimo job di importazione.

Passaggi successivi

Collaboratori

Autore: Leonid Yankulin | Developer Relations Engineer

Altri collaboratori: