Sha256: cf4f5c2f1a3482c086b795797ceb766be227e09302aebc1e4f8fbf71addc2335

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

require 'fluent/plugin/output'
require 'fluent/plugin/prometheus'

module Fluent::Plugin
  class PrometheusOutputMetric < Fluent::Plugin::Output
    Fluent::Plugin.register_output('prometheus_metric', self)
    include Fluent::Plugin::PrometheusLabelParser

    def initialize
      super
      @registry = ::Prometheus::Client.registry
    end

    def multi_workers_ready?
      true
    end

    config_param :key, :string

    def process(tag, es)
      # Write out values in event stream to Registry
      es.each do |time, record|
        # Create metric if not exists
        begin
          desc = "fluentd message stream with tag: ${tag}"
          gauge = @registry.gauge(tag.to_sym, desc.sub!("${tag}", tag))
        rescue ::Prometheus::Client::Registry::AlreadyRegisteredError
          gauge = @registry.get(tag.to_sym)
        end
        value = record[@key]
        if value
          record.tap do |hs| 
            hs.delete(@key)
            hs.delete('timestamp')
          end
          # set labels as all elements in message besides the key
          gauge.set(record.transform_keys(&:to_sym), value)
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-prometheus-smarter-1.8.23 lib/fluent/plugin/out_prometheus_metric.rb