Riemann is (surprise!) a Riemann client for Elixir.
Chuck this into your project config:
defp deps do
[{:riemann, " ~> 0.1.6"},
end
You'll also need to start the :riemann
application, either manually (Application.start(:riemann)
) or in your mix.exs
application config.
Events are anything that implements the Dict
protocol, so you'll likely want a Keyword
list or a Map
.
If you want to send custom attributes, stick them in the attributes
key as a Dict
. You can add in the state
key, if you want to add a state to your event.
Send your events with Riemann.send/1
and Riemann.send_async/1
, blocking and non-blocking (just call
and cast
). They both expect an event, or a list of events.
Riemann.send(service: "my awesome app", metric: 5.0, attributes: [build: "7543"])
Riemann.send_async([
[service: "my awesome app req", metric: 1, state: "up", attributes: [build: "7543"]],
%{service: "things in queue", metric: 100, attributes: [build: "7543"]}
])
To ask the server for a list of events matching a query string, use Riemann.query/1
.
{:ok, events} = Riemann.query('service ~= "my awesome"')
#=> events = [%{attributes: %{"build" => "7543"}, description: nil, host: "dax",
# metric: nil, service: "my awesome app", state: nil, tags: [],
# time: 1430329965, ttl: 60.0},
# %{attributes: %{"build" => "7543"}, description: nil, host: "dax", metric: 1,
# service: "my awesome app req", state: "up", tags: [], time: 1430329965,
# ttl: 60.0}]
Just toss this snippet into your environment's config:
config :riemann, :address,
host: "127.0.0.1",
port: 5555
You can also set a hostname for events to override the default (the machine's name).
config :riemann, event_host: "app host (staging)"
- Only TCP is supported, read this.
If you want UDP, feel free to submit a PR (with tests 👺) or bug me to implement it.
See the LICENSE file. (spoiler: it's MIT)