- 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 :
- Commencez par créer une base de données nommée
nginxdb:
- 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.
- La directive
access_logsuivante envoie les logs vers/var/log/nginx/my_access.logau format combined. Cette valeur se place dans la sectionhttpde votre fichiernginx.conf:
-
Veillez à redémarrer Nginx si vous avez dû modifier
nginx.conf. - 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.
- 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 :
- 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.
- 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 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 à Notez que la deuxième chaîne retournée est le user agent correctement extrait du log :Avant d’examiner la commande finale La chaîne temporelle commence par Nous sommes maintenant prêts à définir la vue matérialisée.
La définition ci-dessous inclut Vérifiez maintenant que cela a fonctionné.
Vous devriez voir les journaux d’accès correctement parsés en colonnes :
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
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.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 :[ 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 :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 :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.