Class: Syslogstash

Inherits:
Object
  • Object
show all
Defined in:
lib/syslogstash.rb

Overview

Read syslog messages from one or more sockets, and send it to a logstash server.

Defined Under Namespace

Modules: Worker Classes: LogstashWriter, PrometheusExporter, SyslogReader

Instance Method Summary collapse

Constructor Details

#initialize(sockets, servers, backlog) ⇒ Syslogstash

Returns a new instance of Syslogstash.



10
11
12
13
14
15
16
# File 'lib/syslogstash.rb', line 10

def initialize(sockets, servers, backlog)
	@metrics = PrometheusExporter.new

	@writer = LogstashWriter.new(servers, backlog, @metrics)

	@readers = sockets.map { |f, cfg| SyslogReader.new(f, cfg, @writer, @metrics) }
end

Instance Method Details

#runObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/syslogstash.rb', line 18

def run
	@metrics.run
	@writer.run
	@readers.each { |w| w.run }

	tw = ThreadsWait.new(@metrics.thread, @writer.thread, *(@readers.map { |r| r.thread }))

	dead_thread = tw.next_wait

	if dead_thread == @writer.thread
		$stderr.puts "[Syslogstash] Writer thread crashed."
	elsif dead_thread == @metrics.thread
		$stderr.puts "[Syslogstash] Metrics exporter thread crashed."
	else
		reader = @readers.find { |r| r.thread == dead_thread }

		$stderr.puts "[Syslogstash] Reader thread for #{reader.file} crashed."
	end

	begin
		dead_thread.join
	rescue Exception => ex
		$stderr.puts "[Syslogstash] Exception in thread was: #{ex.message} (#{ex.class})"
		$stderr.puts ex.backtrace.map { |l| "  #{l}" }.join("\n")
	end

	exit 1
end