Katja: Riemann Client Written In Erlang
Riemann is a network monitoring system written in Clojure, it offers a rather simple protobuf-based API. I have just tagged Katja version 0.1, my Riemann client written in Erlang.
Katja supports all the basic things a Riemann client has to support. It can …
- … send events
- … send states
- … query events
Additionally multiple events and states can also be send in a single message.
Katja only supports Erlang/OTP R16B01+. This is mostly because in releases before R16 query
was an unused keyword, meaning that you could not easily use it as a function name or record field.
Sending Events⌗
|
|
Katja allows you to send either a single event or multiple ones. Events are simple property lists with the following (possible) keys: time, state, service, host, description, tags, ttl, attributes, metric.
The entire katja:event()
type definition can be found on GitHub.
Sending States⌗
|
|
States and events are very similar, so much so that the (possible) keys of a state property list are almost identical to the keys of an event property list: time, state, service, host, description, tags, ttl, once.
Once again, the entire katja:state()
type definition can be found on GitHub.
Querying Events⌗
|
|
katja:query/1
will return a list of events. Events are a property list of type katja:event()
, so what you send to Riemann is also what you get back when querying. There is one important thing to keep in mind: All undefined
or []
values will be removed from the returned property list(s).
You can find example queries in the Riemann test suite.
Sending Entities⌗
|
|
Katja also allows you to send mutiple events and/or states in a single request via katja:send_entities/1
.
Future⌗
There are two things I’m currently thinking about adding to Katja:
-
Adding (generic) support process pools: This should be done in a way that does not assume anything about the pool that’s being used. Katja will not depend on a specific process pool implementation.
-
Querying based on a property list: This means that you could pass a property list of type
katja:event()
to a query method and get back events based on that. In general, all it should take to do this is transforming the property list in a query string that Riemann understands.