RousselTMLEARNING

TP · Logstash : de la découverte à l'expertise

Mon second pipeline avec correction

La correction est intégrée au TP (Voir les encadrés de couleur vert)

Les prérequis #

Vous devez avoir fait le TP 'Mon premier pipeline'

Configuration des entrées #

Vous devez créer un fichier dans /etc/logstash/conf.d nommé "0-input-file-advanced.conf".

  1. Lecture d'un fichier

    Dans ce fichier, vous devez ajouter la configuration logstash pour lire le contenu de tous les fichiers de log commençant par : "/var/log/rousseltm/advanced-".

    Vous devez ajouter un type pour ce fichier avec comme valeur 'advanced'.
    Voir la correction
    Cet exemeple de configuration va vous permettre de lire ce fichier :
    root@logstash-formation:/#cat /etc/logstash/conf.d/0-input-file-advanced.conf
    input {
    	file {
    		path => "/var/log/rousseltm/advanced-*.log"
    		"type" => "advanced"
    		codec => multiline {
    			pattern => "^\[%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}\] "
    			negate => true
    			what => "previous"
    		}
    	}
    }
    
    Si vous regardez bien le fichier, vous verrez que de la ligne 1 à la ligne 8 il s'agit de la même ligne de logs. Il faut donc signaler à Logstash qu'il s'agit de la même ligne. On utilise donc un codec de type multiline pour signaler comment identifier chaque début de ligne. Le paramètre 'pattern' supporte le grok.

Configuration des filtres #

Vous devez créer un second fichier nommé "101-filter-advances.conf".

  1. 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 ces fichiers sont constitués de plusieurs formats de logs.

    Voir la correction
    On va utiliser un filtre grok comme il y a plusieurs formats de logs dans le même fichier. On fournira donc plusieurs patternes pour la configuration grok.

    De plus, on va ajouter une condition 'if' pour que ce nouveau filtre ne traîte que les données de type 'advance'. Il faudra donc revoir votre filtre simple pour faire de même.
  2. 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.

    Voir la correction
    On ajoute un filtre mutate avec l'option convert pour convertir le champ en entier :
    root@logstash-formation:/# cat /etc/logstash/conf.d/101-filter-advanced.conf
    ...
    	mutate {
    		convert => {"http_code" => "integer" }
    	}
    ...
  3. Suppression d'un champ

    On va supprimer le champ message comme on a déjà extrait les informations qui nous intéressent.

    Voir la correction
    On ajoute un bloc remove_field et cela nous donne au global :
    root@logstash-formation:/# cat /etc/logstash/conf.d/101-filter-advanced.conf
    filter {
    	if [type] == "advanced" {
    		grok {
    			match => {
    				"message" => [
    					"\[(?%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR})\] %{DATA} \[%{NUMBER:http_code}\]: %{WORD:http_verb} %{URIPATHPARAM:http_request}%{GREEDYDATA:others}",
    					"\[(?%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR})\] %{DATA} %{WORD:status}"
    				]
    			}
    			remove_field => ["message"]
    		}
    		mutate {
    			convert => { "http_code" => "integer" }
    		}
    
    	}
    
    }

Configuration des sorties #

Vous devez modifier le fichier "200-output-file-nginx-access".

  1. Ecriture dans un fichier

    Dans ce fichier, vous devez mettre à jour la configuration logstash pour qu'il écrive les logs dans le fichier qui correspond à son 'type'

    Voir la correction
    Cette configuration va vous permettre d'écrire dans le fichier de manière dynamique en fonction du type de log :
    root@logstash-formation:/# cat 200-output-file
    output {
    	file {
    		path => "/var/log/rousseltm/parsed/%{[type]}.json"
    	}
    }

Niveau de difficulté : ●●●○○ (3/5)

Mon suivi

  • ⏱ Durée estimée : ≈ 35 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

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

Comprendre la notion de score

Le concept de score va permettre à Elasticsearch de classer vos documents par pertinence lors d u...

Comprendre Elastic Common Schema(ECS)

Comme toujours dans nos missions de conseil, nous recommandons aux entreprises d'uniformiser, de ...

Grail : Dynatrace Data Lakehouse

Désormais vous disposez dans Dynatrace (SaaS) d'un Data Lakehouse nommé Grail dont vous pouvez co...

C'est quoi l'observabilité

La capacité à connaître l'état interne d'un système à partir des données que cette dernière émet...

Les types de transactions dans les base de données

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Différences entre Technologies et Services dans Dynatrace

Dans Dynatrace, les concepts de 'Technologie' et de 'Services' aident à organiser et surveiller l...

Dynatrace : Différences entre SQL Modifications, SQL Queries or Procedures, et SQL Transactions

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Types de consommation de licence

Comprendre l'évolution de la facturation dans Dynatrace : la différence entre l'ancien modèle de ...

Les Types de Services Dynatrace : Comprendre et Optimiser Votre Surveillance Applicative

Découvrez les différents types de services que Dynatrace peut surveiller, leur rôle, et comment l...