2016-10-15 3 views
0

Ich versuche Protokolle elasticSearch zu schieben fileBeat mit (No Logstash)Merge-Protokolle zwischen Datum/Uhrzeit mit filebeat

Ich möchte folgende log in einzelne Nachricht senden, aber er in mehrere Nachrichten kaputtgehen, jede Zeile wird separate Nachricht

20161014 17:49:09.169 [ERROR] [Thread-2974] some.java.class.:70 - some.java.Exception: write failed. History: [requestHost=123-some.org.com, time=Fri Oct 14 17:49:05 GMT-07:00 2016, exception=java.net.SocketTimeoutException] 
[requestHost=123-some.org.com, time=Fri Oct 14 17:49:07 GMT-07:00 2016, exception=java.net.SocketTimeoutException] 
[requestHost=123-some.org.com, time=Fri Oct 14 17:49:09 GMT-07:00 2016, exception=java.net.SocketTimeoutException] 
Tried 3 times 
     at java.lang.Thread.run(Thread.java:745) 
20161014 17:49:09.169 [ERROR] [Thread-3022] 

ich möchte alle Zeilen zwischen zwei Terminen (1. und letzte Zeile)

Hier ist mein filebeat.yml Schnipsel

fusionieren
paths: 
     - /test.log 
     multiline.pattern: '^\[0-9]{8}' 
     multiline.negate: true 
     multiline.match: after 

Ich muß richtig wissen regex

Ich versuche, dieses Problem zu lösen, ohne logstash

+0

Durch die offene Klammer zu entkommen, Sie entfernen seine Macht und die Anpassung an die wörtliche Halterung. –

+0

Ich habe versucht, einige Regex auf Spielplatz gehen (aus Dateibeat Dokumentation) sie sind Arbeit, aber in der Praxis alle von mir geben mir das gleiche Problem, ich bin kein Regex Ninja noch sieht aus wie ich brauche etwas Zeit verbringen und dies oder einfach Logstash verwenden mit GROK-Filter –

Antwort

2

Unter Verwendung der folgenden Filebeat Konfiguration mit mit der mitgelieferten Protokoll Probe zwei Ereignisse erzeugt, wobei jede Nachricht mit dem Datum beginnt.

Ich lief ./filebeat -c filebeat.yml -e -v -d "*" mit der Config unten zu testen. Ich habe auch das Muster auf der Go playground getestet.

filebeat.yml:

filebeat: 
    prospectors: 
    - paths: ["input.txt"] 
     multiline: 
     pattern: '^[0-9]{8}' 
     negate: true 
     match: after 
output: 
    console: 
    pretty: false 

Ausgang:

{ 
    "@timestamp": "2016-10-17T14:13:31.292Z", 
    "beat": { 
    "hostname": "host.example.com", 
    "name": "host.example.com", 
    }, 
    "input_type": "log", 
    "message": "20161014 17:49:09.169 [ERROR] [Thread-2974] some.java.class.:70 - some.java.Exception: write failed. History: [requestHost=123-some.org.com, time=Fri Oct 14 17:49:05 GMT-07:00 2016, exception=java.net.SocketTimeoutException]\n[requestHost=123-some.org.com, time=Fri Oct 14 17:49:07 GMT-07:00 2016, exception=java.net.SocketTimeoutException]\n[requestHost=123-some.org.com, time=Fri Oct 14 17:49:09 GMT-07:00 2016, exception=java.net.SocketTimeoutException]\n Tried 3 times\n  at java.lang.Thread.run(Thread.java:745)", 
    "offset": 519, 
    "source": "input.txt", 
    "type": "log" 
} 
{ 
    "@timestamp": "2016-10-17T14:17:21.686Z", 
    "beat": { 
    "hostname": "host.example.com", 
    "name": "host.example.com", 
    }, 
    "input_type": "log", 
    "message": "20161014 17:49:09.169 [ERROR] [Thread-3022]", 
    "offset": 563, 
    "source": "input.txt", 
    "type": "log" 
} 
+0

Ich sehe nicht "\ n" und Nachrichten sind immer noch in Stücke gebrochen, das sind log4j Protokolle denkst du, es macht einen Unterschied? –

+0

Welche Version von Filebeat laufen Sie? Welches OS? Ich habe dies auf dem 5.0-rc1 auf OS X versucht und es hat gut funktioniert. Ich denke nicht, dass die Tatsache, dass sie log4j Logs sind, einen Unterschied macht. –

+0

Ich benutze 'fileBeat Version 1.3.1 (amd64)' auf Ubuntu 14.04.03. Wenn ich eine Regex finden/schreiben kann, die '^ [0-9] {8}' startet und beim nächsten Vorkommen desselben '^ [0-9] {8} endet, glaubst du, dass das mein Problem lösen kann? –

Verwandte Themen