ElasticNotifier

Maintainability Test Coverage Build Status

ElasticNotifier gem provides a simple API to send error notifications to an Elastic Search instance.

It can also be used as plug-in for exception_notification gem to send error notifications caught by the Rack middleware.

Installation

Add this line to your application's Gemfile:

gem 'elastic_notifier'

And then execute:

$ bundle

Or install it yourself as:

$ gem install elastic_notifier

Usage

NOTIFIER = ElasticNotifier.new(
  url: "http://myserver.com:9200", # default is http://localhost:9200
  index: "my_custom_index",        # default is :elastic_notifier
  type: "my_document_type"         # default is :signals
)

For Rails applications you can add the code above to config/initializers/elastic_notifier.rb so it will be available throghout the app.

Then send error notifications as you rescue errors:

begin
  # some code that raises an exception
rescue => error
  NOTIFIER.notify_error(error)
end

As ExceptionNotification's Plugin

If you are already using exception_notification gem within a Rails app you can use ElasticNotifier out of the box.

In config/initializers/elastic_notifier.rb, after initializing the notifier object as described above, you need to register it as documented here.

notifier = ElasticNotifier.new(url: "http://myserver.com:9200")
ExceptionNotifier.add_notifier :elastic_search, notifier

What information is being sent?

At the time the notifier is invoked it collects some information from the environment, serializes it together with the exception details and sent it to the Elastic instance.

{
  severity: "error",
  timestamp: "2017-12-31 23:59:59",
  program_name: "my_app.rb",
  pid: 1345,
  hostname: "myservicename",
  ip: "123.123.123.123",
  data: {
    name: "NoMethodError",
    message: "undefined method `test` for nil:NilClass",
    backtrace: [...]
  }
}

It is possible to override parameters such as program_name which will remain static for the notifier instance.

notifier = ElasticNotifier.new(url: "http://myserver.com:9200", program_name: "custom_name")

Contributing

Bug reports and pull requests are very welcome. Please be aware that you are expected to follow the code of conduct.

License

Copyright (c) 2017 Fabio Pitino, released under the MIT license.