Skip to main content
Pouvoir analyser vos logs en temps réel est essentiel pour les applications en production. ClickHouse excelle dans le stockage et l’analyse des logs grâce à son excellente compression (jusqu’à 170x pour les logs) et à sa capacité à agréger rapidement de grandes quantités de données. Ce guide vous montre comment utiliser le pipeline de données populaire Vector pour lire en continu un fichier de log Nginx et l’envoyer vers ClickHouse. Les étapes ci-dessous sont similaires pour la lecture en continu de tout type de fichier de log. Prérequis :
  • Vous avez déjà ClickHouse opérationnel
  • Vous avez installé Vector
1

Créer une base de données et une table

Définissez une table pour stocker les événements de logs :
  1. Commencez par créer une base de données nommée nginxdb :
  1. Insérez l’intégralité de l’événement de log sous la forme d’une seule chaîne. Ce n’est évidemment pas un format idéal pour effectuer des analyses sur les données de log, mais nous verrons ci-dessous comment y remédier à l’aide de vues matérialisées.
ORDER BY est défini comme tuple() (un tuple vide), car il n’est pas encore nécessaire d’utiliser une clé primaire.
2

Configurer Nginx

Dans cette étape, vous allez voir comment configurer la journalisation de Nginx.
  1. La directive access_log suivante envoie les logs vers /var/log/nginx/my_access.log au format combined. Cette valeur se place dans la section http de votre fichier nginx.conf :
  1. Veillez à redémarrer Nginx si vous avez dû modifier nginx.conf.
  2. Générez quelques événements dans le log d’accès en visitant des pages sur votre serveur web. Les logs au format combined se présentent comme suit :
3

Configurer Vector

Vector collecte, transforme et achemine les logs, les métriques et les traces (appelés sources) vers de nombreux fournisseurs différents (appelés sinks), avec une compatibilité native avec ClickHouse. Les sources et les sinks sont définis dans un fichier de configuration nommé vector.toml.
  1. Le fichier vector.toml suivant définit une source de type file qui lit en continu la fin de my_access.log, et définit également un sink correspondant à la table access_logs définie ci-dessus :
  1. Démarrez Vector à l’aide de la configuration ci-dessus. Consultez la documentation de Vector pour plus de détails sur la définition des sources et des destinations.
  2. Vérifiez que les logs d’accès sont bien insérés dans ClickHouse en exécutant la requête suivante. Vous devriez voir les logs d’accès dans votre table :
4

Analyser les journaux

Avoir les logs dans ClickHouse est une bonne chose, mais stocker chaque événement sous forme d’une chaîne unique ne permet pas une analyse approfondie des données. Nous allons maintenant voir comment parser les événements de log à l’aide d’une vue matérialisée.Une vue matérialisée fonctionne de manière similaire à un déclencheur d’insertion en SQL. Lorsque des lignes de données sont insérées dans une table source, la vue matérialisée effectue une transformation de ces lignes et insère les résultats dans une table cible. La vue matérialisée peut être configurée pour produire une représentation parsée des événements de logs dans access_logs. Un exemple d’un tel événement de log est présenté ci-dessous :
ClickHouse propose diverses fonctions pour analyser la chaîne ci-dessus. La fonction splitByWhitespace analyse une chaîne en la découpant par espaces blancs et renvoie chaque token dans un tableau. Pour illustrer, exécutez la commande suivante :
Query
Response
Quelques-unes des chaînes contiennent des caractères supplémentaires, et le user agent (les détails du navigateur) n’avait pas besoin d’être parsé, mais le tableau résultant est proche de ce dont nous avons besoin.Semblable à splitByWhitespace, la fonction splitByRegexp divise une chaîne en tableau à partir d’une expression régulière. Exécutez la commande suivante, qui renvoie deux chaînes.
Notez que la deuxième chaîne retournée est le user agent correctement extrait du log :
Avant d’examiner la commande finale CREATE MATERIALIZED VIEW, voyons quelques fonctions supplémentaires utilisées pour nettoyer les données. Par exemple, la valeur de RequestMethod est "GET, qui contient un guillemet double indésirable. Vous pouvez utiliser la fonction trimBoth (alias trim) pour supprimer ce guillemet double :
La chaîne temporelle commence par [ et n’est pas non plus dans un format que ClickHouse peut analyser en date. Cependant, si nous remplaçons le séparateur deux-points (:) par une virgule (,), l’analyse fonctionne parfaitement :
Nous sommes maintenant prêts à définir la vue matérialisée. La définition ci-dessous inclut POPULATE, ce qui signifie que les lignes existantes dans access_logs seront traitées et insérées immédiatement. Exécutez l’instruction SQL suivante :
Vérifiez maintenant que cela a fonctionné. Vous devriez voir les journaux d’accès correctement parsés en colonnes :
La leçon ci-dessus a stocké les données dans deux tables, mais vous pouvez modifier la table initiale nginxdb.access_logs pour utiliser le moteur de table Null. Les données parsées aboutiront toujours dans la table nginxdb.access_logs_view, mais les données brutes ne seront pas stockées dans une table.
En utilisant Vector, qui ne nécessite qu’une installation simple et une configuration rapide, vous pouvez envoyer les logs d’un serveur Nginx vers une Table dans ClickHouse. En utilisant une vue matérialisée, vous pouvez parser ces logs en colonnes pour en faciliter l’analyse.
Dernière modification le 24 juillet 2026