Logstash Grok pattern mit mehreren Treffern

Ich bin versucht zu schreiben grok Ausdruck, dass in mehreren matches. Ich bin parsing einer Zeile, die 5 Wiederholungen der gleichen Muster.

Habe ich in der Lage, um ein einfaches Muster mit einer regex, die zurückkehren wird mehrere Treffer, aber es scheint, dass Grok funktioniert das nicht so. Ich weiß wirklich nicht verstehen, Ruby so habe ich nicht wirklich überprüft den code.

Beispiel Eingabe:

222444555

Muster:

(?<number>\d{3})*

Hätte ich erwartet, daß eine Ausgabe wie diese:

"number" : [
    [
        "222", "444", "555"
    ]
]

oder so ähnlich. Ist das möglich in der Grok? Ich weiß, ich könnte nur wiederholen das Muster drei mal, aber auf einigen Linien gibt es eine unbekannte Anzahl von Wiederholungen.

Irgendwelche Hinweise?

  • Wenn es eine unbekannte Anzahl von Wiederholungen, wie würden Sie „{3}“ ?
  • die {3} ist eine Wiederholung auf dem \d (digit) Charakter-Klasse. Also, was ich versuche zu finden (das ist nur eine vereinfachte Darstellung) werden die Wiederholungen von 3 Ziffern. So ist mit dem Eingang 333444555 ich bin auf der Suche nach 3 sets Ziffern, drei Ziffern.
  • Oops, mein schlechtes. Vielen Dank für die Klarstellung.
  • vielleicht könnte man umwandeln in eine Zahl als ruby zu teilen die Ziffern
InformationsquelleAutor Gavin | 2016-12-29



One Reply
  1. 0

    Ich nahm einen anderen Ansatz. Ich grok verwendet zum extrahieren der Teil der Zeile, die Wiederholung. Dann habe ich eine ruby {} filter zu hacken, das line-up in Teile mit der scan-Funktion:

    ruby {
        code => "event.put('segment', event.get('segments').scan(/.{3}/))
    }

    Das wirklich gut funktionierte, wie es erstellt ein array in die segment-Eigenschaft, dann gefolgt von split {} auf dem Feld bekam ich mehrere Veranstaltungen, die ich wollte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.