class LogStash::Codecs::Fluent

This codec handles fluentd's msgpack schema.

For example, you can receive logs from fluent-logger-ruby with:

input {
  tcp {
    codec => fluent
    port => 4000
  }
}

And from your ruby code in your own application:

logger = Fluent::Logger::FluentLogger.new(nil, :host => "example.log", :port => 4000)
logger.post("some_tag", { "your" => "data", "here" => "yay!" })

Notes:

Public Instance Methods

decode(data) { |event| ... } click to toggle source
# File lib/logstash/codecs/fluent.rb, line 37
def decode(data)
  @decoder.feed(data)
  @decoder.each do |tag, epochtime, map|
    event = LogStash::Event.new(map.merge(
      "@timestamp" => Time.at(epochtime),
      "tags" => tag
    ))
    yield event
  end
end
encode(event) click to toggle source
# File lib/logstash/codecs/fluent.rb, line 49
def encode(event)
  tag = event["tags"] || "log"
  epochtime = event["@timestamp"].to_i
  @on_event.call(MessagePack.pack([ tag, epochtime, event.to_hash ]))
end
register() click to toggle source
# File lib/logstash/codecs/fluent.rb, line 31
def register
  require "msgpack"
  @decoder = MessagePack::Unpacker.new
end