class LogStash::Inputs::Heroku

Stream events from a heroku app's logs.

This will read events in a manner similar to how the `heroku logs -t` command fetches logs.

Recommended filters:

filter {
  grok {
    pattern => "^%{TIMESTAMP_ISO8601:timestamp} %{WORD:component}\[%{WORD:process}(?:\.%{INT:instance:int})?\]: %{DATA:message}$"
  }
  date { timestamp => ISO8601 }
}

Public Instance Methods

register() click to toggle source
# File lib/logstash/inputs/heroku.rb, line 29
def register
  require "heroku"
  require "logstash/util/buftok"
end
run(queue) click to toggle source
# File lib/logstash/inputs/heroku.rb, line 35
def run(queue)
  client = Heroku::Client.new(Heroku::Auth.user, Heroku::Auth.password)

  # The 'Herok::Client#read_logs' method emits chunks of text not bounded
  # by event barriers like newlines.
  # tail=1 means to follow logs
  # I *think* setting num=1 means we only get 1 historical event. Setting
  # this to 0 makes it fetch *all* events, not what I want.
  client.read_logs(@app, ["tail=1", "num=1"]) do |chunk|
    @codec.decode(chunk) do |event|
      decorate(event)
      event["app"] = @app
      queue << event
    end
  end
end