class LogStash::Outputs::Prometheus
An prometheus output that does nothing.
Public Instance Methods
kill_thread()
click to toggle source
# File lib/logstash/outputs/prometheus.rb, line 92 def kill_thread() @thread.kill $prom_servers[@port] = nil end
receive(event)
click to toggle source
# File lib/logstash/outputs/prometheus.rb, line 111 def receive(event) @increment.each do |metric_name, val| labels = setup_event_labels(val, event) $metrics[port.to_s + metric_name].increment(labels: labels) end @decrement.each do |metric_name, val| labels = setup_event_labels(val, event) $metrics[port.to_s + metric_name].decrement(labels: labels) end @set.each do |metric_name, val| labels = setup_event_labels(val, event) $metrics[port.to_s + metric_name].set(event.sprintf(val['value']).to_f,labels: labels) end @timer.each do |metric_name, val| labels = setup_event_labels(val, event) $metrics[port.to_s + metric_name].observe(event.sprintf(val['value']).to_f,labels: labels) end end
register()
click to toggle source
# File lib/logstash/outputs/prometheus.rb, line 24 def register $prom_servers ||= {} $metrics ||= {} if $prom_servers[@port].nil? $prom_servers[@port] = Prometheus::Client::Registry.new prom_server = $prom_servers[@port] app = Rack::Builder.new(@port) do use ::Rack::Deflater use ::Prometheus::Middleware::Exporter, registry: prom_server run ->(_) { [200, {'Content-Type' => 'text/html'}, ['Please access /metrics to see exposed metrics for this Logstash instance.']] } end.to_app @thread = Thread.new do Rack::Handler::WEBrick.run(app, Port: @port, BindAddress: "0.0.0.0", Host: "0.0.0.0") end end prom_server = $prom_servers[@port] @increment.each do |metric_name, val| val = setup_registry_labels(val) if $metrics[port.to_s + metric_name].nil? if val['type'] == "gauge" metric = prom_server.gauge(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys) else metric = prom_server.counter(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys) end $metrics[port.to_s + metric_name] = metric end end @decrement.each do |metric_name, val| val = setup_registry_labels(val) if $metrics[port.to_s + metric_name].nil? metric = prom_server.gauge(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys) $metrics[port.to_s + metric_name] = metric end end @set.each do |metric_name, val| val = setup_registry_labels(val) if $metrics[port.to_s + metric_name].nil? metric = prom_server.gauge(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys) $metrics[port.to_s + metric_name] = metric end end @timer.each do |metric_name, val| val = setup_registry_labels(val) if $metrics[port.to_s + metric_name].nil? if val['type'] == "histogram" metric = prom_server.histogram(metric_name.to_sym, docstring: val['description'], labels: val['labels'].keys, buckets: val['buckets']) else metric = prom_server.summary(metric_name.to_sym, labels: val['labels'].keys, docstring: val['description']) end $metrics[port.to_s + metric_name] = metric end end end
Protected Instance Methods
setup_event_labels(val, event)
click to toggle source
# File lib/logstash/outputs/prometheus.rb, line 134 def setup_event_labels(val, event) labels = {} val['labels'].each do |label, lval| labels[label] = event.sprintf(lval) end return labels end
setup_registry_labels(val)
click to toggle source
# File lib/logstash/outputs/prometheus.rb, line 98 def setup_registry_labels(val) if val['labels'].nil? val['labels'] = {} end val['labels'].keys.each do |key| val['labels'][(key.to_sym rescue key) || key] = val['labels'].delete(key) end return val end