Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/p-lambert/monitoring
An extensible application-level monitoring library
https://github.com/p-lambert/monitoring
monitoring
Last synced: 28 days ago
JSON representation
An extensible application-level monitoring library
- Host: GitHub
- URL: https://github.com/p-lambert/monitoring
- Owner: p-lambert
- License: mit
- Created: 2017-03-10T04:54:48.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-10T04:55:40.000Z (almost 8 years ago)
- Last Synced: 2024-11-09T00:29:43.847Z (3 months ago)
- Topics: monitoring
- Language: Ruby
- Homepage:
- Size: 30.3 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Monitoring
Vestorly's `monitoring` gem provides standard interfaces for writing,
performing, and reporting application-level checks. The library has no external
dependencies and it can be used in any ruby application.## Installation
Add this line to your application's Gemfile:
```ruby
gem 'monitoring', git: 'https://github.com/vestorly/monitoring.git
```And then execute:
$ bundle
## Basics
There are two central concepts over which the library is built: `probes` and
`handlers`. A `Probe` is simply a chunk of monitoring code; it requires a name
and it must adhere to a few conventions that will be explained in the
following sections. A `Probe` can be declared as it follows:```ruby
Monitoring.add(:redis) do
$redis.connected?
endMonitoring.add(:google_dns) do
system('nc -z 8.8.8.8 53')
end
```Every `Probe` execution generates a `Result` object including basic information
about the test. Conversely, a `Handler` takes a `Result` object and does something
useful with it. As an example, a `Handler` could log results or report
it using an error tracking tool such as *Sentry* or *Appsignal*.## Built-in handlers
The `monitoring` gem comes with a few built-in handlers:
Name | Purpose
--- | ---
`Handlers::Logger` | Write results to a log sink using either `Rails.logger` or `Logger`. **Enabled by default.**
`Handlers::FileReporter` | Write aggregate results in `JSON` format to the file specified in `Monitoring.configuration.output_file`. **Enabled by default.**
`Handlers::SentryReporter` | Report `Sentry` errors using the `raven` gem.
`Handlers::SlackNotifier` | Send Slack notifications.
`Handlers::Poster` | Perform HTTP POST request with a custom payload.#### Enabling handlers
`handlers` can be enabled as it follows:
```ruby
Monitoring.configure do |c|
c.add_handler :sentry, Monitoring::Handler::SentryReporter.new
c.add_handler :slack, Monitoring::Handler::SlackNotifier.new(ENV.fetch(:SLACK_WEBHOOK))
end
```By default, all `probes` will have their results processed by all *enabled*
`handlers`. If you want to specify a custom set of handlers to be run after a
probe execution finishes, you can use the `handle_with` option:```ruby
Monitoring.add(:sendgrid, handle_with: [:logger, :slack]) do
...
end
```## Probing Evaluation
All probes have their return values coerced into `Result` objects:
* `nil`, `false` and `''` are coerced into a `FAILURE` result;
* exceptions are captured and turned into a `FAILURE` as well;
* `String` objects are coerced into a `SUCCESS` result and their values are used
as the message;
* pairs like `[true|false, 'custom message']` are also accepted;These evaluation rules enable `SUCCESS/FAILURE` checks to be performed while
conveying useful information:```ruby
Monitoring.add(:sidekiq_queue) do
queue = Sidekiq::Queue.all.first
[queue.size < 100, "Queue size: #{queue.size}"]
end
```## Configuration
Here are some useful configuration parameters:
```ruby
Monitoring.configure do |c|
c.application_name 'my_application_name'
c.timeout = 10
c.output_file = '/var/log/monitoring.json'
end
```## Execution
It is the client responsibility to periodically run the tests (by using a task
scheduling tool). The entry point for running all probes is `Monitoring.run`. For
your convenience, a `rake monitoring:run` task is provided.It is worth mentioning that all probes run concurrently in separate threads, so
keep in mind any thread-safety issues.## Monitoring endpoint
You can easily enable a monitoring endpoint in your application by adding the
following code to your `routes.rb` file:```ruby
get 'monitoring', to: Monitoring::Route
```## TODOS
- [ ] Improve concurrency model by using a Thread Pool
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/Vestorly/monitoring.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).