2017-05-23 1 views
1

J'ai un problème avec la définition d'un horodatage à partir d'une analyse JSON.Logstash - Définition d'un horodatage à partir d'un objet analysé JSON

J'ai cette chaîne:

[{"orderNumber":"423523-4325-3212-4235-463a72e76fe8","externalOrderNumber":"reactivate_22d6ff0d8f55eb821be14df9d35505a6","operation":{"name":"CAPTURE","amount":134,"status":"SUCCESS","createdAt":"2015-05-11T09:14:30.969Z","updatedAt":{}}}] 

Je parse comme un JSON en utilisant ce filtre Logstash:

grok { 
     match => { "message" => "\[%{GREEDYDATA:firstjson}\]%{SPACE} \[%{GREEDYDATA:secondjson}\}]}]"} 
     } 
     json{ 
      source => "firstjson" 
     } 
     date { 
      match => [ "operation.createdAt", "ISO8601"] 
     } 
     mutate { 
      remove_field => [ "firstjson", "secondjson" ] 
     } 
    } 

Cela crée un document à l'intérieur du ElasticSearch. J'ai un champ nommé operation.createdAt qui est correctement reconnu comme un champ de date. Mais pour quelque raison, cette ligne:

date { 
     match => [ "operation.createdAt", "ISO8601"] 
     } 

ne définit pas le champ @timestamp. Le champ @timestamp actuel est défini au moment de l'insertion du document. Qu'est-ce que je fais mal?

Répondre

0

Merci à des gens sympathiques au ES Logstash Community, j'ai trouvé la réponse.

Au lieu de:

date { 
match => [ "operation.createdAt", "ISO8601"] 
} 

J'utilise ceci:

date { 
    match => [ "[operation][createdAt]", "ISO8601"] 
} 

et que les extraits correctement et parse l'objet de temps JSON.