Activadores secundarios con Stackdriver

Muchos eventos de Google Cloud Platform se encuentran en los registros de auditoría de Stackdriver. Puedes filtrar estos registros y reenviarlos a los temas de Pub/Sub mediante receptores. Luego, estos temas de Pub/Sub pueden enviar notificaciones que activan funciones de Cloud Functions. Esto te permite crear eventos personalizados desde cualquier servicio de Google Cloud Platform que produzca registros de auditoría.

Configuración

Para ejecutar la muestra de abajo, deberás contar con un tema de Pub/Sub y un receptor de Stackdriver Logging. La muestra los usa para reenviar registros de auditoría de Stackdriver a una función de Cloud Functions.

Estructura de eventos

Como ocurre con todas las funciones activadas por Pub/Sub, las que se activan mediante entradas de registro de Stackdriver reciben un objeto PubsubMessage cuyo parámetro data es una string codificada en base64. En el caso de los eventos de registro de Stackdriver, la decodificación de este valor muestra la entrada de registro relevante como una string JSON.

Código de muestra

Puedes usar una función activada por Pub/Sub como la que aparece a continuación para detectar registros de Stackdriver exportados y responder a ellos:

Node.js

exports.processLogEntry = data => {
  // Node 6: data.data === Node 8+: data
  const dataBuffer = Buffer.from(data.data.data || 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.
type PubSubMessage struct {
	Data []byte `json:"data"`
}

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

Implementa una función

Usa el siguiente comando para implementar tu función:

Node.js 8

gcloud functions deploy processLogEntry --runtime nodejs8 --trigger-topic YOUR_PUBSUB_TOPIC

Node.js 10 (Beta)

gcloud functions deploy processLogEntry --runtime nodejs10 --trigger-topic YOUR_PUBSUB_TOPIC

Node.js 6 (obsoleto)

gcloud functions deploy processLogEntry --runtime nodejs6 --trigger-topic YOUR_PUBSUB_TOPIC

Python

gcloud functions deploy process_log_entry --runtime python37 --trigger-topic YOUR_PUBSUB_TOPIC

Go

gcloud functions deploy ProcessLogEntry --runtime go111 --trigger-topic YOUR_PUBSUB_TOPIC

Activa una función

Cuando se crea una entrada de registro de Stackdriver que coincide con uno de tus filtros, deberías consultar las entradas de registros correspondientes para tu función:

Method: METHOD
Resource: projects/YOUR_GCLOUD_PROJECT/...
Initiator: YOUR_EMAIL_ADDRESS
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Functions