Attivare le funzioni dalle voci di log

Molti eventi Google Cloud vengono registrati in Cloud Audit Logs. Puoifiltrare questi log e inoltrarli agli argomenti Pub/Sub utilizzando destinazioni. Questi argomenti Pub/Sub possono quindi inviare notifiche che attivano le funzioni Cloud Run. Puoi creare eventi personalizzati da qualsiasi servizio Google Cloud che generi audit log.

Questa pagina mostra un esempio di come attivare le funzioni dalle voci di log instradate in un argomento Pub/Sub.

Struttura degli eventi delle funzioni attivate da Pub/Sub

Come tutte le funzioni attivate da Pub/Sub, le funzioni attivate dalle voci di log di Cloud Logging ricevono un oggetto PubsubMessage il cui parametro data è una stringa codificata in base64. Per gli eventi di log di Cloud Logging, la decodifica di questo valore restituisce la voce di log pertinente come stringa JSON.

Prima di iniziare

Il codice campione inoltra Cloud Audit Logs a una funzione Cloud Run. Prima di eseguire il codice campione, devi disporre di quanto segue:

Consulta la guida agli attivatori Pub/Sub per le API da abilitare e i ruoli richiesti per il deployment delle funzioni attivate da Pub/Sub.

Codice di esempio

Puoi utilizzare una funzione attivata da Pub/Sub per rilevare e rispondere ai log di Cloud Logging esportati:

Node.js

exports.processLogEntry = data => {
  const dataBuffer = Buffer.from(data.data, 'base64');

  const logEntry = JSON.parse(dataBuffer.toString('ascii')).protoPayload;
  console.log(`Method: ${logEntry.methodName}`);
  console.log(`Resource: ${logEntry.resourceName}`);
  console.log(`Initiator: ${logEntry.authenticationInfo.principalEmail}`);
};

Python

import base64
import json

def process_log_entry(data, context):
    data_buffer = base64.b64decode(data["data"])
    log_entry = json.loads(data_buffer)["protoPayload"]

    print(f"Method: {log_entry['methodName']}")
    print(f"Resource: {log_entry['resourceName']}")
    print(f"Initiator: {log_entry['authenticationInfo']['principalEmail']}")

Vai


// Package log contains examples for handling Cloud Functions logs.
package log

import (
	"context"
	"log"
)

// PubSubMessage is the payload of a Pub/Sub event.
// See the documentation for more details:
// https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// ProcessLogEntry processes a Pub/Sub message from Cloud Logging.
func ProcessLogEntry(ctx context.Context, m PubSubMessage) error {
	log.Printf("Log entry data: %s", string(m.Data))
	return nil
}

Java


import com.google.cloud.functions.BackgroundFunction;
import com.google.cloud.functions.Context;
import functions.eventpojos.PubsubMessage;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.logging.Logger;

public class StackdriverLogging implements BackgroundFunction<PubsubMessage> {
  private static final Logger logger = Logger.getLogger(StackdriverLogging.class.getName());

  @Override
  public void accept(PubsubMessage message, Context context) {
    String name = "World";

    if (!message.getData().isEmpty()) {
      name = new String(Base64.getDecoder().decode(
          message.getData().getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
    }
    String res = String.format("Hello, %s", name);
    logger.info(res);
  }
}

Esegui il deployment e attiva una funzione

Per configurare un trigger durante il deployment della funzione:

  1. Esegui il seguente comando nella directory contenente il codice campione per eseguire il deployment della funzione:

    Node.js

    gcloud beta run deploy nodejs-log-function \
          --source . \
          --function processLogEntry \
          --base-image nodejs20 \
          --region REGION
    

    Python

    gcloud beta run deploy python-log-function \
          --source . \
          --function process_log_entry \
          --base-image python312 \
          --region REGION
    

    Vai

    gcloud beta run deploy go-log-function \
          --source . \
          --function ProcessLogEntry \
          --base-image go122 \
          --region REGION
    

    Java

    gcloud beta run deploy java-log-function \
          --source . \
          --function StackdriverLogging \
          --base-image java21 \
          --region REGION
    

    Sostituisci:

    • REGION con la regione Google Cloud in cui vuoi eseguire il deployment della funzione. Ad esempio: us-central1.

    • Il flag --function specifica il punto di contatto della funzione nel codice sorgente di esempio. Questo è il codice che Cloud Run esegue quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completamente qualificato esistente nel codice sorgente.

    • Il flag --base-image specifica l'ambiente dell'immagine di base per la funzione. Per ulteriori dettagli sulle immagini di base e sui pacchetti inclusi in ogni immagine, consulta Immagini di base dei runtime.

  2. Esegui il comando seguente per creare un attivatore che filtra gli eventi:

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=EVENTARC_TRIGGER_LOCATION \
        --destination-run-service=SERVICE  \
        --destination-run-region=REGION \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Sostituisci:

    • TRIGGER_NAME con il nome dell'attivatore.

    • EVENTARC_TRIGGER_LOCATION con la posizione per l'trigger Eventarc. In generale, la posizione di un trigger Eventarc deve corrispondere alla posizione della risorsa Google Cloud che vuoi monitorare per rilevare gli eventi. Nella maggior parte dei casi, devi anche eseguire il deployment della funzione nella stessa regione. Per ulteriori dettagli sulle località dei trigger Eventarc, consulta Informazioni sulle località Eventarc.

    • SERVICE con il nome della funzione di cui stai eseguendo il deployment.

    • REGION con la regione Cloud Run della funzione.

    • PROJECT_NUMBER con il numero del tuo progetto Google Cloud. Gli attivatori Eventarc sono collegati agli account di servizio da utilizzare come identità quando viene invocata la funzione. L'account di servizio dell'attivatore Eventarc deve disporre dell'autorizzazione per richiamare la funzione. Per impostazione predefinita, Cloud Run utilizza l'account di servizio Compute predefinito.

    • Il flag --event-filters specifica i filtri eventi monitorati dall'attivatore. Un evento che corrisponde a tutti i filtri event-filters attiva le chiamate alla funzione. Ogni attivatore deve avere un tipo di evento supportato. Non puoi modificare il tipo di filtro evento dopo la creazione. Per modificare il tipo di filtro eventi, devi creare un nuovo attivatore ed eliminare quello precedente. Se vuoi, puoi ripetere il flag --event-filters con un filtro supportato nel modulo ATTRIBUTE=VALUE per aggiungere altri filtri.

Voce di log di Cloud

Quando viene creata una voce di log Cloud corrispondente a uno dei tuoi filtri, le voci di log corrispondenti per la funzione nella console Google Cloud dovrebbero avere il seguente aspetto:

Method: METHOD
Resource: projects/YOUR_GCLOUD_PROJECT/...
Initiator: YOUR_EMAIL_ADDRESS