Situaciones para exportar Cloud Logging: Elasticsearch

En este caso, se muestra cómo exportar los registros seleccionados de Logging a un clúster de Elasticsearch. Elasticsearch es una base de datos de documentos de código abierto que transfiere, indexa y analiza datos no estructurados, como registros, métricas y otros tipos de telemetría. Integrar los registros recopilados por Logging en los registros que podrías tener en Elasticsearch te brinda una solución de análisis de registros unificada.

Este artículo forma parte de la serie Patrones de diseño para exportar datos de Logging.

Introducción

Elastic Stack tiene varias soluciones para transferir datos a un clúster de Elasticsearch. Logstash y Beats son los productos principales que se usan para recopilar, transformar y transferir datos. La elección entre Logstash y Beats depende del volumen de datos, las tasas de transferencia y los requisitos de latencia. Esta solución se centra en el componente Logstash de Elastic Stack porque Logstash es la opción más flexible para trabajar con los registros exportados desde Logging.

Puedes usar Logstash para recopilar, transformar y exportar registros desde varias fuentes y destinos. Es mejor usar Logstash cuando el volumen de registro es alto. Puedes usar el complemento de entrada de Pub/Sub y el complemento de entrada de Cloud Storage para integrar Logstash en Elasticsearch.

Beats es una plataforma de código abierto para transportadores ligeros de datos en Elasticsearch. Puedes usar el transportador pubsubbeat para transferir mensajes de Pub/Sub a Elasticsearch. Aunque existe un transportador gcsbeat, está diseñado para el envío ligero de archivos en el nivel raíz de un depósito, por lo que no es la mejor solución a fin de importar registros exportados por Logging.

Usa Beats en las siguientes circunstancias:

  • El volumen de registro es bajo (puede administrarse con una sola máquina).
  • No quieres la sobrecarga de ejecutar Logstash.
  • Tus canalizaciones de transferencia de Elastic pueden cumplir con tus requisitos de enriquecimiento de registros.

Usa Logstash en las siguientes circunstancias:

  • Si el volumen de registros es alto.
  • Si debes enriquecer los registros más allá de las capacidades de las canalizaciones de transferencia de Elastic.
  • Si necesitas poder exportar registros a sistemas que no sean Elasticsearch.
Volumen alto o personalización alta Volumen bajo y personalización baja
Tiempo real logstash-input-google_pubsub pubsubbeat
Eventual logstash-input-google_cloud_storage gcsbeat

En el siguiente diagrama, se muestra la arquitectura para la exportación por lotes y en tiempo real a Elasticsearch mediante Logstash.

Arquitectura para la exportación por lotes y en tiempo real a Elasticsearch mediante Logstash.

Configura la exportación de registros en tiempo real

En esta sección, crearás la canalización para la exportación de registros en tiempo real de Logging a Logstash mediante Pub/Sub.

Configura un tema de Pub/Sub

Activa registros de auditoría para todos los servicios

Los registros de auditoría de acceso a datos, excepto para BigQuery, están inhabilitados de forma predeterminada. A fin de habilitar todos los registros de auditoría, sigue las instrucciones para actualizar la política de IAM con la configuración que se detalla en la documentación de la política de auditoría. Los pasos son los siguientes:

  • Descarga la política de IAM actual como un archivo.
  • Agrega el objeto JSON o YAML de la política de registro de auditoría al archivo de política actual.
  • Actualiza el proyecto de Google Cloud con el archivo de política modificado.

A continuación, se muestra un ejemplo de un objeto JSON que habilita todos los registros de auditoría para todos los servicios.

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" }
        ]
    }
],

Configura la exportación de registros

Una vez que configures las exportaciones agregadas o la exportación de registros, debes definir mejor los filtros de registro para exportar registros de auditoría, registros relacionados con máquinas virtuales, registros de almacenamiento y registros de base de datos. El siguiente filtro de registros incluye los registros de auditoría de actividad del administrador y de acceso a los datos, y los registros para tipos de recursos específicos.

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=bigquery_resource

En la herramienta de línea de comandos de gcloud, usa el comando gcloud logging sinks create o la llamada a la API organizations.sinks.create para crear un receptor con los filtros adecuados. El siguiente comando de gcloud de ejemplo crea un receptor llamado gcp_logging_sink_pubsub para la organización. El receptor incluye todos los proyectos secundarios y especifica los filtros para seleccionar registros de auditoría específicos.

ORG_ID=your-org-id
PROJECT_ID=$(gcloud config get-value project)
gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/${PROJECT_ID}/topics/logs-export-topic \
    --log-filter='logName="/logs/cloudaudit.googleapis.com" OR resource.type:"gce" OR resource.type="gcs_bucket" OR resource.type="bigquery_resource"' \
    --include-children \
    --organization=${ORG_ID}

El resultado del comando es similar al siguiente:

Created [https://logging.googleapis.com/v2/organizations/your-org-id/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at /logging/docs/export/configure_export

En la entrada serviceAccount que muestra la llamada a la API, la identidad gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com se incluye en la respuesta. Esta identidad representa una cuenta de servicio de Google Cloud que se creó para la exportación. Hasta que otorgues a esta identidad acceso de publicación al tema de destino, las exportaciones de entradas de registro desde este receptor fallarán. Para obtener más información, consulta la siguiente sección o la documentación Otorga acceso a un recurso.

Establece permisos de políticas de IAM para el tema de Pub/Sub

Si agregas la cuenta de servicio gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com al tema pubsub.googleapis.com/projects/${PROJECT_ID}/topics/logs-export-topic con los permisos de publicador de Pub/Sub, otorgas a esta cuenta permiso para publicar en el tema. La exportación del receptor fallará hasta que agregues estos permisos.

Para agregar permisos a la cuenta de servicio, sigue estos pasos:

  1. En Cloud Console, abre la página Temas de Cloud Pub/Sub:

    IR A LA PÁGINA TEMAS

  2. Selecciona el nombre del tema.

  3. Haz clic en Mostrar panel de información y configura los permisos. Asegúrate de que el permiso de publicador de Pub/Sub esté seleccionado.

    Establece permisos.

Después de crear la exportación de registros mediante este filtro, los archivos de registro comienzan a propagarse en el tema de Pub/Sub del proyecto configurado. Puedes confirmar que el tema recibe mensajes mediante el Explorador de métricas en Cloud Monitoring. Mediante el uso del siguiente tipo de recurso y métrica, observa la cantidad de operaciones de envío de mensajes realizadas durante un período breve. Si configuraste la exportación de forma correcta, verás la actividad por encima de 0 en el gráfico, como en la siguiente captura de pantalla.

  • Tipo de recurso: pubsub_topic
  • Métrica: pubsub.googleapis.com/topic/send_message_operation_count
  • Filtro: topic_id="logs-export-topic"

Actividad en el grafo del Explorador de métricas

Configura la exportación de registros

Debido a que Logging tiene períodos de retención finitos para los registros, se recomienda crear una exportación de Logging a Cloud Storage. Usar Logstash para transferir registros exportados te permite buscar registros fuera de los períodos de retención predeterminados y también te ayuda a volver a propagar la base de datos de Elasticsearch cuando sea necesario.

Configura Logstash

  1. Descarga la versión más reciente de Logstash.
  2. Crea una cuenta de servicio de IAM y una clave de cuenta JSON para gcsbeat con las funciones Cloud Storage Admin y Pub/Sub Subscriber.
  3. Instala los complementos de entrada de Cloud Storage y Pub/Sub para Logstash mediante la ejecución del siguiente comando desde el directorio de instalación de Logstash:

    ./bin/logstash-plugin install \
        logstash-input-google_cloud_storage \
        logstash-input-exec \
        logstash-input-google_pubsub
    

Crea la canalización de transferencia por lotes

  • Crea un archivo de configuración de Logstash para Cloud Storage de la siguiente manera y reemplaza my-cloud-logs por el ID del depósito:

    input {
      google_cloud_storage {
        type => "gcs"
        interval => 60
        bucket_id => "my-cloud-logs"
        json_key_file => "logstash-sa.json"
        file_matches => ".*\.json"
        codec => "json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][gcs][line_id]}"
      }
    }
    

    Para obtener una lista de todas las opciones, consulta la documentación de configuración del complemento google_cloud_storage.

Los objetos en Cloud Storage que procesó Logstash se marcan con el elemento de metadatos x-goog-meta-ls-gcs-input:processed. El complemento de entrada omite cualquier objeto que tenga este elemento de metadatos. Si planeas volver a procesar los datos, debes quitar la etiqueta de metadatos de forma manual.

Crea la canalización en tiempo real

  • Crea un archivo de configuración logstash para la fuente de Pub/Sub de la siguiente manera:

    input {
      google_pubsub {
          type => "pubsub"
          project_id => "my-project-id"
          topic => "logs-export-topic"
          subscription => "logstash"
          json_key_file => "logstash-sa.json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][pubsub_message][messageId]}"
      }
    }
    

Para obtener una lista completa de los elementos de configuración, consulta la documentación sobre complementos.

Inserciones idempotentes

Elasticsearch usa el campo _id de un documento como identificador único. En Logstash, puedes usar los elementos [@metadata] y otros campos de mensaje para crear un ID de documento único según los tipos de mensajes de registro de Logging.

En la documentación de metadatos del complemento google_cloud_storage, se incluye una lista de campos de metadatos de Logstash disponibles. El campo [@metadata][gcs][line_id] se inserta de manera explícita para el caso de uso de creación de los ID de documentos idempotentes.

google_pubsub plugin también tiene una lista de campos de metadatos; por lo general, [@metadata][pubsub_message][messageId] se usa para anular la duplicación.

Usa los registros exportados

Una vez que los registros exportados se hayan transferido a Elasticsearch y Beat en tiempo real se haya implementado como servicio, puedes usar Elasticsearch y los productos de Elastic Stack para realizar las siguientes tareas:

  • Buscar los registros
  • Correlacionar los eventos complejos
  • Crear alertas automáticas
  • Explorar las relaciones en los datos como un grafo
  • Visualizar los resultados mediante los paneles de Kibana

Próximos pasos