Class: Syslogstash::PrometheusExporter

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePrometheusExporter

Returns a new instance of PrometheusExporter.



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

def initialize
	@msg_in  = prom.counter(:syslogstash_messages_received, "The number of syslog messages received from each log socket")
	@msg_out = prom.counter(:syslogstash_messages_sent, "The number of logstash messages sent to each logstash server")
	@lag     = prom.gauge(:syslogstash_lag_ms, "How far behind we are in relaying messages")
	@queue   = prom.gauge(:syslogstash_queue_size, "How many messages are queued to be sent")
	@dropped = prom.counter(:syslogstash_messages_dropped, "How many syslog messages have been dropped from the backlog queue")
end

Instance Attribute Details

#threadObject (readonly)

Returns the value of attribute thread.



7
8
9
# File 'lib/syslogstash/prometheus_exporter.rb', line 7

def thread
  @thread
end

Instance Method Details

#droppedObject



39
40
41
42
# File 'lib/syslogstash/prometheus_exporter.rb', line 39

def dropped
	@queue.set({}, @queue.get({}) - 1)
	@dropped.increment({})
end

#received(socket, stamp) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/syslogstash/prometheus_exporter.rb', line 17

def received(socket, stamp)
	@msg_in.increment(socket_path: socket)
	@queue.set({}, (@queue.get({}) || 0) + 1)

	if @most_recent_received.nil? || @most_recent_received < stamp
		@most_recent_received = stamp

		refresh_lag
	end
end

#runObject



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/syslogstash/prometheus_exporter.rb', line 44

def run
	@thread = Thread.new do
		app = Rack::Builder.new
		app.use Prometheus::Middleware::Exporter
		app.run ->(env) { [404, {'Content-Type' => 'text/plain'}, ['Nope']] }

		logger = Logger.new($stderr)
		logger.level = Logger::INFO
		logger.formatter = proc { |s, t, p, m| "[Syslogstash::PrometheusExporter::WEBrick] #{m}\n" }

		Rack::Handler::WEBrick.run app, Host: '::', Port: 9159, Logger: logger, AccessLog: []
	end
end

#sent(server, stamp) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/syslogstash/prometheus_exporter.rb', line 28

def sent(server, stamp)
	@msg_out.increment(logstash_server: server)
	@queue.set({}, @queue.get({}) - 1)

	if @most_recent_sent.nil? || @most_recent_sent < stamp
		@most_recent_sent = stamp

		refresh_lag
	end
end