Insérer des données issues d’un fichier CSV dans ELASTICSEARCH

Un cas que j’ai du implémenter avec le même schéma que précédemment:

workflow

Prendre des fichiers CSV en entrée et les insérer facilement dans ELASTICSEARCH au fil de l’eau.  J’ai donc utilisé LOGSTASH pour réaliser cette manipulation.

Cet outil sert à la base comme agrégateur de logs. Il est désormais un mini ETL .

Configuration de LOGSTASH

Explication
Dans le champ input, je spécifie ou est le fichier, ou est l’indicateur de parcours et ou est-ce que je démarre la lecture du fichier

Dans le champ filter , j’ enlève la ligne d’en-tête, puis dans l’élément csv, je spécifie les colonnes et supprime les champs techniques

Enfin, dans l’élément output, j’indique les coordonnées du serveur elasticsearch

Exécution
Il faut d’abord exécuter elasticsearch. Puis démarrer l’instance logstash comme suit :

3 réponses à “Insérer des données issues d’un fichier CSV dans ELASTICSEARCH

  1. Bonjour,

    Tout d’abord merci pour vos posts que je trouve très pédagogues.
    Je tente en à partir de votre exemple de faire la même chose en utilisant Elasticsearch sur le cloud.

    J’ai installé Logstash sur ma machine en local et je tente d’envoyer mes données (en csv) vers un instance elastic sur le cloud en utilisant le fichiers de config suivant :

    ———————————————————————————————————————————————————————————————————–
    input {
    file {
    codec => plain{charset => « UTF-8 »}
    path => [« C:\logstash-5.0.0-alpha3\Data\*.csv »]
    start_position => « beginning »
    }
    }

    filter {
    # suppression des en-tetes
    if [message] =~ /^ »id »; »nom_voie »/ {drop { }}
    csv {
    columns => [« id », »nom_voie », »id_fantoir », »numero », »rep », »code_insee », »code_post », »alias », »nom_ld », »nom_afnor », »libelle_acheminement », »x », »y », »lon », »lat », »nom_commune »]
    separator => « ; »
    source => message
    }
    }

    output {
    elasticsearch {
    embedded => false
    protocol => « http »
    host => « 3bf7202918e3bb554eeb4deb621df609.eu-west-1.aws.found.io:9200 »
    cluster => « Test 1 »
    node_name => « instance-0000000001 »
    index => « ban »
    index_type => « address »
    workers => 1
    document_id => « %{id} »
    }
    }

    ———————————————————————————————————————————————————————————————————–

    Qaund je lance la commande suivante :

    C:\logstash-5.0.0-alpha3\bin>logstash -f C:\logstash-5.0.0-alpha3\config\chargem
    ent.conf

    J’obtiens l’erreur suivante :

    — jar coordinate com.fasterxml.jackson.core:jackson-annotations already loaded
    with version 2.7.1 – omit version 2.7.0
    — jar coordinate com.fasterxml.jackson.core:jackson-databind already loaded wi
    th version 2.7.1 – omit version 2.7.1-1
    ←[31mfetched an invalid config {:config=> »input {\n\tfile {\n\tcodec => plain{ch
    arset => \ »UTF-8\ »}\n path => [\ »C:\\logstash-5.0.0-alpha3\\Data\\*.csv\ »]\n
    start_position => \ »beginning\ »\n\t}\n}\n\nfilter {\n # suppression des en
    -tetes\n if [message] =~ /^\ »id\ »;\ »nom_voie\ »/ {drop { }}\n csv {\n\t\tco
    lumns => [\ »id\ »,\ »nom_voie\ »,\ »id_fantoir\ »,\ »numero\ »,\ »rep\ »,\ »code_insee\ »,\
    « code_post\ »,\ »alias\ »,\ »nom_ld\ »,\ »nom_afnor\ »,\ »libelle_acheminement\ »,\ »x\ »,\
    « y\ »,\ »lon\ »,\ »lat\ »,\ »nom_commune\ »]\n\t\tseparator => \ »;\ »\n\t\tsource => mes
    sage\n\t}\n}\n \noutput {\n elasticsearch {\n\t\tembedded => false\n\t\tprot
    ocol => \ »http\ »\n\t\thost => \ »3bf7202918e3bb554eeb4deb621df609.eu-west-1.aws.f
    ound.io:9200\ »\n\t\tcluster => \ »Test 1\ »\n\t\tnode_name => \ »instance-000000000
    1\ »\n\t\tindex => \ »ban\ »\n\t\tindex_type => \ »address\ »\n\t\tworkers => 1\n\t\t
    document_id => \ »%{id}\ »\n }\n}\n », :reason=> »The setting host in plugin ela
    sticsearch
    is obsolete and is no longer available. Please use the ‘hosts’ setti
    ng instead. You can specify multiple entries separated by comma in ‘host:port’ f
    ormat. If you have any questions about this, you are invited to visit https://di
    scuss.elastic.co/c/logstash and ask. », :level=>:error}←[0m
    The signal HUP is in use by the JVM and will not work correctly on this platform

    Pouvez-vous m’aider à ce sujet ?

    merci par avance !

  2. Bonjour,

    J’ai finalement fait un pas sur ce que je voulais faire.
    Je résume :
    * J’ai modifié mon fichier de config et voici le nouveau fichier :

    —————————————————————————————————————————————————————————
    input {
    file {
    codec => plain{charset => « UTF-8 »}
    path => [« C:\logstash-5.0.0-alpha3\Data\*.csv »]
    start_position => « beginning »
    }
    }

    filter {
    # suppression des en-tetes
    if [message] =~ /^ »id »; »nom_voie »/ {drop { }}
    csv {
    columns => [« id », »nom_voie », »id_fantoir », »numero », »rep », »code_insee », »code_post », »alias », »nom_ld », »nom_afnor », »libelle_acheminement », »x », »y », »lon », »lat », »nom_commune »]
    separator => « ; »
    source => message
    }
    }

    output {
    elasticsearch {
    action => « Index »
    hosts => [« http://3bf7202918e3bb554eb4deb621df609.eu-west-1.aws.found.io:9200/ »]
    user => « HASNA »
    password => « r37ot8ira52h2 »
    index => « ban »
    workers => 1
    document_id => « %{id} »
    }
    }
    —————————————————————————————————————————————————————————

    * J’ai lancé la commande
    C:\logstash-5.0.0-alpha3\bin>logstash -f C:\logstash-5.0.0-alpha3\config\chargement.conf

    et j’obtiens : Pipeline main started

    * Je vais dans Elasticsearch sur le cloud puis sur Kibana et là, j’ai toujours le même blocage : l’indexe « ban » que je renseigne dans kibana n’est pas reconu !!!
    Pouvez-vous m’aider là dessus svp ?
    merci par avance

  3. Salut,
    mon article date un peu et pas de configuration pour LOGSTASH notamment l’output elasticsearch n’est plus valable.

    Il faut que tu supprimes le fichier .sincedb_path, que tu regardes la documentation officielle pour voir la configuration LOGSTASH et que tu retentes le coup.

    Bon courage

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *