Logstash Debugging

Mit einen wenigen Schritten kann man neue Filter für die Elasticstack Komponente Logstash "offline" testen. Der laufende Betrieb wird mit der vorgestellten Methode nicht beeinträchtigt.

Los geht es mit dem Extrahieren einiger Testdaten in eine Datei. Hierzu erstellt man sich für den gewünschten Typ einen Output, der genau diesen Job übernimmt:

...
output {
...
  if [type] == "DEBUG" {
    file {
      path => "/tmp/debug.plain"
    }
  }
...
}

Im Schritt zwei wird eine Minimalkonfiguration, rs.conf im Beispiel, mit dem zu testenden neuen Filter erstellt:

input { stdin { } }
filter {
  json {
    source => "message"
  }
  mutate {
    remove_field => [ "feld1" ]
  }
}
output { stdout { codec => "rubydebug" } }

Die Eingabe erfolgt über stdin, durchläuft dann den Filter- Abschnitt und gibt das Ergebnis auf stdout wieder aus. Für die farbige Kodierung und einen gut lesbaren Aufbau der Ausgabe sorgt hier der Codec rubydebug.

Nun fehlt nur noch der Aufruf des ganzen:

cat debug.plain | /usr/share/logstash/bin/logstash -f rs.conf

Die Ausgabe erfolgt direkt im Terminal; je nach Konfiguration des Terminals auch farblich hervorgehoben (gelbe Zeilen wurde erfolgreich geparsed, weiße Zeilen enthalten meist einen Fehler). Selbstverständlich kann die Ausgabe auch in eine Datei umgeleitet werden, was gerade bei größeren Datenmengen für eine bessere Lesbarkeit sorgt.