Stack ELK : Logstash et Kibana les outils d'Elasticsearch

Les retards à la SNCF

Analyse des données de l'Open Data de la SNCF

La première partie de ce TP portera sur l'analyse des données open data de la sncf portant sur les retards des lignes TGV en France à l'aide de logstash

Question

Rendez-vous dans le dossier logstash/conf/conf.d

1
cd logstash/conf/conf.d

Modifier le fichier 01-input.conf

Ce fichier contiendra la configuration permettant de lire le fichier regularite-mensuelle-tgv-short.csv placé dans le dossier /etc/logstash/files

Indice

Le plugin à utiliser est de la forme suivante :

1
input {
2
   file {
3
     path => ["un/fichier"]
4
   }
5
}
Indice

Il faut aussi ajouter les options suivantes pour s'assurer que logstash lise bien tout le fichier

1
start_position => 'beginning'
2
sincedb_path => "/dev/null"
Solution
1
# /home/api04XX/logstash/conf/conf.d/01-input.conf
2
input {
3
    file{
4
		  path => [ "/etc/logstash/files/regularite-mensuelle-tgv-short.csv" ]
5
    	start_position => 'beginning'
6
    	sincedb_path => "/dev/null"
7
    }
8
}
9

Question

Modifier le fichier 02-filter.conf

Ce fichier contiendra la configuration permettant d'analyser un fichier csv avec les colonnes suivantes :

1
"date","axe","depart","arrivee","trains_programmes","trains_circules","trains_annules","trains_retards","regularite"
Indice
1
filter {
2
    csv {
3
    	columns => ["columns"]
4
	    separator => ";"
5
    }
6
}
Solution
1
# /home/api04XX/logstash/conf/conf.d/02-filter.conf
2
filter {
3
    csv {
4
    	columns => ["date","axe","depart","arrivee","trains_programmes","trains_circules","trains_annules","trains_retards","regularite"]
5
	    separator => ";"
6
    }
7
}

Question

Modifier le fichier 03-output.conf

Ce fichier contiendra la configuration permettant de voir sur la console le résultat de l'analyse de logstash

Indice
1
output {
2
3
}
Solution
1
# /home/api04XX/logstash/conf/conf.d/03-output.conf
2
output {
3
	stdout { codec => rubydebug }
4
}

Question

Lancer logstash et analyser le résultat

1
start logstash
Solution
1
[api04XX@tpapi04 ~]$ start logstash
2
Starting api04XX_api04XX-logstash_1
3
Attaching to api04XX_api04XX-logstash_1
4
api04XX-logstash_1 | {
5
api04XX-logstash_1 |               "message" => [
6
api04XX-logstash_1 |         [0] "2011-09;Atlantique;ANGOULEME;PARIS MONTPARNASSE;358;358;0;23;93.6\r"
7
api04XX-logstash_1 |     ],
8
api04XX-logstash_1 |              "@version" => "1",
9
api04XX-logstash_1 |            "@timestamp" => "2016-01-17T13:26:57.562Z",
10
api04XX-logstash_1 |                  "host" => "api04XX-logstash",
11
api04XX-logstash_1 |                  "path" => "/etc/logstash/files/regularite-mensuelle-tgv-short.csv",
12
api04XX-logstash_1 |                  "date" => "2011-09",
13
api04XX-logstash_1 |                   "axe" => "Atlantique",
14
api04XX-logstash_1 |                "depart" => "ANGOULEME",
15
api04XX-logstash_1 |               "arrivee" => "PARIS MONTPARNASSE",
16
api04XX-logstash_1 |     "trains_programmes" => "358",
17
api04XX-logstash_1 |       "trains_circules" => "358",
18
api04XX-logstash_1 |        "trains_annules" => "0",
19
api04XX-logstash_1 |        "trains_retards" => "23",
20
api04XX-logstash_1 |            "regularite" => "93.6"
21
api04XX-logstash_1 | }

Problématique : On se rend compte que le fichier de la SNCF comporte une date qui n'est pas complète ce qui empêche logstash de l'analyser.

Question

Rajouter un filtre qui permettrait de compléter le champ date avec le premier jour du mois et de le convertir en timestamp afin de pouvoir par la suite l'analyser.

Indice

Le plugin mutate permet de modifier la valeur d'un champ.

On peut récupérer la valeur du champ avec %{champ}

1
mutate {
2
  replace => { "champ" => "valeur" }
3
}
Indice

La conversion en timestamp s'effectue à l'aide du plugin date.

1
date {
2
  match => [ "champ", "YYYY-MM-dd" ] #On sélectionnne le pattern du champ afin d'éviter les erreurs de cast
3
  timezone => "UTC"
4
}
5
Solution
1
# /home/api04XX/logstash/conf/conf.d/02-filter.conf
2
filter {
3
    csv {
4
    	columns => ["date","axe","depart","arrivee","trains_programmes","trains_circules","trains_annules","trains_retards","regularite"]
5
	    separator => ";"
6
    }
7
8
		#Modification du champ date qui est de la forme yyyy-mm vers yyyy-mm-dd
9
		mutate {
10
			replace => { "date" => "%{date}-01" }
11
		}
12
		#cast du champ date que l'on vient de modifier vers un timestamp reconnu par elasticsearch.
13
		date {
14
			match => [ "date", "YYYY-MM-dd" ]
15
			timezone => "UTC"
16
			#Si la conversion a réussi, on supprime le champ date. Par défaut le résultat de la fonction date est envoyé au champ @timestamp
17
			remove_field => ["date"]
18
		}
19
}
1
[api04XX@tpapi04 conf.d]$ start logstash
2
Starting api04XX_api04XX-logstash_1
3
Attaching to api04XX_api04XX-logstash_1
4
api04XX-logstash_1 | {
5
api04XX-logstash_1 |               "message" => [
6
api04XX-logstash_1 |         [0] "2011-09;Atlantique;ANGOULEME;PARIS MONTPARNASSE;358;358;0;23;93.6\r"
7
api04XX-logstash_1 |     ],
8
api04XX-logstash_1 |              "@version" => "1",
9
api04XX-logstash_1 |            "@timestamp" => "2011-09-01T00:00:00.000Z",
10
api04XX-logstash_1 |                  "host" => "api04XX-logstash",
11
api04XX-logstash_1 |                  "path" => "/etc/logstash/files/regularite-mensuelle-tgv-short.csv",
12
api04XX-logstash_1 |                   "axe" => "Atlantique",
13
api04XX-logstash_1 |                "depart" => "ANGOULEME",
14
api04XX-logstash_1 |               "arrivee" => "PARIS MONTPARNASSE",
15
api04XX-logstash_1 |     "trains_programmes" => "358",
16
api04XX-logstash_1 |       "trains_circules" => "358",
17
api04XX-logstash_1 |        "trains_annules" => "0",
18
api04XX-logstash_1 |        "trains_retards" => "23",
19
api04XX-logstash_1 |            "regularite" => "93.6"
20
api04XX-logstash_1 | }

Pour continuer

Livraison des fichiers de configuration pour poursuivre le TP

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Antoine Barbare, 2015 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)