0

J'utilise 'filebeat' comme expéditeur et le client l'envoie en redis, lit depuis redis avec logstash et l'envoie en ES.Filtre logstash - half json line parse

Je suis en train d'analyser la ligne d'exemple suivant:

09:24:01.969 watchdog - INFO - 100.140.2 PASSED: Mobile:Mobile[].popover["mc1814"].select(2,) :706<<<<<<<<<<<<<<<<<<< {"actionDuration":613}

En fin de compte je veux avoir un nom sur le terrain: « ActionDuration » avec la valeur: 613.

Comme vous pouvez le voir c'est partiellement JSON. - J'ai essayé d'utiliser le filtre grok, avec add_field et match et j'ai essayé de changer quelques configurations dans le fichier et le logstash.

J'utilise les configurations de base: filebeat.conf:

filebeat.prospectors:

  • input_type: log

    paths:

    • /sketch/workspace/sanity-dev-kennel/out/*.log

    fields:

    • type: watchdog
    • BUILD_ID: 82161

S'il y a une possibilité de le faire dans le côté filebeat je préfère, mais il est aussi bon du côté Logstash.

Merci beaucoup, Moshe

Répondre

0

Ce type de formatage partiel est mieux gérées du côté Logstash, pas l'expéditeur. Les filtres/transformations disponibles dans FileBeat ne sont pas à la hauteur. Un pipeline de filtrage Logstash est, cependant.

filter { 
    grok { 
    match => { 
     "message" => [ "(?<plain_prefix>^.*?) (?<json_segment>{.*$)"] 
    } 
    } 
    json { 
    source => "json_segment" 
    } 
    mutate { 
    remove_field => [ "json_segment" ] 
    } 
} 

Cet exemple basique divisera votre message entrant en deux champs. un plain_prefix et un json_segment. Le filtre json{} est ensuite utilisé pour analyser les données JSON dans l'événement. Enfin, un filtre mutate {} est utilisé pour supprimer le champ json_segment de l'événement, car il a déjà été analysé et inclus.

Remarque: le .*? dans le plain_prefix est critique dans ce filtre. Construit de cette façon, tout le premier { est considéré comme faisant partie du segment JSON. Si vous utilisez .*, le segment JSON sera tout du dernier{, ce qui sera un problème avec les structures de données complexes JSON.

+0

Merci pour la réponse rapide, Je reçois l'erreur suivante: "json_error": "décodage d'erreur JSON: JSON: ne peut pas le numéro unmarshal en valeur Go de carte de type d'interface [chaîne] {}", –

+0

Il doesn ne fonctionne pas pour moi, j'utilise la version de la pile ELK 5.1.1, BTW il y a quelques journaux sans le json à la fin. –

+0

avoir une idée pour le résoudre? –