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.
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
- Sigue las instrucciones para configurar un tema de Pub/Sub que recibirá los registros exportados.
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 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:
En Cloud Console, abre la página Temas de Cloud Pub/Sub:
Selecciona el nombre del tema.
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.
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"
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
- Descarga la versión más reciente de Logstash.
- Crea una cuenta de servicio de IAM y una clave de cuenta JSON para
gcsbeat
con las funcionesCloud Storage Admin
yPub/Sub Subscriber
. 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
¿Qué sigue?
- Exporta registros a Elastic Cloud
- Observa los otros casos de exportación:
- Prueba otras funciones de Google Cloud. Consulta nuestros instructivos.