Skip to content
Extendable framework for collecting and exporting metrics from your Ruby application
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Release v0.1.3 with block-based DSL for metric and group declaration Dec 18, 2018
spec DSL for defining groups and metrics with Ruby blocks (#4) Dec 17, 2018
.rspec Initial commit: API preview for metrics and adapters Oct 3, 2018
.travis.yml Write necessary documentation for essential methods and classes Oct 25, 2018
Gemfile Rename Evil Metrics to Yabeda Oct 17, 2018
LICENSE.txt Fix code examples typos in the README (#5) Jan 5, 2019


Gem Version Build Status

This software is Work in Progress: features will appear and disappear, API will be changed, your feedback is always welcome!

Extendable solution for easy setup of monitoring in your Ruby apps.

Sponsored by Evil Martians

Read more about Yabeda and the reasoning behind it in Martian Chronicles: “Meet Yabeda: Modular framework for instrumenting Ruby applications”


Most of the time you don't need to add this gem to your Gemfile directly (unless you're only collecting your custom metrics):

gem 'yabeda'
# Then add monitoring system adapter, e.g.:
# gem 'yabeda-prometheus'

And then execute:

$ bundle


  1. Declare your metrics:

    Yabeda.configure do
      group :your_app do
        counter   :bells_rang_count, comment: "Total number of bells being rang"
        gauge     :whistles_active,  comment: "Number of whistles ready to whistle"
        histogram :whistle_runtime do
          comment "How long whistles are being active"
          unit :seconds
  2. Access metric in your app and use it!

    def ring_the_bell(id)
      bell = Bell.find(id)
      Yabeda.your_app.bells_rang_count.increment({bell_size: bell.size}, by: 1)
    def whistle!
      Yabeda.your_app.whistle_runtime.measure do
        # Run your code
  3. Setup collecting of metrics that do not tied to specific events in you application. E.g.: reporting your app's current state

    Yabeda.configure do
      # This block will be executed periodically few times in a minute
      # (by timer or external request depending on adapter you're using)
      # Keep it fast and simple!
      collect do
        your_app.whistles_active.set({}, Whistle.where(state: :active).count)
  4. See the docs for the adapter you're using

  5. Enjoy!

Roadmap (aka TODO or Help wanted)

  • Ability to change metric settings for individual adapters

    histogram :foo, comment: "say what?" do
      adapter :prometheus do
        buckets [0.01, 0.5, …, 60, 300, 3600]
  • Ability to route some metrics only for given adapter:

    adapter :prometheus do
      include_group :sidekiq


After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to


Bug reports and pull requests are welcome on GitHub at


The gem is available as open source under the terms of the MIT License.

You can’t perform that action at this time.