Implementa un trabajo para importar registros de Cloud Storage a Cloud Logging

Last reviewed 2024-01-02 UTC

En este documento, se describe cómo implementar la arquitectura de referencia que se describe en Importa registros de Cloud Storage a Cloud Logging.

Estas instrucciones están destinadas a ingenieros y desarrolladores, incluidos DevOps, ingenieros de confiabilidad de sitios (SRE) e investigadores de seguridad, que deseen configurar y ejecutar el trabajo de importación de registros. En este documento, también se supone que estás familiarizado con la ejecución de trabajos de importación de Cloud Run y cómo usar Cloud Storage y Cloud Logging.

Arquitectura

En el siguiente diagrama, se muestra cómo se usan los servicios de Google Cloud en esta arquitectura de referencia:

Diagrama de flujo de trabajo de importación de registros de Cloud Storage a Cloud Logging

Para obtener más información, consulta Importa registros de Cloud Storage a Cloud Logging.

Objetivos

  • Crea y configura un trabajo de importación de Cloud Run
  • Crea una cuenta de servicio para ejecutar el trabajo:

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Asegúrate de que los registros que deseas importar se hayan exportado antes a Cloud Storage, lo que significa que ya están organizados en el formato de exportación esperado.

  2. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

  3. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  4. Reemplaza PROJECT_ID por el ID del proyecto de destino.

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita las APIs de Cloud Run and Identity and Access Management (IAM):

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

Roles obligatorios

Para obtener los permisos que necesitas para implementar esta solución, pídele a tu administrador que te otorgue los siguientes roles de IAM:

  • Para otorgar el rol de escritor de registros en el bucket de registros, sigue estos pasos: Administrador de IAM de proyecto (roles/resourcemanager.projectIamAdmin) en el proyecto de destino
  • Para otorgar el rol de visualizador de objetos de almacenamiento en el bucket de almacenamiento: Administrador de almacenamiento (roles/storage.admin) en el proyecto en el que se aloja el bucket de almacenamiento
  • Para crear una cuenta de servicio, haz lo siguiente: Crea cuentas de servicio (roles/iam.serviceAccountCreator) en el proyecto de destino
  • Para habilitar los servicios en el proyecto, ejecuta el siguiente comando: Administrador de Service Usage (roles/serviceusage.serviceUsageAdmin) en el proyecto de destino
  • Para actualizar el bucket de registros y borrar los registros importados: administrador de Logging (roles/logging.admin) en el proyecto de destino
  • Para crear, ejecutar y modificar el trabajo de importación, haz lo siguiente: Desarrollador de Cloud Run (roles/run.developer) en el proyecto de destino

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios a través de funciones personalizadas o cualquier otro rol predefinido.

Actualiza el bucket de registros para usar el análisis de registros

Te recomendamos usar el bucket de registros predeterminado y actualizarlo para usar las estadísticas de registros. Sin embargo, en un entorno de producción, puedes usar tu propio bucket de registro si el bucket predeterminado no cumple con tus requisitos. Si decides usar tu propio bucket, debes enrutar los registros que se transfieren al proyecto de destino a este bucket de registro. Para obtener más información, consulta Configura buckets de registros y Crea un receptor.

Cuando actualices el bucket, puedes usar SQL para consultar y analizar tus registros. No hay costo adicional por actualizar el bucket o usar Log Analytics.

Para actualizar el bucket de registro predeterminado en el proyecto de destino, haz lo siguiente:

  • Actualiza el bucket de registro predeterminado para usar estadísticas de registros:

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

    Reemplaza lo siguiente:

    • BUCKET_ID: Es el nombre del bucket de registros (por ejemplo, _Default).
    • LOCATION: Es una región compatible (por ejemplo, global).

Crea el trabajo de importación de Cloud Run

Cuando creas el trabajo, puedes usar la imagen de contenedor compilada previamente que se proporciona para esta arquitectura de referencia. Si necesitas modificar la implementación para cambiar el período de retención de 30 días o si tienes otros requisitos, puedes compilar tu propio período personalizado imagen.

  • En Cloud Shell, crea el trabajo con las opciones de configuración y las variables de entorno:

    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
    

    Reemplaza lo siguiente:

    • JOB_NAME: el nombre de tu trabajo.
    • IMAGE_URL: es la referencia a la imagen del contenedor. Usa us-docker.pkg.dev/cloud-devrel-public-resources/samples/import-logs-solution o la URL de la imagen personalizada, si creaste una mediante las instrucciones de GitHub.
    • REGION: es la región en la que deseas que se ubique el trabajo; para evitar costos adicionales, recomendamos mantener la región del trabajo igual o dentro de la misma multirregión que la región del bucket de Cloud Storage. Por ejemplo, si tu bucket es multirregional en EE.UU., puedes usar us-central1. Para obtener más información, consulta Optimización de costos.
    • TASKS: es la cantidad de tareas que se deben ejecutar. El valor predeterminado es 1. Puedes aumentar la cantidad de tareas si se agotan los tiempos de espera.
    • CPU: es el límite de CPU, que puede ser de 1, 2, 4, 6 u 8 CPUs. El valor predeterminado es 2. Puedes aumentar la cantidad si se agotan los tiempos de espera. Para obtener más información, consulta Configura límites de CPU.
    • MEMORY: Es el límite de memoria. El valor predeterminado es 2Gi. Puedes aumentar la cantidad si se agotan los tiempos de espera. Para obtener más información, consulta Configura límites de memoria.
    • END_DATE: el final del período en el formato MM/DD/AAAA. Se importan los registros con marcas de tiempo anteriores o iguales a esta fecha.
    • LOG_ID: el identificador de registro de los registros que deseas importar. El ID de registro es parte del campo logName de la entrada de registro. Por ejemplo, cloudaudit.googleapis.com.
    • START_DATE: es el inicio del período en el formato MM/DD/AAAA. Se importan los registros con marcas de tiempo posteriores o iguales a esta fecha.
    • STORAGE_BUCKET_NAME: es el nombre del bucket de Cloud Storage en el que se almacenan los registros (sin el prefijo gs://).

    La opción max-retries se establece en cero para evitar reintentos para las tareas con errores, lo que puede causar entradas de registro duplicadas.

    Si el trabajo de Cloud Run falla debido a un tiempo de espera, se puede generar una importación incompleta. Para evitar importaciones incompletas debido a los tiempos de espera, aumenta el valor de tasks, así como los recursos de CPU y memoria.

Aumenta estos valores puede aumentar los costos. Para obtener más información sobre los costos, consulta Optimización de costos.

Crea una cuenta de servicio para ejecutar tu trabajo de Cloud Run

  1. En Cloud Shell, crea la cuenta de servicio administrada por el usuario:

    gcloud iam service-accounts create SA_NAME
    

    Reemplaza SA_NAME por el nombre de la cuenta de servicio.

  2. Otorga el rol Visualizador de objetos de almacenamiento en el bucket de almacenamiento:

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

    Reemplaza lo siguiente:

    • STORAGE_BUCKET_NAME: el nombre del bucket de almacenamiento que usaste en la configuración del trabajo de importación. Por ejemplo, my-bucket.
    • PROJECT_ID: El ID del proyecto de destino.
  3. Otorga el rol Escritor de registros en el bucket de registro:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/logging.logWriter
    
  4. Configura la cuenta de servicio para el trabajo de Cloud Run:

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

    Reemplaza REGION por la misma región en la que implementaste el trabajo de importación de Cloud Run.

Ejecuta el trabajo de importación

  • En Cloud Shell, ejecuta el trabajo creado:

    gcloud run jobs execute JOB_NAME \
    --region=REGION
    

Para obtener más información, consulta Ejecuta trabajos y Administra ejecuciones de trabajos.

Si necesitas volver a ejecutar el trabajo, borra los registros importados antes para evitar crear duplicados. Para obtener más información, consulta Borra los registros importados más adelante en este documento.

Cuando consultas los registros importados, los duplicados no aparecen en los resultados de la consulta. Cloud Logging quita los duplicados (entradas de registro del mismo proyecto, con el mismo ID de inserción y marca de tiempo) de los resultados de la consulta. Para obtener más información, consulta el campo insert_id en la referencia de la API de Logging.

Verifica los resultados

Para validar que el trabajo se haya completado de forma correcta, en Cloud Shell, puedes consultar los resultados de la importación:

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

El resultado muestra los registros importados. Si este proyecto se usó para ejecutar más de un trabajo de importación dentro del período especificado, el resultado también muestra los registros importados de esos trabajos.

Para obtener más opciones y detalles sobre la consulta de entradas de registro, visita gcloud logging read.

Borra registros importados

Si necesitas ejecutar el mismo trabajo más de una vez, borra los registros importados para evitar entradas duplicadas y aumentos de costos.

  • Para borrar registros importados, en Cloud Shell, ejecuta los siguientes registros:

    gcloud logging logs delete imported_logs
    

Ten en cuenta que si borras los registros importados, se borran definitivamente todas las entradas de registro que se importaron al proyecto de destino y no solo los resultados de la última ejecución del trabajo de importación.

Pasos siguientes

Colaboradores

Autor: Leonid Yankulin | Ingeniero de Relaciones con Desarrolladores

Otros colaboradores: