Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Trigger di seconde parti con Cloud Logging

Molti eventi Google Cloud Platform vengono registrati nell'audit log di Cloud. Puoi filtrare questi log e inoltrarli agli argomenti Pub/Sub utilizzando i sink. Questi argomenti Pub/Sub possono quindi inviare notifiche che attivano Cloud Functions. Questo consente di creare eventi personalizzati da qualsiasi servizio Google Cloud Platform che produce audit log.

Configurazione

Per eseguire l'esempio di seguito, sono necessari un argomento Pub/Sub e un sink di Cloud Logging. L'esempio li utilizza per inoltrare Cloud Audit Logs a una funzione Cloud Functions.

Struttura dell'evento

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

Codice di esempio

Puoi utilizzare una funzione Pub/Sub-trigger come quella di seguito per rilevare e rispondere ai log cloud 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']}")

Go


// 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);
  }
}

Deployment di una funzione

Utilizza il comando seguente per eseguire il deployment della funzione:

Node.js

gcloud functions deploy processLogEntry \
--runtime nodejs18 \
--trigger-topic YOUR_PUBSUB_TOPIC
Puoi utilizzare i seguenti valori per il flag --runtime per specificare la versione di Node.js che preferisci:
  • nodejs18 (consigliato)
  • nodejs16
  • nodejs14
  • nodejs12
  • nodejs10

Python

gcloud functions deploy process_log_entry \
--runtime python310 \
--trigger-topic YOUR_PUBSUB_TOPIC
Puoi utilizzare i seguenti valori per il flag --runtime per specificare la versione di Python che preferisci:
  • python310 (consigliato)
  • python311 (anteprima)
  • python39
  • python38
  • python37

Go

gcloud functions deploy ProcessLogEntry \
--runtime go119 \
--trigger-topic YOUR_PUBSUB_TOPIC
Puoi utilizzare i seguenti valori per il flag --runtime per specificare la tua versione di Go preferita:
  • go119 (consigliato)
  • go118
  • go116
  • go113
  • go111

Java

gcloud functions deploy java-log-function \
--entry-point StackdriverLogging \
--runtime java17 \
--memory 512MB \
--trigger-topic YOUR_PUBSUB_TOPIC
Puoi utilizzare i seguenti valori per il flag --runtime per specificare la versione di Java che preferisci:
  • java17 (consigliato)
  • java11

Attivazione di una funzione

Quando viene creata una voce di log Cloud che corrisponde a uno dei tuoi filtri, dovresti visualizzare le voci di log corrispondenti per la tua funzione:

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