class LogStash::Inputs::WMI

Collect data from WMI query

This is useful for collecting performance metrics and other data which is accessible via WMI on a Windows host

Example:

input {
  wmi {
    query => "select * from Win32_Process"
    interval => 10
  }
  wmi {
    query => "select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor where name = '_Total'"
  }
}

Public Instance Methods

register() click to toggle source
# File lib/logstash/inputs/wmi.rb, line 34
def register

  @host = Socket.gethostname
  @logger.info("Registering wmi input", :query => @query)

  if RUBY_PLATFORM == "java"
    require "jruby-win32ole"
  else
    require "win32ole"
  end
end
run(queue) click to toggle source
# File lib/logstash/inputs/wmi.rb, line 47
def run(queue)
  @wmi = WIN32OLE.connect("winmgmts://")
  
  begin
    @logger.debug("Executing WMI query '#{@query}'")
    loop do
      @wmi.ExecQuery(@query).each do |wmiobj|
        # create a single event for all properties in the collection
        event = LogStash::Event.new
        event["host"] = @host
        decorate(event)
        wmiobj.Properties_.each do |prop|
          event[prop.name] = prop.value
        end
        queue << event
      end
      sleep @interval
    end # loop
  rescue Exception => ex
    @logger.error("WMI query error: #{ex}\n#{ex.backtrace}")
    sleep @interval
    retry
  end # begin/rescue
end