2017-06-14 1 views
1

Je suis en train d'importer csv en ElasticSearch utilisant logstash J'ai essayé d'utiliser deux façons:ElasticSearch - csv à l'importation par date de logstash n'est pas analysé de type datetime

  1. Utilisation CSV
  2. Utilisation filtre grok

1) Pour csv ci-dessous est mon fichier logstash:

input { 
    file { 
    path => "path_to_my_csv.csv" 
    start_position => "beginning" 
    sincedb_path => "/dev/null" 
    } 
} 
filter { 
    csv { 
     separator => "," 
     columns => ["col1","col2_datetime"] 
    } 
    mutate {convert => [ "col1", "float" ]} 
    date { 
     locale => "en" 
     match => ["col2_datetime", "ISO8601"] // tried this one also - match => ["col2_datetime", "yyyy-MM-dd HH:mm:ss"] 
     timezone => "Asia/Kolkata" 
     target => "@timestamp" // tried this one also - target => "col2_datetime" 
    } 
} 
output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "my_collection" 

    } 
    stdout {} 
} 

2) Utilisation de filtre grok:

Pour filtre grok ci-dessous est mon fichier logstash

input { 
    file { 
    path => "path_to_my_csv.csv" 
    start_position => "beginning" 
    sincedb_path => "/dev/null" 
    } 
} 
filter { 
    grok { 
    match => { "message" => "(?<col1>(?:%{BASE10NUM})),(%{TIMESTAMP_ISO8601:col2_datetime})"} 
    remove_field => [ "message" ] 
    } 
    date { 
     match => ["col2_datetime", "yyyy-MM-dd HH:mm:ss"] 
    } 
} 
output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "my_collection_grok" 

    } 
    stdout {} 
} 

PROBLÈME:

Alors, quand je lance deux fichiers individuellement, je suis en mesure importer les données dans elasticsearch. Mais mon champ de date n'est pas analysé en tant que type date/heure, mais il a été sauvegardé en tant que chaîne et à cause de cela je ne suis pas capable d'exécuter les filtres de date.

Quelqu'un peut-il m'aider à comprendre pourquoi cela se produit? Ma version elasticsearch est 5.4.1.

Merci à l'avance

+0

Pouvez-vous partager af EW lignes de votre fichier CSV? – shantanuo

+0

S'il vous plaît vérifier 1234365,2016-12-02 19:00:52 1234368,2016-12-02 15:02:02 1234369,2016-12-02 15:02:07 – pravindot17

Répondre

0

Il y a 2 changements que j'ai fait à votre fichier de configuration.

1) retirer le under_score au nom de la colonne col2_datetime

2) Ajouter une cible

Voici comment mon look fichier de configuration comme ...

vi logstash.conf 

input { 
    file { 
    path => "/config-dir/path_to_my_csv.csv" 
    start_position => "beginning" 
    sincedb_path => "/dev/null" 
    } 
} 
filter { 
    csv { 
     separator => "," 
     columns => ["col1","col2"] 
    } 
    mutate {convert => [ "col1", "float" ]} 
    date { 
     locale => "en" 
     match => ["col2", "yyyy-MM-dd HH:mm:ss"] 
     target => "col2" 
    } 
} 
output { 
    elasticsearch { 
    hosts => "http://172.17.0.1:9200" 
    index => "my_collection" 

    } 
    stdout {} 
} 

Voici la fichier de données:

vi path_to_my_csv.csv 

1234365,2016-12-02 19:00:52 
1234368,2016-12-02 15:02:02 
1234369,2016-12-02 15:02:07 
+0

il est toujours inséré string – pravindot17

+0

Version de logstash? Je l'ai testé avec la version 5.4. – shantanuo

+0

le mien est aussi le même – pravindot17