Sha256: 1bcb1f6956b0087971526e0cba7df6373af59a2105143887b176bd0a8f568f48

Contents?: true

Size: 1.98 KB

Versions: 9

Compression:

Stored size: 1.98 KB

Contents

require "logstash/filters/base"
require "logstash/namespace"
gem "jls-grok", ">=0.2.3071"
require "grok" # rubygem 'jls-grok'

class LogStash::Filters::Grokdiscovery < LogStash::Filters::Base
  public
  def initialize(config = {})
    super

    @discover_fields = {}
  end # def initialize

  public
  def register
    # TODO(sissel): Make patterns files come from the config
    @config.each do |type, typeconfig|
      @logger.debug("Registering type with grok: #{type}")
      @grok = Grok.new
      Dir.glob("patterns/*").each do |path|
        @grok.add_patterns_from_file(path)
      end
      @discover_fields[type] = typeconfig
      @logger.debug(["Enabling discovery", { :type => type, :fields => typeconfig }])
      @logger.warn(@discover_fields)
    end # @config.each
  end # def register

  public
  def filter(event)
    # parse it with grok
    message = event.message
    match = false

    if event.type and @discover_fields.include?(event.type)
      discover = @discover_fields[event.type] & event.fields.keys
      discover.each do |field|
        value = event.fields[field]
        value = [value] if value.is_a?(String)

        value.each do |v| 
          pattern = @grok.discover(v)
          @logger.warn("Trying #{v} => #{pattern}")
          @grok.compile(pattern)
          match = @grok.match(v)
          if match
            @logger.warn(["Match", match.captures])
            event.fields.merge!(match.captures) do |key, oldval, newval|
              @logger.warn(["Merging #{key}", oldval, newval])
              oldval + newval # should both be arrays...
            end
          else
            @logger.warn(["Discovery produced something not matchable?", { :input => v }])
          end
        end # value.each
      end # discover.each
    else
      @logger.info("Unknown type for #{event.source} (type: #{event.type})")
      @logger.debug(event.to_hash)
    end
    @logger.debug(["Event now: ", event.to_hash])
  end # def filter
end # class LogStash::Filters::Grokdiscovery

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
logstash-lite-0.2.20110505142231 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110422152244 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110405105201 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110331121236 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110329105411 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110206003603 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110203130400 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110122143801 lib/logstash/filters/grokdiscovery.rb
logstash-lite-0.2.20110112115019 lib/logstash/filters/grokdiscovery.rb