Custom emails with Riemann
I’ve recently started alerting on expired events from Riemann via email. The default email alert looks something like this:
It contains some useful information but it is pretty basic: the subject is the name of the alerted service and the body contains a basic printout of the event’s fields.
I decided I’d like to build some alternative emails and so I went digging into the mailer plug-in code to find out how.
You would normally configure the mailer plug-in something like this:
This defines a new function called
plug-in. We’ve configured a single option for the plug-in:
:from which controls the source address for emails, here
If we want to update the subject or body of the email we can pass in the
:body options. These options take a collection of events and
return a formatted string, for example the default subject is set by a function like:
:subject option has a function with an argument of
events, which is the collection of incoming events. The
map function then extracts the value of the
:service field in each event, if there is more than one event then joins the services in a comma separated list, and writes that as a string in the subject line of our email. Hence
riemanna riemann server tcp 0.0.0.0:5555... as the subject in our example email above.
If instead I wanted to build a custom email subject, let’s say to notify me when specific host was down I could add the
:subject option to my
Here we’ve passed the
:subject options our
events collection. We’ve then specified a string, “Host … is down”. We’ve replaced the
... in the string with the hostname of the event. We’ve taken the hostname by getting the contents of the
:host field from the first event in our collection.
We can then trigger these alerts with something like:
Here we’re filtering on all
expired events, splitting the streams by the
:host field using the
by function. This creates a new stream for event by host. We then call the
host_email function to send the email.
The resulting email would look like:
We could do similar things to modify the body of the email using the
P.S. I am slowly teaching myself Clojure. I’ve thus far found the Try Clojure site, the Learn Clojure and Clojure from the ground up to be most useful for this.