class LogStash::Filters::ExtractNumbers

This filter automatically extracts all numbers found inside a string

This is useful when you have lines that don't match a grok pattern or use json but you still need to extract numbers.

Each numbers is returned in a @fields.intX or @fields.floatX field where X indicates the position in the string.

The fields produced by this filter are extra useful used in combination with kibana number plotting features.

Public Instance Methods

filter(event) click to toggle source
# File lib/logstash/filters/extractnumbers.rb, line 28
def filter(event)
  integers = nil
  floats = nil

  msg = event[@source]

  if not msg
    return
  end

  # If for some reason the field is an array of values, take the first only.
  msg = msg.first if msg.is_a?(Array)


  fields = msg.split
  for elem in fields
    int = str_as_integer(elem)
    if int != nil
      if not integers
        integers = Array.new
      end
      integers.push(int)
      next
    end
    f = str_as_float(elem)
    if f != nil
      if not floats
        floats = Array.new
      end
      floats.push(f)
    end
  end

  if integers
    index = 0
    for i in integers
      index += 1
      event["int" + index.to_s] = i
    end
  end
  if floats
    index = 0
    for f in floats
      index += 1
      event["float" + index.to_s] = f
    end
  end
end
register() click to toggle source
# File lib/logstash/filters/extractnumbers.rb, line 24
def register
end
str_as_float(str) click to toggle source
# File lib/logstash/filters/extractnumbers.rb, line 81
def str_as_float(str)
  Float(str) rescue nil
end
str_as_integer(str) click to toggle source
# File lib/logstash/filters/extractnumbers.rb, line 77
def str_as_integer(str)
  Integer(str) rescue nil
end