Saltar al contenido principal
Poder analizar los logs en tiempo real es fundamental para las aplicaciones en producción. ClickHouse destaca en el almacenamiento y análisis de logs gracias a su excelente compresión (hasta 170x para logs) y a su capacidad para agregar rápidamente grandes volúmenes de datos. Esta guía te muestra cómo usar el popular pipeline de datos Vector para seguir un archivo de logs de Nginx y enviarlo a ClickHouse. Los pasos siguientes son similares para seguir cualquier tipo de archivo de logs. Requisitos previos:
  • Ya tienes ClickHouse en funcionamiento
  • Tienes Vector instalado
1

Crear una base de datos y una tabla

Defina una tabla para almacenar los eventos de log:
  1. Comience con una nueva base de datos llamada nginxdb:
  1. Inserte todo el evento de log como una sola cadena. Obviamente, este no es un buen formato para realizar análisis sobre los datos de log, pero resolveremos esa parte más abajo usando vistas materializadas.
ORDER BY se establece en tuple() (una tupla vacía), ya que todavía no se necesita una clave primaria.
2

Configurar Nginx

En este paso, se muestra cómo configurar el registro de Nginx.
  1. La siguiente propiedad access_log envía los logs a /var/log/nginx/my_access.log en formato combined. Este valor va en la sección http de su archivo nginx.conf:
  1. Asegúrate de reiniciar Nginx si tuviste que modificar nginx.conf.
  2. Genera algunos eventos en el log de acceso visitando páginas de tu servidor web. Los logs en formato combined se ven así:
3

Configurar Vector

Vector recopila, transforma y enruta logs, métricas y trazas (denominados fuentes) a muchos proveedores distintos (denominados destinos), incluida la compatibilidad nativa con ClickHouse. Las fuentes y los destinos se definen en un archivo de configuración llamado vector.toml.
  1. El siguiente archivo vector.toml define una fuente de tipo file que sigue las nuevas entradas al final de my_access.log, y también define un destino como la tabla access_logs definida anteriormente:
  1. Inicie Vector con la configuración anterior. Consulte la documentación de Vector para obtener más información sobre cómo definir fuentes y destinos.
  2. Verifique que los logs de acceso se estén insertando en ClickHouse ejecutando la siguiente consulta. Debería ver los logs de acceso en la tabla:
4

Procesar los logs

Tener los logs en ClickHouse es muy útil, pero almacenar cada evento como una cadena de texto única no permite realizar un análisis de datos exhaustivo. A continuación, veremos cómo parsear los eventos de log mediante una vista materializada.Una vista materializada funciona de manera similar a un insert trigger en SQL. Cuando se insertan filas de datos en una tabla de origen, la vista materializada aplica alguna transformación a esas filas e inserta los resultados en una tabla de destino. La vista materializada puede configurarse para generar una representación analizada de los eventos de log en access_logs. A continuación se muestra un ejemplo de uno de estos eventos de log:
ClickHouse dispone de diversas funciones para analizar la cadena anterior. La función splitByWhitespace divide una cadena por espacios en blanco y devuelve cada token en un array. Para demostrarlo, ejecute el siguiente comando:
Query
Response
Algunas de las cadenas tienen caracteres adicionales y el user agent (los detalles del navegador) no necesitaba procesarse, pero el array resultante es cercano a lo que se necesita.Al igual que splitByWhitespace, la función splitByRegexp divide una cadena en un array basándose en una expresión regular. Ejecute el siguiente comando, que devuelve dos cadenas.
Observe que la segunda cadena devuelta es el user agent extraído correctamente del registro:
Antes de ver el comando final CREATE MATERIALIZED VIEW, revisemos un par de funciones adicionales que se utilizan para limpiar los datos. Por ejemplo, el valor de RequestMethod es "GET, que contiene una comilla doble no deseada. Puede usar la función trimBoth (alias trim) para eliminar la comilla doble:
La cadena de tiempo comienza con un [ y, además, no tiene un formato que ClickHouse pueda interpretar como fecha. Sin embargo, si cambiamos el separador de dos puntos (:) por una coma (,), el análisis funciona perfectamente:
Ya estamos listos para definir la vista materializada. La definición a continuación incluye POPULATE, lo que significa que las filas existentes en access_logs se procesarán e insertarán de inmediato. Ejecute la siguiente sentencia SQL:
Ahora verifique que funcionó. Debería ver los registros de acceso correctamente parseados en columnas:
La lección anterior almacenó los datos en dos tablas, pero podrías cambiar la tabla inicial nginxdb.access_logs para que use el motor de tabla Null. Los datos analizados seguirán llegando a la tabla nginxdb.access_logs_view, pero los datos sin procesar no se almacenarán en ninguna tabla.
Al usar Vector, que solo requiere una instalación sencilla y una configuración rápida, puedes enviar logs desde un servidor Nginx a una tabla de ClickHouse. Al usar una vista materializada, puedes desglosar esos logs en columnas para facilitar el análisis.
Última modificación el 19 de junio de 2026