- 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:- Comience con una nueva base de datos llamada
nginxdb:
- 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.- La siguiente propiedad
access_logenvía los logs a/var/log/nginx/my_access.logen formato combined. Este valor va en la secciónhttpde su archivonginx.conf:
-
Asegúrate de reiniciar Nginx si tuviste que modificar
nginx.conf. - 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.- 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:
- 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.
- 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:splitByWhitespace divide una cadena por espacios en blanco y devuelve cada token en un array.
Para demostrarlo, ejecute el siguiente comando:Query
Response
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.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:[ 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:POPULATE, lo que significa que las filas existentes en access_logs se procesarán e insertarán de inmediato.
Ejecute la siguiente sentencia SQL: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.