A modern, distributed monitoring system written in Go
A modern, distributed monitoring system written in Go.
While there are a bunch of solutions for monitoring and alerting using time series data, there aren't many (or any?) modern solutions for 'regular'/'old-skool' remote monitoring similar to Nagios and Icinga.
9volt
offers the following things out of the box:
etcd
for all configuration9volt
immediately picks up the change)./9volt cfg --help
etcd
9volt
release./9volt server -e http://etcd-server-1.example.com:2379 -e http://etcd-server-2.example.com:2379 -e http://etcd-server-3.example.com:2379
9volt cfg
for managing configs9volt
to be managed by supervisord
, upstart
or some other process manager9volt
via env vars
... or, if you prefer to do things via Docker, check out these docs.
Scaling 9volt
is incredibly simple. Launch another 9volt
service on a separate host and point it to the same etcd
hosts as the main 9volt
service.
Your main 9volt
node will produce output similar to this when it detects a node join:
Checks will be automatically divided between the all 9volt
instances.
If one of the nodes were to go down, a new leader will be elected (if the node that went down was the previous leader) and checks will be redistributed among the remaining nodes.
This will produce output similar to this (and will be also available in the event stream via the API and UI):
API documentation can be found here.
Note In the minimum configuration, you could run both 9volt
and etcd
on the same node.
While you can manage 9volt alerter and monitor configs via the API, another approach to config management is to use the built-in config utility (9volt cfg <flags>
).
This utility allows you to scan a given directory for any YAML files that resemble 9volt configs (the file must contain either 'monitor' or 'alerter' sections) and it will automatically parse, validate and push them to your etcd server(s).
By default, the utility will keep your local configs in sync with your etcd server(s). In other words, if the utility comes across a config in etcd that does not exist locally (in config(s)), it will remove the config entry from etcd (and vice versa). This functionality can be turned off by flipping the --nosync
flag.
You can look at an example of a YAML based config here.
Read through the docs dir.
Got a suggestion/idea? Something that is preventing you from using 9volt
over another monitoring system because of a missing feature? Submit an issue and we'll see what we can do!