2016-11-02 1 views
0

Je dispose d'un fichier au format suivant:Logstash filtre kv

10302\t<document>.....</document> 
12303\t<document>.....</document> 
10054\t<document>.....</document> 
10034\t<document>.....</document> 

comme vous pouvez le voir il y a deux valeurs séparées par un onglet ombles. Je dois

  • index le premier jeton (par exemple 10302, 12303 ...) comme ID
  • extrait (et index) des informations à partir du second jeton (le document XML). En d'autres termes, le second jeton sera utilisé avec le filtre XML pour extraire des informations

Est-il possibile de le faire séparant les deux valeurs à l'aide du filtre kv? Idéalement, je devrais terminer, pour chaque ligne, un document comme celui-ci:

id:10302  
msg:<document>....</document> 

Je pourrais utiliser un filtre grok mais je voudrais éviter tout regex que la détection de champ est très facile et peut être accompli avec logique de clé-valeur simple. Cependant, en utilisant une simple détection kv, je me termine par ce qui suit:

"10302": <document>.....</document> 
"12303": <document>.....</document> 
"10054": <document>.....</document> 
"10034": <document>.....</document> 

et ce n'est pas ce dont j'ai besoin.

+0

Pourriez-vous ajouter la configuration de votre filtre kv? – baudsp

+0

Je ne l'ai pas parce que je ne sais pas comment dire "prendre la clé et créer et attribuer un identifiant avec cette clé comme valeur, puis prendre la valeur et créer un message d'attribut avec cette valeur" – Andrea

+1

Ok. Je ne pense pas qu'il soit possible d'utiliser kv pour le travail que vous voulez faire, car il n'y a pas de clé possible pour l'identifiant (10302, 10303, 10304 ...). Mais grok serait parfaitement réalisable avec '% {INT: ID} \ t% {GREEDYDATA: msg}' – baudsp

Répondre

0

Il n'est pas possible d'utiliser kv pour le travail que vous voulez faire, autant que je sache, car il n'y a pas de clé possible pour l'identifiant (10302, 10303, 10304 ...). Il n'y a pas de clé possible car il n'y a rien avant l'identifiant.

Cette configuration grok fonctionnerait, en supposant chaque id + document se trouve sur la même ligne:

grok { 
    match => { "message" => "^%{INT:ID}\t%{GREEDYDATA:msg}"} 
}