2017-05-12 1 views
1

J'ai un fichier qui lit plusieurs formats différents de journaux.Filebeat - Configuration d'une configuration multiligne

Un format qui fonctionne très bien est un seul support, qui est envoyé à Logstash en tant qu'événement unique. Maintenant, j'ai un autre format qui est un multiliner. Je veux le lire comme un seul événement et l'envoyer à Logstash pour analyse. Voici l'exemple de format de journal avec deux événements.

error: I READ THIS. sent payload: [{"key": "values"}] 
custom status response: [{"key1": "values"}] 
callback headers: [{"key2": "values"}] 
error stack: [ something really bad happened 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x)] 

error: I AM NOT READING THIS. sent payload: [{"key": "values"}] 
custom status response: [{"key1": "values"}] 
callback headers: [{"key2": "values"}] 
error stack: [ something really bad happened 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x) 
    at here loremisptul (/xx/xx/x)] 

Et voici la configuration prospecteur:

- input_type: log 
    paths: /Users/xxxxx/Downloads/elk/anotherlog/app.stderr.log 
    document_type: logsystemtwo 
    multiline.pattern: '`^=[A-Z]+|^$`' 
    multiline.negate: true 
    multiline.match: after 
- input_type: log 
    paths: /Users/xxxxx/Downloads/elk/mylogs/access.log* 
    document_type: logsystemone 

La question est la première multiligne. Il lit le premier événement (je le lis), mais ignore le reste (je ne lis pas cela).

J'ai essayé beaucoup de différents configurations, mais je ne peux tout simplement pas l'obtenir pour lire d'autres événements. Il envoie toujours uniquement le premier événement et ignore le reste.

Je sais que je pourrais faire la multiline à l'intérieur de Logstash, mais selon le documentation qui devrait être évité. En outre, dans mon cas, j'éviter de le faire en Logstash, comme je l'ai déjà des structures très complexes, il

Répondre

1

J'ai trouvé un modèle qui fonctionne dans mon cas:

- input_type: log 
    paths: /Users/xxxxx/Downloads/elk/logs/app.stderr.log 
    document_type: error 
    multiline.pattern: '^error: ' 
    multiline.negate: true 
    multiline.match: after 

voudrais mentionner il y a un playground pour le fichier, ce qui peut aider à prototyper les modèles.