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