Análisis de registros en tiempo real con Fluentd y BigQuery

Los registros fueron y son una herramienta poderosa para proporcionar una mirada sobre cómo funcionan los sistemas a gran escala y las aplicaciones. Sin embargo, como la escala y la complejidad de esos sistemas aumentaron, la administración de varios registros que se encuentran distribuidos en una flota de infraestructura se convirtió en un desafío.

Fluentd, un recolector de registros de código abierto que usan más de 2,000 empresas en todo el mundo, apunta a unificar la recolección de registros entre varias fuentes de datos y sistemas en una capa de registro unificada. Debido a que es difícil saber por adelantado qué datos serán útiles para analizar más tarde, un caso práctico común es registrar todo y revisarlo después. Sin embargo, la recolección y el almacenamiento de todos estos datos puede ser difícil de manejar y puede dificultar y ralentizar la búsqueda de respuestas.

Es aquí donde las fortalezas de BigQuery, el servicio de Google administrado por completo de alta escalabilidad y de consultas paralelas se vuelve muy útil para las estadísticas de registro. A diferencia de un trabajo grande de MapReduce, que puede tardar desde minutos hasta horas, BigQuery puede realizar consultas en terabytes de registros en decenas de segundos, lo que te permite obtener las respuestas que necesitas con rapidez para arreglar o mejorar tus sistemas.

De modo predeterminado, puedes transmitir 10,000 filas de datos de registro por segundo a cada tabla de BigQuery y puedes aumentar el límite a 100,000 filas por segundo por solicitud. Si fragmentas la transmisión de datos en varias tablas de BigQuery y usas un complemento Fluentd-to-BigQuery, puedes cargar registros a BigQuery de forma directa casi en tiempo real desde miles de servidores a casi 1 millón de filas por segundo. Por lo tanto, puedes visualizar estos datos de modo sencillo con la creación de un panel que se actualiza cada minuto o cada hora dentro de una Hoja de cálculo de Google.

Objetivos

  • Ejecutar un servidor web nginx en una instancia de Google Compute Engine.
  • Registrar el tráfico del navegador en ese servidor con Fluentd.
  • Consultar los datos registrados mediante la IU web de BigQuery y con la secuencia de comandos de Google Apps desde una Hoja de cálculo de Google.
  • Visualizar los resultados de las consultas en un gráfico dentro de una Hoja de cálculo de Google que se actualice de forma automática.

Requisitos previos

Clona el código de ejemplo

Para clonar el repositorio de GitHub a tu computadora, ejecuta el siguiente comando:

git clone https://github.com/GoogleCloudPlatform/bigquery-fluentd-docker-sample

Crea un conjunto de datos y una tabla de BigQuery

Crea un conjunto de datos llamado bq_test mediante la ejecución del siguiente comando:

bq mk bq_test

Cambia los directorios al directorio donde clonaste el repositorio de GitHub:

cd bigquery-fluentd-docker-sample

Ejecuta el siguiente comando para crear la tabla access_log de BigQuery con los nombres de los datos y tipos definidos por el archivo del esquema schema.json proporcionado:

bq mk -t bq_test.access_log ./schema.json

Abre la IU web de BigQuery, selecciona el nombre de tu proyecto, haz clic en el conjunto de datos bq_test y selecciona la tabla access_log Confirma que la tabla se creó con el esquema especificado.

Crea una instancia de Google Compute Engine

Ejecuta el siguiente comando para crear una instancia de Google Compute Engine llamada bq-test-instance:

gcloud compute instances create "bq-test-instance" \
  --zone "us-central1-a"  \
  --machine-type "n1-standard-1"  \
  --scopes storage-ro,bigquery \
  --image-family=cos-stable \
  --image-project=cos-cloud

Ejecuta nginx y Fluentd en un contenedor Docker

Accede a la instancia de Compute Engine que acabas de crear:

gcloud compute ssh bq-test-instance --zone=us-central1-a

En la instancia de Compute Engine, ejecuta el siguiente comando y reemplaza <YOUR_PROJECT_ID> con el ID de tu proyecto:

sudo docker run -e GCP_PROJECT="<YOUR_PROJECT_ID>" -p 80:80 -t -i -d google/fluentd-bigquery-sample

Este comando comienza la descarga de la imagen google/fluentd-bigquery-sample de Docker, lo que inicia y ejecuta un contenedor Docker que está preconfigurado con nginx y Fluentd.

A continuación, genera algunas vistas de páginas para verificar que Fluentd envía datos a BigQuery:

  1. En tu lista de instancias de VM, busca bq-test-instance y haz clic en el vínculo en la columna de IP EXTERNA. En el diálogo, selecciona Permitir tráfico HTTP y haz clic en Aplicar para aplicar la regla de firewall. Debes ver un diálogo de actividades que aparece en la parte superior derecha de la ventana con el mensaje “Actualizando etiquetas de la instancia para 'bq-test-instance'”. Ten en cuenta que las etiquetas se usan para asociar las reglas de firewall con instancias.
  2. Una vez que se completa la actualización, haz clic de nuevo en el vínculo de su IP externa para acceder al servidor nginx en la instancia de Compute Engine desde tu navegador. Deberías ver una página web que muestra el mensaje “¡Bienvenido a nginx!” Vuelve a cargar la página varias veces para generar algunas solicitudes del navegador.

Ejecuta consultas con la IU web de BigQuery

Abre la IU web de BigQuery, haz clic en REDACTAR SOLICITUD y ejecuta la siguiente consulta:

 SELECT * FROM [bq_test.access_log] LIMIT 1000

Deberías ver las solicitudes del navegador que recién enviaste al servidor web registrado en la tabla access_log. Ten en cuenta que puede demorar algunos minutos recibir la entrada de registro inicial desde Fluentd.

Listo. Acabas de confirmar que Fluentd recopile los eventos de registro de acceso de nginx, que BigQuery los importe y que sean visibles en la IU web. En la próxima sección, usarás la herramienta de Apache Bench para enviar más tráfico a la página web a modo de ver cómo Fluentd y BigQuery controlan los registros de gran volumen (hasta 10,000 filas/s de modo predeterminado) en tiempo real.

Ejecuta consultas desde Hojas de cálculo de Google

Además de ejecutar consultas en la IU web de BigQuery, puedes también enviar instrucciones de SQL a BigQuery desde una Hoja de cálculo de Google mediante una copia de la hoja de cálculo proporcionada en este instructivo. La hoja de cálculo contiene un Apps Script que ejecuta las consultas de BigQuery, almacena los resultados y los visualiza en un gráfico incorporado. Puedes configurar la secuencia de comandos y los gráficos correspondientes para que se actualicen de forma automática a un intervalo en particular, p. ej., por minuto, hora o día.

Habilita la API de BigQuery en Hojas de cálculo de Google

Para habilitar la ejecución de la instrucción de SQL a BigQuery desde Hojas de cálculo de Google, sigue las instrucciones que se indican debajo:

  1. Abre Ejemplo de integración de BigQuery y la Hoja de cálculo de Google y selecciona Archivo > Hacer una copia…
  2. En tu copia de la hoja de cálculo, selecciona Herramientas > Editor de secuencia de comandos…
  3. En el editor de secuencia de comandos, abre bq_query.gs, que ejecuta las consultas de BigQuery, guarda los resultados de la consulta en una hoja de cálculo y genera gráficos para visualizar los resultados de la consulta.
  4. Reemplazar el texto del marcador de posición <<PUT YOUR SPREADSHEET URL HERE>> con la URL a tu copia de la hoja de cálculo.
  5. Reemplazar el texto del marcador de posición <<PUT YOUR PROJECT ID HERE>> con el ID de tu proyecto. Selecciona Archivo > Guardar.
  6. Desde el menú del editor de secuencia de comandos, selecciona Recursos > Servicios de Google avanzados… Verifica que la API de BigQuery esté encendida.
  7. En la parte inferior del cuadro de diálogo de servicios de Google avanzados, haz clic en el vínculo a Google Cloud Platform Console. Deberías ver un mensaje que te pide que crees un ID de proyecto nuevo que se asociará a la hoja de cálculo.
  8. Explora la lista de las API para la API de BigQuery y activa o desactiva su estado de APAGADO a ENCENDIDO. Ahora deberías ver la API de BigQuery arriba en la lista de las API habilitadas.
  9. Cierra la consola y haz clic en Aceptar en el cuadro de diálogo de los servicios de Google avanzados.

Consulta un conjunto de datos públicos

Ahora, intenta ejecutar una consulta de BigQuery de muestra desde tu hoja de cálculo:

  1. En tu copia de la hoja de cálculo, abre la hoja de consultas de BigQuery, que contiene una consulta de BigQuery llamada "gsod_temperature_LINE". Esta consulta agrega datos de la temperatura anual desde la base de datos del clima de GSOD.

  2. Filas de una hoja de cálculo que definen una consulta
  3. Selecciona Panel > Ejecutar todas las consultas de BigQuery. La primera vez que ejecutas BigQuery, aparece un cuadro de diálogo con el mensaje “Se requiere autorización”. Haz clic en Continuar y Aceptar.
  4. Cuando se termina de ejecutar la consulta, verás una hoja de cálculo nueva con el nombre gsod_temperature. Ábrela y verifica que contenga los resultados de la consulta.
  5. Abre la hoja Visualización de los resultados de BigQuery y verifica que contenga el siguiente gráfico de líneas incorporado sobre los datos de temperatura que mostró la consulta:

  6. Gráfico de líneas de datos globales de temperatura promedio, mínima y máxima.

Consulta los datos de Fluentd

En el paso anterior, ejecutaste una consulta de muestra en un conjunto de datos públicos. En esta sección, consultarás los datos que Fluentd recopila para las solicitudes del navegador por segundo (rps) a tu instancia de Compute Engine.

Abre la hoja consultas de BigQuery. En la siguiente fila vacía, crea una consulta llamada “access_log_LINE” con un intervalo de 1 y el siguiente en la celda de consulta:

SELECT
  STRFTIME_UTC_USEC(time * 1000000, "%Y-%m-%d %H:%M:%S") as tstamp,
  count(*) as rps
FROM bq_test.access_log
GROUP BY tstamp ORDER BY tstamp DESC;

Selecciona Panel > Ejecutar todas las consultas de BigQuery, que almacena los resultados desde la consulta en una hoja de cálculo nueva llamada access_log. Abre access_log a fin de ver los datos de registro consultados y abre la hoja Visualización de resultados de BigQuery para ver el gráfico de líneas correspondientes. (Si no ves el gráfico de líneas, asegúrate de que el nombre de la consulta en la hoja consultas de BigQuery incluya el sufijo “_LINE”). Debido a que tu instancia de Compute Engine aún no tiene muchas visitas de navegador, este gráfico no contiene muchos datos. En la siguiente sección, simularás una carga mayor de tráfico del navegador.

Simula la carga

Abre una terminal local y ejecuta el siguiente comando a fin de simular tráfico para el servidor nginx con la herramienta Apache Bench. Reemplaza <YOUR_EXTERNAL_IP> con la IP externa de tu instancia de Compute Engine.

ab -c 100 -n 1000000 http://<YOUR_EXTERNAL_IP>/

Selecciona Panel > Ejecutar todas las consultas de BigQuery de nuevo. Abre la hoja access_log y verás que los resultados de la consulta ahora incluyen el pico en el tráfico de navegador simulado y que ese pico se muestra en el gráfico de líneas en la hoja visualización de resultados de BigQuery.

Configura la ejecución de consultas automáticas

Para ejecutar estas consultas de forma automática y actualizar el gráfico en intervalos regulares, sigue estos pasos:

  1. Dirígete a Herramientas > Editor de secuencia de comandos y selecciona Recursos > Activadores del proyecto actual. Verás que todavía no se configuró ningún activador.
  2. Haz clic en el vínculo para agregar un activador.
  3. Selecciona “runQueries” en el menú Ejecutar y, para los Eventos, selecciona Basado en el tiempo, Cronómetro por minuto y Cada minuto. Haz clic en Guardar. Esto activa la secuencia de comandos bq_query.gs para que se ejecute una vez por minuto.
  4. Regresa a la hoja visualización de resultados de BigQuery y verás el que el gráfico "access_log" se actualiza a cada minuto.

Gráfico de líneas de solicitudes de navegador por segundo

Acabas de completar los pasos de configuración de una Hoja de cálculo de Google para que ejecute las consultas de BigQuery de forma automática en un conjunto de datos recopilados por Fluentd y visualice los resultados en tiempo real.

Pasos siguientes

Si quieres agregar más consultas a la hoja de cálculo, ten en cuenta estas notas sobre uso:

  • Para obtener más información sobre cómo usar la API de BigQuery en Apps Script, consulta Servicio de BigQuery.
  • Si agregas una consulta nueva a la hoja consultas de BigQuery, agrégala a la siguiente fila vacía. No dejes filas vacías entre las consultas.
  • Cuando la hoja de cálculo ejecuta una consulta con un nombre de consulta nuevo, almacena los resultados de la consulta en una hoja de cálculo nueva con el nombre de la consulta como título.
  • Agrega el sufijo _AREA, _BAR, _COLUMN, _LINE, _SCATTER o _TABLE al nombre de la consulta para crear un gráfico nuevo del tipo especificado a la hoja visualización de resultados de BigQuery.
    • Usa el sufijo _AREA_STACKED, _BAR_STACKED o _COLUMN_STACKED para crear un gráfico apilado.
  • La hoja de cálculo almacena un máximo de 5 filas de resultados para consultas de los tipos BAR y COLUMN y un máximo de 100 filas para todos los otros tipos. Puedes limitar de forma explícita el número de filas para resultados que se muestran si agregas la cláusula LIMIT al final de una consulta, p. ej., LIMIT 20.
  • Para dibujar un gráfico cronológico, configura el primer campo de la consulta en una marca de tiempo o valor de fecha.

Para obtener más información sobre la transmisión de datos a BigQuery, consulta las siguientes referencias:

Limpieza

  1. Inhabilita la herramienta Apache Bench mediante la emisión del comando Ctrl+C en tu terminal local.

  2. Inhabilita la secuencia de comandos bq_query.gs para que no se ejecute de forma automática mediante la selección de Recursos > Activadores del proyecto actual desde el editor de secuencia de comandos. También borra el activador “runQueries”.

  3. Borra el conjunto de datos: en la IU web de BigQuery, desplaza el cursor sobre el conjunto de datos "bq_test" y debajo del nombre de tu proyecto y elige Borrar conjunto de datos desde el menú desplegable.

  4. Borra la instancia de Google Compute Engine:

    gcloud compute instances delete bq-test-instance --zone=us-central1-a
    
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…