- standardize of a few field names:

* host: the origin of the event (for file input, etc, many times this is
    obvious. For network inputs, this is often the client ip address)
  * path: the origin path of the event (file path, EventLog source, etc)
- some misc style cleanup done while doing the above.
This commit is contained in:
Jordan Sissel 2013-08-30 23:46:38 -07:00
parent ee28786400
commit aa34839254
21 changed files with 53 additions and 59 deletions

View file

@ -57,7 +57,8 @@ class LogStash::Inputs::EventLog < LogStash::Inputs::Base
timestamp = to_timestamp(event.TimeGenerated) timestamp = to_timestamp(event.TimeGenerated)
e = LogStash::Event.new( e = LogStash::Event.new(
"source" => "eventlog://#{@hostname}/#{@logfile}", "host" => @hostname,
"path" => @logfile,
"type" => @type, "type" => @type,
"@timestamp" => timestamp "@timestamp" => timestamp
) )

View file

@ -34,6 +34,7 @@ class LogStash::Inputs::Exec < LogStash::Inputs::Base
public public
def run(queue) def run(queue)
hostname = Socket.gethostname
loop do loop do
start = Time.now start = Time.now
@logger.info("Running exec", :command => @command) if @debug @logger.info("Running exec", :command => @command) if @debug
@ -41,7 +42,7 @@ class LogStash::Inputs::Exec < LogStash::Inputs::Base
# out.read will block until the process finishes. # out.read will block until the process finishes.
@codec.decode(out.read) do |event| @codec.decode(out.read) do |event|
decorate(event) decorate(event)
event["source"] = "exec://#{Socket.gethostname}" event["host"] = hostname
event["command"] = @command event["command"] = @command
queue << event queue << event
end end

View file

@ -127,10 +127,11 @@ class LogStash::Inputs::File < LogStash::Inputs::Base
hostname = Socket.gethostname hostname = Socket.gethostname
@tail.subscribe do |path, line| @tail.subscribe do |path, line|
source = "file://#{hostname}/#{path.gsub("\\","/")}"
@logger.debug? && @logger.debug("Received line", :path => path, :line => line) @logger.debug? && @logger.debug("Received line", :path => path, :line => line)
@codec.decode(line) do |event| @codec.decode(line) do |event|
decorate(event) decorate(event)
event["host"] = hostname
event["path"] = path
event["source"] = source event["source"] = source
queue << event queue << event
end end

View file

@ -67,11 +67,10 @@ class LogStash::Inputs::Ganglia < LogStash::Inputs::Base
loop do loop do
packet, client = @udp.recvfrom(9000) packet, client = @udp.recvfrom(9000)
# Ruby uri sucks, so don't use it. # TODO(sissel): make this a codec...
source = "ganglia://#{client[3]}/"
e = parse_packet(packet,source) e = parse_packet(packet,source)
unless e.nil? unless e.nil?
e["host"] = client[3] # the IP address
output_queue << e output_queue << e
end end
end end

View file

@ -83,7 +83,7 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
end end
event = LogStash::Event.new(JSON.parse(data)) event = LogStash::Event.new(JSON.parse(data))
event["source"] = client[3] event["host"] = client[3]
if event["timestamp"].is_a?(Numeric) if event["timestamp"].is_a?(Numeric)
event["@timestamp"] = Time.at(event["timestamp"]).gmtime event["@timestamp"] = Time.at(event["timestamp"]).gmtime
event.remove("timestamp") event.remove("timestamp")

View file

@ -56,7 +56,6 @@ class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
def run(queue) def run(queue)
number = 0 number = 0
source = "generator://#{@host}/"
if @message == "stdin" if @message == "stdin"
@logger.info("Generator plugin reading a line from stdin") @logger.info("Generator plugin reading a line from stdin")
@ -68,7 +67,7 @@ class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
@lines.each do |line| @lines.each do |line|
@codec.decode(line.clone) do |event| @codec.decode(line.clone) do |event|
decorate(event) decorate(event)
event["source"] = source event["host"] = @host
event["sequence"] = number event["sequence"] = number
queue << event queue << event
end end
@ -78,7 +77,7 @@ class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
if @codec.respond_to?(:flush) if @codec.respond_to?(:flush)
@codec.flush do |event| @codec.flush do |event|
event["source"] = source event["host"] = @hos
queue << event queue << event
end end
end end

View file

@ -38,11 +38,6 @@ class LogStash::Inputs::Irc < LogStash::Inputs::Base
# "#logstash". # "#logstash".
config :channels, :validate => :array, :required => true config :channels, :validate => :array, :required => true
def initialize(*args)
super(*args)
end # def initialize
public public
def register def register
require "cinch" require "cinch"

View file

@ -57,8 +57,8 @@ class LogStash::Inputs::Log4j < LogStash::Inputs::Base
log4j_obj = ois.readObject log4j_obj = ois.readObject
event = LogStash::Event.new("message" => log4j_obj.getRenderedMessage, event = LogStash::Event.new("message" => log4j_obj.getRenderedMessage,
"source" => event_source) "source" => event_source)
event["source_host"] = socket.peer event["host"] = socket.peer
event["source_path"] = log4j_obj.getLoggerName event["path"] = log4j_obj.getLoggerName
event["priority"] = log4j_obj.getLevel.toString event["priority"] = log4j_obj.getLevel.toString
event["logger_name"] = log4j_obj.getLoggerName event["logger_name"] = log4j_obj.getLoggerName
event["thread"] = log4j_obj.getThreadName event["thread"] = log4j_obj.getThreadName

View file

@ -30,16 +30,17 @@ class LogStash::Inputs::Pipe < LogStash::Inputs::Base
public public
def run(queue) def run(queue)
@pipe = IO.popen(command, mode="r") @pipe = IO.popen(@command, mode="r")
hostname = Socket.gethostname hostname = Socket.gethostname
@pipe.each do |line| @pipe.each do |line|
line = line.chomp line = line.chomp
source = "pipe://#{hostname}/#{command}" source = "pipe://#{hostname}/#{@command}"
@logger.debug? && @logger.debug("Received line", :command => command, :line => line) @logger.debug? && @logger.debug("Received line", :command => @command, :line => line)
@codec.decode(line) do |event| @codec.decode(line) do |event|
event["host"] = hostname
event["command"] = @command
decorate(event) decorate(event)
event["source"] = source
queue << event queue << event
end end
end end

View file

@ -39,12 +39,12 @@ class LogStash::Inputs::Relp < LogStash::Inputs::Base
end # def register end # def register
private private
def relp_stream(relpserver,socket,output_queue,event_source) def relp_stream(relpserver,socket,output_queue,client_address)
loop do loop do
frame = relpserver.syslog_read(socket) frame = relpserver.syslog_read(socket)
@codec.decode(frame["message"]) do |event| @codec.decode(frame["message"]) do |event|
decorate(event) decorate(event)
event["source"] = event_source event["host"] = _addressevent_source
output_queue << event output_queue << event
end end
@ -69,7 +69,7 @@ class LogStash::Inputs::Relp < LogStash::Inputs::Base
peer = socket.peer peer = socket.peer
@logger.debug("Relp Connection to #{peer} created") @logger.debug("Relp Connection to #{peer} created")
begin begin
relp_stream(rs,socket, output_queue,"relp://#{peer}") relp_stream(rs,socket, output_queue, peer)
rescue Relp::ConnectionClosed => e rescue Relp::ConnectionClosed => e
@logger.debug("Relp Connection to #{peer} Closed") @logger.debug("Relp Connection to #{peer} Closed")
rescue Relp::RelpError => e rescue Relp::RelpError => e

View file

@ -70,7 +70,7 @@ class LogStash::Inputs::Snmptrap < LogStash::Inputs::Base
@snmptrap.on_trap_default do |trap| @snmptrap.on_trap_default do |trap|
begin begin
event = LogStash::Event.new("message" => trap.inspect, "source" => trap.source_ip) event = LogStash::Event.new("message" => trap.inspect, "host" => trap.source_ip)
trap.each_varbind do |vb| trap.each_varbind do |vb|
event[vb.name.to_s] = vb.value.to_s event[vb.name.to_s] = vb.value.to_s
end end

View file

@ -25,7 +25,7 @@ class LogStash::Inputs::Stdin < LogStash::Inputs::Base
data = $stdin.sysread(16384) data = $stdin.sysread(16384)
@codec.decode(data) do |event| @codec.decode(data) do |event|
decorate(event) decorate(event)
event["source"] = @host event["host"] = @host
queue << event queue << event
end end
rescue EOFError, LogStash::ShutdownSignal rescue EOFError, LogStash::ShutdownSignal

View file

@ -117,10 +117,9 @@ class LogStash::Inputs::Syslog < LogStash::Inputs::Base
loop do loop do
payload, client = @udp.recvfrom(9000) payload, client = @udp.recvfrom(9000)
# Ruby uri sucks, so don't use it. # Ruby uri sucks, so don't use it.
source = "syslog://#{client[3]}/"
@codec.decode(payload) do |event| @codec.decode(payload) do |event|
decorate(event) decorate(event)
event["source"] = client[3] event["host"] = client[3]
syslog_relay(event) syslog_relay(event)
output_queue << event output_queue << event
end end
@ -142,16 +141,10 @@ class LogStash::Inputs::Syslog < LogStash::Inputs::Base
ip, port = client.peeraddr[3], client.peeraddr[1] ip, port = client.peeraddr[3], client.peeraddr[1]
@logger.info("new connection", :client => "#{ip}:#{port}") @logger.info("new connection", :client => "#{ip}:#{port}")
LogStash::Util::set_thread_name("input|syslog|tcp|#{ip}:#{port}}") LogStash::Util::set_thread_name("input|syslog|tcp|#{ip}:#{port}}")
if ip.include?(":") # ipv6
source = "syslog://[#{ip}]/"
else
source = "syslog://#{ip}/"
end
begin begin
client.each do |line| client.each do |line|
@codec.decode(line) do |event| @codec.decode(line) do |event|
event["source"] = ip event["host"] = ip
syslog_relay(event) syslog_relay(event)
output_queue << event output_queue << event
end end

View file

@ -96,7 +96,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
end # def register end # def register
private private
def handle_socket(socket, event_source, output_queue, codec) def handle_socket(socket, client_address, output_queue, codec)
while true while true
buf = nil buf = nil
# NOTE(petef): the timeout only hits after the line is read # NOTE(petef): the timeout only hits after the line is read
@ -111,7 +111,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
end end
codec.decode(buf) do |event| codec.decode(buf) do |event|
decorate(event) decorate(event)
event["source"] = event_source event["host"] = client_address
event["sslsubject"] = socket.peer_cert.subject if @ssl_enable && @ssl_verify event["sslsubject"] = socket.peer_cert.subject if @ssl_enable && @ssl_verify
output_queue << event output_queue << event
end end
@ -166,7 +166,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
@logger.debug("Accepted connection", :client => s.peer, @logger.debug("Accepted connection", :client => s.peer,
:server => "#{@host}:#{@port}") :server => "#{@host}:#{@port}")
begin begin
handle_socket(s, "tcp://#{s.peer}/", output_queue, @codec.clone) handle_socket(s, s.peer, output_queue, @codec.clone)
rescue Interrupted rescue Interrupted
s.close rescue nil s.close rescue nil
end end
@ -213,7 +213,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
end end
client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end } client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
@logger.debug("Opened connection", :client => "#{client_socket.peer}") @logger.debug("Opened connection", :client => "#{client_socket.peer}")
handle_socket(client_socket, "tcp://#{client_socket.peer}/server", output_queue) handle_socket(client_socket, client_socket.peer, output_queue, @codec.clone)
end # loop end # loop
ensure ensure
client_socket.close client_socket.close

View file

@ -60,7 +60,7 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
payload, client = @udp.recvfrom(@buffer_size) payload, client = @udp.recvfrom(@buffer_size)
@codec.decode(payload) do |event| @codec.decode(payload) do |event|
decorate(event) decorate(event)
event["source"] = "#{client[3]}:#{client[1]}" event["host"] = client[3]
output_queue << event output_queue << event
end end
end end

View file

@ -1,5 +1,6 @@
require "logstash/inputs/base" require "logstash/inputs/base"
require "logstash/namespace" require "logstash/namespace"
require "socket"
# Read events over a UNIX socket. # Read events over a UNIX socket.
# #
@ -64,8 +65,9 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
end # def register end # def register
private private
def handle_socket(socket, output_queue, event_source) def handle_socket(socket, output_queue)
begin begin
hostname = Socket.gethostname
loop do loop do
buf = nil buf = nil
# NOTE(petef): the timeout only hits after the line is read # NOTE(petef): the timeout only hits after the line is read
@ -80,7 +82,8 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
end end
@codec.decode(buf) do |event| @codec.decode(buf) do |event|
decorate(event) decorate(event)
event["source"] = event_source event["host"] = hostname
event["path"] = @path
output_queue << e output_queue << e
end end
end # loop do end # loop do
@ -119,7 +122,7 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
@logger.debug("Accepted connection", @logger.debug("Accepted connection",
:server => "#{@path}") :server => "#{@path}")
begin begin
handle_socket(s, output_queue, "unix://#{@path}/") handle_socket(s, output_queue)
rescue Interrupted rescue Interrupted
s.close rescue nil s.close rescue nil
end end
@ -142,8 +145,8 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
loop do loop do
client_socket = UNIXSocket.new(@path) client_socket = UNIXSocket.new(@path)
client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end } client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
@logger.debug("Opened connection", :client => "#{@path}") @logger.debug("Opened connection", :client => @path)
handle_socket(client_socket, output_queue, "unix://#{@path}/server") handle_socket(client_socket, output_queue)
end # loop end # loop
end end
end # def run end # def run

View file

@ -10,7 +10,6 @@ class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
public public
def register def register
require 'varnish' require 'varnish'
@source = "varnishlog://#{Socket.gethostname}/"
@vd = Varnish::VSM.VSM_New @vd = Varnish::VSM.VSM_New
Varnish::VSL.VSL_Setup(@vd) Varnish::VSL.VSL_Setup(@vd)
Varnish::VSL.VSL_Open(@vd, 1) Varnish::VSL.VSL_Open(@vd, 1)
@ -19,6 +18,7 @@ class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
def run(queue) def run(queue)
@q = queue @q = queue
@hostname = Socket.gethostname
Varnish::VSL.VSL_Dispatch(@vd, self.method(:cb).to_proc, FFI::MemoryPointer.new(:pointer)) Varnish::VSL.VSL_Dispatch(@vd, self.method(:cb).to_proc, FFI::MemoryPointer.new(:pointer))
end # def run end # def run
@ -26,7 +26,7 @@ class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
def cb(priv, tag, fd, len, spec, ptr, bitmap) def cb(priv, tag, fd, len, spec, ptr, bitmap)
begin begin
str = ptr.read_string(len) str = ptr.read_string(len)
event = LogStash::Event.new("message" => str, "source" => @source) event = LogStash::Event.new("message" => str, "host" => @host)
event["varnish_tag"] = tag event["varnish_tag"] = tag
event["varnish_fd"] = fd event["varnish_fd"] = fd
event["varnish_spec"] = spec event["varnish_spec"] = spec

View file

@ -32,7 +32,7 @@ class LogStash::Inputs::WMI < LogStash::Inputs::Base
def register def register
@host = Socket.gethostname @host = Socket.gethostname
@logger.info("Registering input wmi://#{@host}/#{@query}") @logger.info("Registering wmi input", :query => @query)
if RUBY_PLATFORM == "java" if RUBY_PLATFORM == "java"
# make use of the same fix used for the eventlog input # make use of the same fix used for the eventlog input
@ -53,7 +53,8 @@ class LogStash::Inputs::WMI < LogStash::Inputs::Base
@wmi.ExecQuery(@query).each do |wmiobj| @wmi.ExecQuery(@query).each do |wmiobj|
# create a single event for all properties in the collection # create a single event for all properties in the collection
event = LogStash::Event.new event = LogStash::Event.new
event["source"] = @host event["host"] = @host
decorate(event)
wmiobj.Properties_.each do |prop| wmiobj.Properties_.each do |prop|
event[prop.name] = prop.value event[prop.name] = prop.value
end end

View file

@ -63,11 +63,11 @@ class LogStash::Inputs::Xmpp < LogStash::Inputs::Base
end # if @rooms end # if @rooms
@client.add_message_callback do |msg| # handle direct/private messages @client.add_message_callback do |msg| # handle direct/private messages
source = "xmpp://#{msg.from.node}@#{msg.from.domain}/#{msg.from.resource}"
# accept normal msgs (skip presence updates, etc) # accept normal msgs (skip presence updates, etc)
if msg.body != nil if msg.body != nil
@codec.decode(msg.body) do |event| @codec.decode(msg.body) do |event|
# Maybe "from" should just be a hash:
# { "node" => ..., "domain" => ..., "resource" => ... }
event["from"] = "#{msg.from.node}@#{msg.from.domain}/#{msg.from.resource}" event["from"] = "#{msg.from.node}@#{msg.from.domain}/#{msg.from.resource}"
queue << event queue << event
end end

View file

@ -73,16 +73,16 @@ class LogStash::Inputs::Zenoss < LogStash::Inputs::RabbitMQ
next unless summary.occurrence.length > 0 next unless summary.occurrence.length > 0
occurrence = summary.occurrence[0] occurrence = summary.occurrence[0]
timestamp = DateTime.strptime(occurrence.created_time.to_s, "%Q").to_s #timestamp = DateTime.strptime(occurrence.created_time.to_s, "%Q").to_s
timestamp = Time.at(occurrence.created_time / 1000.0)
# LogStash event properties. # LogStash event properties.
event = LogStash::Event.new({ event = LogStash::Event.new(
"@source" => @rabbitmq_url,
"@type" => @type,
"@timestamp" => timestamp, "@timestamp" => timestamp,
"@source_host" => occurrence.actor.element_title, "type" => @type,
"@message" => occurrence.message, "host" => occurrence.actor.element_title,
}) "message" => occurrence.message,
)
# Direct mappings from summary. # Direct mappings from summary.
%w{uuid}.each do |property| %w{uuid}.each do |property|

View file

@ -140,9 +140,9 @@ class LogStash::Inputs::ZeroMQ < LogStash::Inputs::Base
@logger.debug("ZMQ receiving", :event => m2) @logger.debug("ZMQ receiving", :event => m2)
msg = m2 msg = m2
end end
@sender ||= "zmq+#{@topology}://#{host}/#{@type}"
@codec.decode(msg) do |event| @codec.decode(msg) do |event|
event["host"] = host
decorate(event) decorate(event)
output_queue << event output_queue << event
end end