Gem Version Build Status Dependency Status Maintainability Status

Prometheus Reporter

prometheus_reporter helps you to generate Prometheus metric reports using its text format. Official client helps you to monitor internal web-server guts, while prometheus_reporter can help you representing any data you want.

Overview

require 'prometheus_reporter'

f = PrometheusReporter::TextFormatter.new
f.entry(:my_metric, value: 144, labels: { source: 'api', module: 'chat' })
f.to_s
# => 'my_metric{souce="api",module="chat"} 144'

Installation

Installation is pretty standard:

$ gem install prometheus_reporter

or using Gemfile:

gem 'prometheus_reporter', '~> 1.1.1'

Configuration

You may want to have metric keys application prefix to distinguish those metrics from metric keys reported by other applications.

By default, prefix isn't used.

PrometheusReporter.configure do |config|
  config.prefix = 'my_web_app'
end

f = PrometheusReporter::TextFormatter.new
f.entry(:emails_count, value: 567)
f.to_s # => "my_web_app_emails_count 567\n"

You can overwrite it passing another prefix to a new TextFormatter instance:

f = PrometheusReporter::TextFormatter.new(prefix: 'facebook_clone')
f.entry(:emails_count, value: 987)
f.to_s # => "facebook_clone_emails_count 987\n"

Usage

DSL

You can also use DSL to define reports:

report =
  PrometheusReporter::TextFormatter.draw(prefix: 'my_application') do
    type  :emails_today, :counter
    entry :emails_today, value: 1337

    type  :registrations_today, :counter
    entry :registrations_today, value: 105

    type  :payments_total, :summary
    entry :payments_total, 29913
  end

Creating text report for Prometheus:

require 'prometheus_reporter'

f = PrometheusReporter::TextFormatter.new
f.help(:emails_today, 'Events created from the beginning of the day')
f.type(:emails_today, :counter)
f.entry(:emails_today,
        value: 10,
        labels: { type: 'notify_for_inactivity' },
        timestamp: Time.now.to_i)
f.entry(:emails_today,
        value: 18,
        labels: { type: 'registration_confirmation' },
        timestamp: Time.now.to_i)
f.to_s

Produces the following output:

# HELP facebook_clone_emails_today Amount of emails sent from the beginning of the day
# TYPE facebook_clone_emails_today counter
facebook_clone_emails_today{type="notify_for_inactivity"} 10 1515681885
facebook_clone_emails_today{type="registration_confirmation"} 18 1515681886