2017-12-09 6 views
0

Ich möchte ein Codec Plugin schreiben, um LogStash zu ermöglichen, ein binäres Datenformat zu dekodieren.Was ist das `data` Objekt, das an die` decode` Methode des Codecs übergeben wird?

The official documentation for writing a Codec zeigt, dass ich eine decode Methode definieren muss, die einen einzelnen Parameter akzeptiert: eine Variable mit dem Namen data.

Ich bin neu in LogStash und Ruby. Da ich hauptsächlich mit statisch getippten Sprachen gearbeitet habe, bin ich mir nicht sicher, wie ich mehr über die Variable data erfahren kann. Ich nehme an, dass es analog zu einem Objekt InputStream ist, das mir erlaubt, Daten zu lesen, wie es verfügbar wird, aber ich bin nicht sicher.

Fragen:

  1. Welche Art ist die data Objekt? Welche Methoden hat es?
  2. Wie untersuchen Ruby-Entwickler typischerweise solche Variablen? Ich bin mir nicht sicher, ob ich einen Weg finde, es herauszufinden, ohne ein Skelett-Plugin zu schreiben und eine String-Repräsentation von data auf STDOUT zu speichern.

Vielen Dank!

Antwort

0

Die Dokumentation zum Schreiben eines input Plugins deutet darauf hin. Von den run() method section:

data = $stdin.sysread(16384) 
    @codec.decode(data) do |event| 
     decorate(event) 
     event.set("host", @host) if !event.include?("host") 
     queue << event 
    end 

data Die Variable ist ein Ruby String, die als Puffer willkürlichen Bytes verwendet wird. Ich habe dies verifiziert, indem ich ein Skelett-Plugin erstellt und den Wert zur Laufzeit überprüft habe.

Dies scheint Grund zur Vorsicht zu sein: die codecdecode zur Verfügung gestellten Bytes sind kein garantiertes Ereignis.

Verwandte Themen