2017-09-06 6 views
0

J'ai d'anciens fichiers journaux (un fichier par jour). log-2017.09.01.json log-2017.09.02.json etcElasticsearch/Logstash définissent l'heure ou la date lors de l'importation d'anciens fichiers journaux

Il n'y a pas d'informations de date dans le fichier JSON.

Par défaut, l'horodatage de l'index est la date de création de l'index.

Je tente de créer un index pour chacun de ces fichiers journaux et je souhaite que l'horodatage de l'index correspondant à chaque fichier journal soit le même que celui défini par le nom du fichier. par exemple, je veux un index "log-2017.09.01" pour lequel l'horodateur serait 2017.09.01 et un autre index "log-2017.09.02" pour lequel l'horodateur serait 2017.09.02

Est-ce que quelqu'un sait comment simplement le faire?

+0

Apparemment, lorsque vous utilisez le plugin d'entrée de fichier, un champ 'path' est créé, contenant le chemin d'accès au fichier en cours de lecture, voir cette question: https://stackoverflow.com/questions/22916200/logstash-how-to -add-file-name-as-a-field. Vous devez toujours extraire la date du chemin et faire le reste, cependant. – baudsp

Répondre

0

Il n'y a pas un simple ici, mais cela peut être fait. Cela prend quelques étapes.

La première étape consiste à extraire la date du chemin d'accès au fichier.

filter { 
    grok { 
    match => { "path", "^log-%{DATA:date_partial}$" } 
    } 
} 

La deuxième étape consiste à retirer vos données d'horodatage des lignes de journal. Je suppose que vous savez comment faire cela.

La troisième étape consiste à assembler un champ de date en parties.

filter { 
    mutate { 
    add_field => { "full_timestamp", "%{date_partial} %{date_hour}:%{date_minute}" } 
    } 
} 

La dernière étape consiste à utiliser le filtre date{} sur ce champ construit.

filter { 
    date { 
    match => [ "full_timestamp", "yyyy.MM.dd HH:mm" ] 
    } 
} 

Cela devrait vous donner une idée de la technique nécessaire.