Ce que vous allez apprendre dans ce TP
- Installer Logstash
- Construire un pipeline
- utiliser l'input file
- Combiner différents filtres
- utiliser le l'output file
- utiliser les conditions
- utiliser les variables
Introduction #
Ce que vous allez apprendre dans cette section
- Installer Logstash
- Construire un pipeline
- utiliser l'input file
- Combiner différents filtres
- utiliser le l'output file
- utiliser les conditions
- utiliser les variables
Ce TP a pour objectif de vous apprendre à construire un pipeline simple qui va permettre de lire un fichier de log, de le traiter et d'écrire dans un nouveau fichier sa sortie
Les prérequis #
Vous devez disposer d'une machine Linux avec Logstash installé. Si vous ne disposez pas d'une machine ou d'un environnement de test, nous vous invitons à faire le TP sur l'installation de Logstash. Pour ceux qui font le TP sur l'environnement de test, vous pouvez demander à Vagrant d'installer Logstash :export DEPLOY_LOGSTASH=true; vagrant upConfiguration des entrées #
Vous devez créer un fichier dans /etc/logstash/conf.d nommé "0-input-file-nginx-access.conf".ATTENTION : Dans le cadre de ce TP, nous vous avons précisé le nom du fichier de configuration(0-input-file-nginx-access.conf) mais en entreprise, vous devrez construire votre propre norme de nommage qui s'adapte à votre contexte.
Lecture d'un fichier
Dans ce fichier, vous devez ajouter la configuration logstash pour lire le contenu du fichier "/var/log/rousseltm/nginx-access.log". Si vous utilisez notre environnement de test Vagrant, les fichiers de logs seront déjà présents sur la VM dans le dossier /var/log/rousseltm. Dans le cas contraire, vous devrez les copier manuellement :
Configuration des filtres #
Vous devez créer un second fichier nommé "100-filter-nginx-access.conf".
Extraction de données
Vous devez identifier le filtre le plus adapté pour un fichier plat et mettre la configuration qui va permettre d'extraire les champs du fichier de logs précédemment lu sachant que ce fichier à un seul format de log
Modification de type
On souhaite transformer en entier le champ "http_code". En effet, il y a souvent des opérations arithmétiques sur ce champ quand on fait des restitutions (tableau de bord, alertes...). Par exemple afficher tous les codes entre 200 et 205.
Adaptation date
Comme vous l'avez constaté dans le fichier de log fourni, les logs ne sont pas classés. Si vous n'adaptez pas le champs '@timestamp', vous aurez des logs classés par apparition dans le fichier au lieu d'un classement par date de génération de la ligne de log.
Suppression d'un champ
On souhaite supprimer les champs- event.original
- message : comme on a déjà extrait les informations qui nous intéressent
ATTENTION : Il s'agit d'une bonne pratique pour gagner en espace de stockage et en performance.
Dans d'autres TP, on verra qu'il faudra supprimer 'message' uniquement dans les cas où on n'a pas d'erreurs de filtres.
Configuration des sorties #
Vous devez créer un fichier dans /etc/logstash/conf.d nommé "200-output-file-nginx-access.conf".
Ecriture dans un fichier
Dans ce fichier, vous devrez ajouter la configuration logstash pour qu'il écrive notre log traitée dans le fichier "/var/log/rousseltm/parsed/TYPE.json"
Niveau de difficulté : ●●○○○ (2/5)
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Glossaire de la formation
Observabilité
La capacité à connaître l'état interne d'un système à partir des données qu'il émet.Ces données sont classées en 3 piliers : logsmétriquestracesprofil...
Elastic Common Schema (ECS)
Une spécification open source qui permet de structurer vos données de manière homogène dans l'écosystème Elastic.
Logstash
Moteur de collecte de données permettant de traiter, d'enrichir et de transformer les logs et autres événements avant de les indexer.
Access Log
Fichier de journalisation enregistrant les requêtes traitées par un serveur web (Apache, Nginx, Lighttpd, etc.). Il permet de tracer l'activité du ser...
Client IP
L'adresse IP de l'utilisateur effectuant la requête vers le serveur web. Lorsqu'un utilisateur passe par un Load Balancer ou un proxy (ex: Cloudflare)...
Timestamp
La date et l'heure exactes auxquelles la requête a été reçue par le serveur.Configuration : %t dans Apache, $time_local ou $time_iso8601 dans Nginx.
Request
La ligne de requête initiale du client. Elle comprend généralement la méthode HTTP (ex: GET), l'URL demandée et la version du protocole HTTP.Configura...
Status Code
Le code de statut HTTP final renvoyé par le serveur au client (ex : 200 pour un succès, 404 pour ressource non trouvée).Configuration : %>s dans Apach...
Size
Le volume des données renvoyées au client, mesuré en octets (généralement sans les en-têtes HTTP).Configuration : %b ou %O dans Apache, $body_bytes_se...
Referrer
L'URL de la page web depuis laquelle le client a cliqué ou suivi un lien pour accéder à la ressource actuelle.Configuration : %{Referer}i dans Apache,...
User-Agent
Les informations d'identification fournies par le client concernant son navigateur, son système d'exploitation et son appareil. Sa structure standard ...
Response Time
La durée totale prise par le serveur pour traiter la requête et renvoyer la réponse au client.Configuration : %D (microsecondes) ou %T (secondes) dans...
Articles recommandés
Beats : aller plus loin (sécurité, performances, Elastic Agent et migration vers Alloy)
Industrialiser Filebeat, Metricbeat et les autres Beats : sorties sécurisées, processors, modules...
Bonnes pratiques Logstash : pipelines, performances, fiabilité et supervision
Bonnes pratiques Logstash : pipelines multiples, dissect plutôt que grok, conditionnels, persiste...
Fluent Bit : les inputs (entrées) du pipeline en détail
Tout sur les inputs de Fluent Bit : rôle des tags, lecture de fichiers avec tail (positions, rota...
Fluent Bit : pipeline, configuration et plugins essentiels
Les concepts de Fluent Bit (inputs, parsers, filters, tags et match, buffer, outputs), la configu...
Fluent Bit : parsers et filters, structurer et transformer les logs
Structurer et transformer les logs dans Fluent Bit : parsers (json, regex, logfmt, ltsv), parsers...
Fluent Bit : les outputs (sorties), routage et fiabilité de l'envoi
Envoyer les données de Fluent Bit : routage par Match et Match_Regex, sorties Loki, Elasticsearch...
Ingestion Elasticsearch : Bulk API, ingest pipelines, enrich et reindex
Ingérer et transformer des données dans Elasticsearch : Bulk API, ingest pipelines et processeurs...
Query DSL et agrégations avancées Elasticsearch, avec ES|QL
Écrire des requêtes Elasticsearch avancées : bool, filter et score, nested, function_score et per...
Alimenter OpenSearch : pipelines d'ingestion et Data Prepper
Transformer les données avec les pipelines d'ingestion, collecter avec Data Prepper, recevoir l'O...