/elixir-riemann

A Riemann client for Elixir, surprise!

Primary LanguageElixirMIT LicenseMIT

Riemann Build Status

Riemann is (surprise!) a Riemann client for Elixir.

Getting Started

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.

Usage

Sending Events

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"]}
])

Querying for Events

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}]

Configuration

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)"

Caveats

  • Only TCP is supported, read this.

If you want UDP, feel free to submit a PR (with tests 👺) or bug me to implement it.

License

See the LICENSE file. (spoiler: it's MIT)