Thank you

Riemann is a team effort! To everyone who wrote a client, built a dashboard, pointed out bugs, submitted patches, or just asked questions—thank you.

If you use Riemann, send me an email about how it's working for you, or what needs to change. Frustrated with the API? Find a bug? Open an issue.

The best way to help out is to contribute code or documentation! See the contributing guide, or fork the project on Github.


Eren Güven (eguven) added an Elasticsearch plugin.

Arnaud Bailly (abailly) fixed an issue with closing unwritable channels.

小雨 Jerray (jerray) added HTML body support for Mailgun.

Frankie Sardo (frankiesardo) for some InfluxDB fixes.

Pradeep Chhetri (pradeepchhetri) added Druid & Prometheus plugins, upgraded Netty and added some TCP options.

William Huba (hexedpackets) added the ability to read SNS credentials from the default credential chain.

Mathieu Corbin (mcorbin) fixed a decoding issue with the UDP graphite server, added proper host binding to the websocket server, and suppressed logging of exceptions when they're being processed by exception-stream. Mathieu also changed the influx client to strip tags and fields when empty and fixed a bug with the SSE listening address.

Arthur Ulfeldt (thearthur) switched the synchronous datadog client to be a batching, asynchronously queued one.

Marc Fournier (mfournier) and Dante Briones (dbriones) improved the slack client.


Mete Balci (metebalci) updated the Twilio client to match new API behavior.

Ivan Ramello (iramello) extended the Cloudwatch client to support IAM roles for authentication.

Szabó Krisztián (thenonameguy) fixed a style issue in the hipchat client.

Johan Bloemberg (aequitas) added a favicon to riemann-dash.

vixns improved the opsgenie client.

Arnaud Bailly (abailly) improved the TCP server to better cope with misbehaving clients.

Paweł Oczadły (paweloczadly) fixed a typo in the Concepts document.

Ivan Ramello (iramello) extended riemann-elb-metrics to support IAM auth.

ktf wrote riemann-marathon.

Shani Elharrar (shanielh) changed the java client to use daemonized threads, and added a consul daemon.

James Turnbull (jamtur01) fixed some formatting bugs in the HOWTO, and a docstring for percentiles. He also added custom formatters for Pagerduty, and took over ownership of the riemann-tools repos.

Mike Vincent (agile) improved the graphite client's metric resolution.

bbatsov updated nrepl to 0.2.11.

Greg Look (greglook) fixed docstrings for the Slack adapter.

Ben Wilber (bwilber) and Jason Wilder (jwilder) fixed tag escaping in the InfluxDB client.

Joe Ray (joerayme) wrote a load-balancing DNS resolver for the graphite client.

Shani Elharrar (shanielh) wrote a docker tool.

krakatoa added an SQS monitor to riemann-tools.

Vincent Bernat (vincentbernat) added a warning message when an invalid logger format is given.

Alexander Petrovsky (juise) revamped the logger to use logback instead of log4j.

Michael Doyle (michaeldoyle) updated the UDP server to actually allocate enough memory to receive max-size packets.

Dante Briones (dbriones) removed nil custom attributes from the Riemann serializer.

Dams (Anvil) added several improvements to the Xymon adapter for customizable messages, and added a fill-in-last* stream taking an arbitrary function.

Jean Praloran (jeanpralo) added an insecure flag for allowing unsafe HTTPS certificates in the influx client.

Delweng Zheng (jsvisa) fixed up some weird logic in riemann-riak.

Brad Fritz (bfritz) added a -v flag for showing the version.

Michael Allman (mallman) updated Netty to 4.0.30.Final, and added a VictorOps integration point.

Leif Walsh (leifwalsh) fixed a bug in riemann-java-client's ChainPromise breaking delivery.

Carlo Alberto Ferraris (CAFxX) made performance improvements to the index in riemann-dash.

Stephen Gran (sgran) changed riemann-ruby-client to work on Windows.

Tim Buchwaldt (timbuchwaldt) added an influxdb line protocol.

Greg Fefelov (gfv) added a Geiger view to the dash, providing auditory feedback on incoming events, and also added tooltips to the Flot view.

Marc Fournier (mfournier) made improvements to the Slack client.


Michał Buczko (mbuczko) updated the InfluxDB 0.9 adapter to track Influx API changes.

Peter Neubauer (peterneubauer) helped the elasticsearch script deal with custom path prefices.

Zack Dever (zackdever) fixed the Slack integration to not escape the output of custom formatters.

Vladimir Koronev (vkorenev) fixed a compilation error in riemann-java-client.

krakatoa added a thread count service to the Freeswitch script.

Moshe Zada (MosheZada) fixed a broken docs link for the protobuf spec.

Vinicius Hana Scardazzi (viniciushana) fixed a broken docs link for the query grammar.

Pedro Araújo (pharaujo) expanded the opentsdb server to map tags to event fields, and updated the Netty server to respect -Dnetty.epoll.enabled.

Mauricio Scheffer (mausch) fixed a few typos in the docs.

Pierre-Yves Ritschard (pyr) updated (email) to accept both sequences and varargs for addresses.

Gergely Nagy (algernon) wrote a CLI dashboard: "potential happiness"

Amir Mohammad Saied (amir) added a Pushover client.

Jerry Peng (moonranger) fixed a semaphore leak in riemann-java-client.

Wesley Miao (wesleymiao) added a note about using `d` for deleting views to riemann-dash.

Pradeep Chhetri (pradeepchhetri) expanded the Slack formatter to include more fields.

Jan Jungnickel (jjungnickel) added support for Hipchat private servers and their v2 API.

Greg Look (greglook) added support for influxdb 0.9.

Chris Dillon (squarism) fixed some typos in riemann-ruby-client's README example.

Shlomi Sutton (shlomisut) added error handling for null Gauges in the Java client's Metrics reporter, and broke up riemann-java-client into separate artifacts.

Christophe Schmitz (joelapatatechaude) fixed a typo in the docs for async-queue.

Fabian Wernli (faxm0dem) and algernon put together a new SO_RECVBUF option for the UDP server.

Tom Crayford (tcrayford) added the list of matching processes to riemann-proc, and benchmarks to the Java client. He also added better error handling to (mailer), and instrumented index size.

Marc Fournier (mfournier) bumped the RPM JDK dependency to 1.7, and added the test/lookup function.

Mike Dillon (md5) added an environment variable for riemann-dash config files, and set up riemann-net to send expired events when interfaces disappear.

James Turnbull (jamtur01) helped improve documentation, including a massive series of blog posts and an intro to Clojure.

Itai Frenkel (itaifrenkel) changed `by` to release streams which receive an expired event.

Michal Sitko (note) fixed some broken docs in the riemann-java-client README.


Diego Zamboni (zzamboni) set up the dash gauges to show state strings where metrics are null.

rhysr fixed a typo in the howto.

Mike Dillon (md5) changed the riemann wrapper scripts to prefer Riemann's classpath.

Michaelangelo Mori (blkt) added a Boundary adapter.

Fawad Halim (fhalim) helped the influx adapter submit times as a part of each event.

Ivan Ramello (ramello) fixed a type error in riemann-dir-files-count's argument handling.

Mirwan expanded the Xymon adapter with better docs and correct TTL scaling.

Rob Ashton (robashton) extended the influx adapter to send custom fields.

Chris Blom (ChrisBlom) extended riemann-dash's graphs to cover negative metrics.

Michael Santos (msantos) fixed riemann's TCP server crashing on non-amd64 linux systems due to an arch incompatibility with the 64-bit native epoll wrapper.

Stefan Bacon (stefanbacon) fixed a typo in riemann-clojure-client's README.

James Turnbull (jamtur01) added support for Varnish 4.x to riemann-varnish, and added riemann-ntp to collect ntp peer stats. He's also helped improve documentation!

Alexander Petrovsky (juise) added a new stream: fixed-offset-time-window.

Peter Neubauer (peterneubauer) added HTTPS support to riemann-rabbitmq and fixed a ruby client issue on ruby 2.1.x and newer Beefcake releases. He also fixed an issue with riemann-rabbitmq and missing 'messages_ready' fields, and added riemann-rds.

Cory G Watson (gphat) added a keenio client to Riemann.

Ivan Ramello (iramello) added riemann-dir-files-count, which instruments the number of files in a directory.

Ben Fleis (benfleis) added dns caching options to riemann-clojure-client.

Marc Fournier (mfournier) fixed a bunch of permissions issues across the deb and rpm packages.

Aaron France (AeroNotix) bumped the clj-http version to 1.0.1, and added bindings to dump the current config in Riemann-dash. He also changed deprecation notices to only print once per callsite.

Pedro Araújo (pharaujo) fixed a bug in the CentOS/RHEL init scripts where they wouldn't say whether Riemann started or not.

Brad Fritz (bfritz) bumped the high-scale-lib dependency, which means we don't need to rely on the Boundary Maven repo any more.

Tom Crayford (tcrayford) changed exception events to preserve the original exception and triggering event, and changed travisci builds to preserve the maven cache.

Stephen Gran (sgran) bumped the clj-time dependency from 0.6.0 to 0.9.0.


Dante Briones (dbriones) fixed a bug where the TCP server assumed Linux syscalls were on every platform.

Ryan Kelln (RKelln) and Eric Lindvall (eric) fixed a riemann-ruby-client bug in UDP sends on Rubinius, added a ton of tests, and refactored a bunch of broken or confusing code. Woo!

Tom Crayford (tcrayford) added riemann-dir-space to track directory sizes, and extended exception events to include the causing event.


Andreas Klein (Kungi) fixed riemann-health's memory metrics on OS X Mavericks.

Tom Crayford (tcrayford) extended (with) to take sequences of events as well as single events, and optimized the case where (with) receives an empty map of updates.

Matt Palmer (mpalmer) added partition transfer events to riemann-riakm and dramatically expanded riemann-rabbitmq.

James Turnbull (jamtur01) clarified the quickstart docs around editing views, updated the example for service expiry, and wrote a howto on including configs. He also added documentation around (stable) in down service detection.

Pedro Araújo (pharaujo) wrote an OpenTSDB server for Riemann! Wow!

Sergey Avseyev (avsej) and Pascal Quantin wrote a dissector for Wireshark, enabling Riemann's protocol analysis.

Brian Jackson (iggy) expanded the docs for the slack integration.

Colin Alston (calston) fixed a typo in the slack docs.

John D'Agostino (johndagostino) added a Twilio adapter.

Andy Marks (andeemarks) got the dashboard tests passing again.

Sergey Avseyev (avsej) added Opsgenie integration.

Sebastian Cruz (default50) expanded riemann-freeswitch with thresholds and daemon liveness, and conference count.

Gergely Nagy (algernon) expanded riemann-riak-client to support node_gets_set, node_puts_set, and objsize stats. Gergely made a performance improvement to (sdo) which removes a stack frame and catch target for zero and single-arity forms. He also wrote a module to send log events to Riemann from Syslog-ng.

Katelyn Perry (kjperry) fixed plural agreement in Riemann-dash's socket errors.

Pradeep Chhetri (pradeepchhetri) added Cloudwatch and Datadog integration.

Dominic LoBue (dlobue) added Mailgun integration and submitted a failing test case for index state not persisting through reloads.

Erwan Miran (mirwan) wrote a Xymon adapter.

George Jahad (GeorgeJahad) fixed threadpool-service's docstring for default options, and mentioned that riemann.test doesn't work with reinject. George also contributed a BlueFlood adapter!

Marc Fournier (mfournier) added a dial view for gauges, and fixed a misclosed HTML tag in the dash. He also repaired an incorrect git tag, added an example rackup config, and fixed 404s for images when the dash isn't served on /. Then he tested and helped improve the Wireshark protocol dissector for Riemann!

Nebojša Stričević (strika) added Logentries integration.

Dominic LoBue changed Riemann to ignore logging initialization when a log4j configuration is already present.

Alexandre Viau (ReAzem) required shinken in the config by default.

Michael-Keith Bernard (SegFaultAX) extended (percentiles) to take maps of quantile to service suffix.

Daniel Compton (danielcompton) fixed a lying comment in riemann-net.

Dante Briones (dbriones) added the test command to the Riemann binaries.

Brian Lalor (blalor) changed the logstash adapter to send on events without metrics, too.

Benjamin Staffin (benley) improved the Debian package to be more compliant with the Debian linter.

Pierre Yves Ritschard (pyr) rewrote the websocket/sse server to replace Aleph with http-kit, and added dynamic dependency resolution to Riemann via Aether. He also added TCP batching to Collectd's write_riemann plugin, drastically improving performance when shipping events from Collectd.


Alexandre Viau (ReAzem) added Shinkan integration.

Pradeep Chhetri (pradeepchhetri) extended the influxdb adapter to take customizable series names, and added a stackdriver adapter.

Brian Lalor (blalor) extended streams/changed to pass the previous event to streams that take two arguments.

Eric Lindvall (eric) added pageup to the quick-help docs for the dash, changed the tests to run on a different port from Riemann normally, and fixed index preservation across reloads. Eric also fixed a bug in riemann-java-client's sendEventsWithAck, which improperly dereferenced a null.

Dante Briones (dbriones) updated (include) to only load .config and .clj files.

Benjamin Staffin (benley) fixed riemann-aws-billing.

Marc Fournier (mfournier) improved Riemann-dash, fixing typos, removing unneeded dependencies, and clarifying documentation for a better first-start experience.

Dimitrios Karagiannis (alkar) added an extended formatter to the Slack integration.

Vadim Platonov (dm3) improved Slack integration, adding extensive tests and custom formatters.

Joe Winter (jwinter) updated the tests for common/iso8601->unix.

Torbjörn Norinder (lwf) added configurable DNS caching to riemann-java-client.

Lei (tendant) added documentation for TLS connections and extended riemann-clojure-client to support strings and resources for SSL parameters.

Max Thoursie (maxthoursie) fixed a typo in the docs for invoking streams manually.

Ulises (ulises) documented the use of sets as match predicates in (where).

Kurt Stoll (kurtstoll) added support for matching maps in where, match, split, etc.

Danielle Sucher (DanielleSucher) wrote streams/ewma: a time-aware exponentially weighted moving average.


Ali Asad Lotia (lotia) changed graphite-server to accept messages from misbehaving clients that emit tabs or multiple spaces as separators.

Greg Zapp (ProTip) fixed a docstring for graphite-server.

stanislas added support for OSGI environments to the riemann-java-client packaging rules.

senoctar fixed a bug in riemann-java-client which ignored custom attributes during event DSL creation.

Torbjörn Norinder (lwf) added pluggable storage backends to riemann-dash.

Zach Leslie (xaque208) fixed riemann-health's load average parsing on freebsd.

Victor Voisin (vvision) fixed the logstash client, which didn't separate its lines with line separators.

Eric Lindvall (eric) reworked the Ruby client's handling of timeouts and dropped network connections, and added an optimized path for queries for a particular host and service.

Pradeep Chhetri (pradeepchhetri) added an OpenTSDB and Influx client.

dgrnbrg changed (coalesce) to submit coalesced events downstream every dt seconds; a significant performance improvement.

Ben Agricola (benagricola) added a maximum to the Flot view.

Sebastian Blask (sblask) helped fix a bug in the logger which prevented users from disabling console logging, and improved the Graphite server's handling of malformed lines.

Marc Falzon (falzm) fixed a typo in the howto.

Ben Pillet (benpillet) improved error handling and the parser flexibility in graphite-server, and added additional tests.

Dominic LoBue (dlobue) updated riemann-java-client to Yammer metrics 3.

Arthur Gautier (baloo) added a stream to dump data to KairosDB.

Christopher Merrick (cmerrick) added support for dashes in device names to riemann-diskstats.

Jorge Espada (jespada) fixed a broken link to the test suite from the docs and added riemann-aws-billing to riemann-tools. Jorge also added a size-based log rotation option, and changed the dashboard to use a modifier key for editing views.

Bobby Ryterski changed the RPM package to load bash options from /etc/sysconfig, instead of the debian-style /etc/default.

Antonio Terreno (aterreno) added a Zookeeper plugin to riemann-tools.

Sam Clements (borntyping) extended the grid to show states where no metric is available, and limited the dash's log size.

Tom Crayford (tcrayford) added a proper error message for a riemann-yava-client batching issue, and made RiemannReporter able to use any Riemann client. He also made a correction to streams/coalesce's docstring, and fixed riemann-proc's escaping of grep args.

Drew Michel (dmichell) added an apache httpd checker to riemann-tools.

Matt Enright (wickedshimmy) pointed out a typo in the clj-librato dep on master.

Hugo Duncan (hugoduncan) added persistent connection support to Librato Metrics.

Mark Feeny (overthink) improved the tests for riemann-clojure-client.

John-John Tedrro (udoprog) cleaned up riemann.time/control-time, and expanded the documentation for riemann.streams. He also helped fix issues in the websocket server's error handling, and a divide-by-zero error for events with nil metrics in folds/mean.

Pierre Yves Ritschard (pyr) added a slew of new logging parameters, and added IFn and delete-on-expire support to the index. Pierre also helped clean up a bunch of old issues, improved docstrings, and fixed a bug causing the local hostname to throw when DNS failed, *and* helped with changes to the index supporting IFn. To make matters worse, he committed performance improvements to streams/changed, sum-over-time, part-time-fast-interval, mean-over-time, and several other--followed by new docs for creating events within streams, and better errors for events indexed without a time.

Gavin Sandy (gsandie) included hipchat in riemann.config, and wrote an adapter for

Gergely Nagy (algernon) added regex support to the query engine and wrote a C client.

Danielle Sucher wrote folds/count, and fixed a bug related to missing times on newly created events.

Marc Fournier (mfournier) fixed a bug in riemann-dash event expiry and fixed some conffile issues in the rhel/deb packages. He fixed a longstanding bug in the dashboard; now it correctly expires events even when Riemann doesn't send expirations as a part of the query. Marc also adjusted the rendering of expired events in the dash, and helped update the RPM and Debian packages, plus the clients page of He updated the docstring for (coalesce) as well. Rock on!

Fabien Wernli (faxm0dem) fixed a bug in riemann-dash which caused null metrics to be rendered as 0.

Max Newbould fixed a regression in riemann-redis due to the Beefcake frozen-string bug.


Marc Fournier (mfournier) updated several links in the documentation and added new tools to the clients page.

Kanak Biscuitwala (kanakb) set an explicit AOT classname for riemann.bin.

Richo Healey (richo) fixed a typo in the readme link to riemann-clojure-client.

Ashton Kemerling and NeoTyk started work on better testing of configs.


Ryan Berdeen (also) fixed a typo in the docstring for transport/websockets.clj

Dick Davies (rasputnik) wrote riemannq, for running queries from the shell.

Patrick Bohan (arkban) fixed the riemann-java-client readme omitting connect();

Brian Hatfield (bmhatfield) added additional .err, .warn, .failure state colors to the dash.

Philippe Hanrigou pointed out a typo in the howto.

Pierre Yves-Ritschard (pyr) added a server-side-events transport to Riemann, and support in the dash. He fixed some edge cases in folds, and added a plugins system for the config.

Christopher Merrick (cmerrick) added riemann-proc, for monitoring process status, to riemann-tools.

Michael Fairley fixed the incorrect use of :host instead of :bind for riemann-dash's Sinatra config.

Jan Brauer (Bracki) added an NSCA client for forwarding state to Nagios.

tjake added a logstash client!

ucb pointed out minor bugs in index expiry (not binding default ttls correctly) and in riemann.pool (always setting :block-start true).

Eric Lindvall fixed an outdated reference to TcpClient in the riemann-java-client readme.

Mark Feeney (overthink) fixed a typo in the Debian init script sourcing /etc/defaults instead of /etc/default.

Harry Brundage (hornairs) added stacked plots and bar graphs to riemann-dash.

Joscha (schnipseljagd) tracked down and fixed a bug causing graphite-server to not start.

Jan Brauer (bracki) fixed an issue with start-stop-daemon on older Debian versions.

Turre Laurinolli (tazle) added a simple UDP transport to riemann-java-client.

Federico Borgnia (fborgnia) added a MySQL status check to riemann-tools.

Marc Fournier (mfournier) changed the dash to display human-readable times for events, and fixed a typo in the howto example for (adjust).

Jeroen van Dijk helped fix an error in the howto's "count number of hosts" example.

Hubert Iwaniuk (neotyk) added tag support to riemann-java-client's Yammer Metrics adapter, and expanded the range of exceptions caught by exception-stream to include all Throwables. Hubert also added support for Hipchat integration to Riemann.

dcjackson pointed out a typo in riemann.client's docstring.

Bitprophet helped fix a typo in the streams docstring.

justwrote changed out riemann-dash's URIs to use relative paths.

Tin Tvrtković (Tinche) improved riemann-dash's shortening of host and service names.

Narrative-joe changed the riemann-redis states to be more descriptive.

Tazle fixed a disconnect() before open state bug in riemann-java-client, and added an exception callback handler. He also added the source and javadocs to the pom.

Chillitom fixed a bug preventing Riemann from starting on Windows, and added a std-dev fold. He also added commas to Riemann's cell renderer.

Sam Neubardt (samn) added custom attributes to the email and SNS notifications.

Paul Goldbaum extended riemann.config/include to load directories as well as specific files.

Markus Burger (mburger) fixed the debian binary's classpath variable.

Andreas (asemt) changed the package md5sums to use relative paths.

Gavin Sandie (gsandie) added documentation about the REPL and hot code reloading, and wrote an elasticsearch monitoring plugin. He also improved the Resmon script's connection handling, and added health status to riemann-nginx. And now he's gone and written a RabbitMQ monitoring plugin too; and added cloudwatch integration to riemann-tools. The guy's unstoppable!

Ben Mabey (bmabey) fixed a typo in the docs, and bumped Clojure to 1.5.1.

Brian Wong (bwong114) improved the Librato Metrics adapter by adding support for sending batches of events at once.

Drew Searcy (supersix4our) added HTTPS support to riemann-riak.


Sam Neubardt (samn) fixed a really confusing bug where (where (tagged-any ...)) behaved unexpectedly.

Tilman Holschuh helped fix a typo in riemann's documentation.

odiszapc added numpad +/- keybindings to riemann-dash.

Pierre Yves-Ritschard (pyr) added streams/scale and made it easier to add custom JARs and JVM options when using bin/riemann.

vadv helped fix a bug in riemann-ruby-client's connected? method.

Torbjörn Norinder (lwf) helped clean up dead code in riemann-tools, and added timeouts to riemann-tools, allowing the client to reconnect when using TCP. Torbjörn also added a List view to the dash.

William Roe (wjlroe) explained how to match tags against expired events in the howto.

Michael Allman (mallman) improved riemann-java-client: reporters can now take a client directly.

Dave Cottlehuber (dch) changed the dash to show expired events in purple, and bumped nrepl to 0.2.2.

Torbjörn Norinder (lwf) added custom attributes to riemann-tools.

Michael Hood fixed a bug in query escaping for riemann-dash.

Sebastian Cruz (default50) added riemann-freeswitch for monitoring calls and channels in FreeSWITCH

Gavin Sandie contributed a howto article on finding a fraction of events over a time period, added configurable FQDN behavior to riemann-resmon, and added a connect timeout to the ruby client. He also added campfire integration to Riemann proper. He also updated riemann-net to report TX errors on interfaces.

Robert Rees added index/lookup, for fetching specific events from the index, and extended the quickstart docs to help newbies learn about streams.

Benjamin Anderson added type hints to the graphite client.

Bhuwan added configurable erlang cookies to riemann-riak.

Jegt caught a typo in riemann-riak's http status check.

Brian Hicks added riemann-nginx for monitoring Nginx status.

Kevin Nuckolls (knockolls) and Matt Blair (mblair) helped untangle Riemann's java dependencies on Debian systems.

Marica Odagai (ento) made a ton of improvements to his amazon-sns module for Riemann.

Richo Healey (richo) fixed a bug in get-string-bytes's UTF-8 handling.

Simon Hildrew (sihil) fixed a bug in streams/where* evaluating its children on each event, added a UDP transport to graphite-server,

Hawk Owl wrote a Twisted Python client and helped fix broken documentation.

Zach Tellman was a huge help in fixing Lamina and Aleph issues, and in writing the HTTP PUT handler.


Leandro López (inkel) added a Redis SLOWLOG checker to riemann-tools.

Andrew Grangaard (spazm) helped improve the README and CONTRIBUTING files, and docstrings in riemann.folds.

Brian Hatfield added a run detection stream.

Gavin Sandie added an option to riemann-health to control which checks are run, and helped merge Torbjörn Norinder (lwf)'s AWS-status commit.

Marica Odagaki (ento) added an Amazon Simple Notification Service adapter.

Banjiewen swapped out riemann.pool's queue from ArrayBlockingQueue to LinkedBlockingQueue, and ensured (:streams core) is never lazy.

Matt Blair fixed a broken lamina dependency in 0.2.0, added Java to the debian dependencies, and helped improve the debian package's reload behavior. He also added tests for Brian Hatfield's (runs) stream.

Jonas Tehler (jegt) helped add custom attributes to riemann-ruby-client.


Gavin Sandie (gsandie) made the riemann-tools resmon plugin more robust.

pdmct helped build pivotable grid views for the dash.

Matt Blair added an emacs modeline to the riemann configs.

Roman H (mindreframer) did a fantastic job cleaning up the dashboard's ruby code, improving configurability, and adding tests.

Dave Cottlehuber (dch) added some extra states to the dashboard CSS.

Sebastian Probst Eide wrote an Erlang client.

Thomas Omans (eggsby) made sweeping improvements to riemann-dash, including timeseries charts, typo fixes, UI polish, adding pushState logic for workspaces, and more. He added a configuration option for the dashboard's json store, as well as pivotable grid views.

Goblin added a ResMon adapter to riemann-tools.

Camshaft wrote two node.js libraries: simple-riemann, a client, and riemann-response-time, an instrumentation middleware.

Tim Shadel added a local hostname override to all riemann-tools.

Bip Thelin added fallback to riak-admin for riemann-riak, and fixed a bug causing riemann-tools to report nil hosts when no --event host was specified.

Amir Mohammad Saied wrote a Go client.

Magnus Holm pointed out some problems with the howto.

Aaron Feng wrote a howto post about working with the dashboard.

Franck Cuny added basic memcached monitoring to riemann-tools, added a help popup to riemann-dash, a few keybindings, and documentation fixes.

Peter Scott consolidated the different Netty executor pools and changed repl/start-server! to take a hashmap instead of flat kv pairs. He also helped fix a bug in graphite-server.

Guilherme Manika (gmanika) tracked down a Netty bug causing Riemann to leak connections in CLOSE_WAIT, and pointed out a transient bug in streams/coalesce on master.

Ben Black (b6n) added arbitrary key-value pairs to the protocol, ruby client, java client, and clojure client.

Peter Scott fixed a method name in graphite-server.

Dave Parfitt (metadave) wrote an OCaml client.

richardg helped track down a bug in the Librato metrics name-escaping function.

benmur fixed a nomethoderror on the dash.

lwf added exception handling to the index reaper thread and added UDP support to the Graphite client. He also extended (delete-from-index) to delete classes of similar events, and helped with the riemann-java-client update, ensuring compatibility with Java 6.

Rached Ben Mustapha wrote a Scala client.

Tyler Schuett helped design Riemann's visual identity.

Daniel Hilst wrote a C client.

Miquel Ruiz wrote a Perl client.

clee fixed some missing endquotes in the howto.

dgtized fixed a typo in riemann-riak.

Manos fixed a paren mismatch in the howto.

Pierre-Yves Ritschard (pyr) formalized the protocol for riemann servers and split up the riemann.server namespace into distinct, modular transports. He suppressed the unnecessary close-channel logging messages from the TCP server. Pyr added streams/stream for composing streams together, and streams/split, split*, and splitp for branching conditionals. And riemann-puppet-ring. And riemann-mysql. As if that wasn't enough, he added debian package timestamps for snapshot builds. Jeez that guy's been busy! :D


Ben Firshman reported a critical bug in (where).


jib and lwf pointed out that Cheshire would fix some JSON encoding problems.

jib and hhenkel reported issues with various JVM flags.

Dave Cottlehuber (dch) changed riemann-health to report comm instead of full process args in cpu descriptions.

Pierre-Yves Ritschard (pyr) put together a simple Riemann grid at Exoscale, corrected documentation on lein run, and fixed a bug in graphite-server.


Jos Bourmans (jib) helped clarify Riemann's documentation, fixed streams, and made /usr/bin/riemann properly exec java.

Henrik Nordvik (zerd) fixed a few bugs in riemann-health's OS X support.

Banjiewen fixed a memory leak in moving-event-window, and reworked the Netty socket handler.

David J Rusek wrote a new Java client for Riemann, based on Netty and Guaava futures.

Pierre-Yves Ritschard improved (coalesce), cleaned up some code in riemann.common, added Travis-CI support, a Graphite-compatible server, and improved performance of pubsub. He added performance tests for the index.

William Jimenez added a KVM monitor to riemann-tools.

lwf added custom tags to riemann-tools, as well as riemann-diskstats.

Derek Perez added Redis, Haproxy, and Cloudant monitors to riemann-tools, plus countless other commits. Rock on, man!

Carl Yeksigian of Blue Mountain Capital published a C# client.

Jake Luciani of Blue Mountain Capital contributed a Cassandra watcher.

Ben Black contributed streams for fast reduction of events and metrics over time, experimented with integrating Parallel Colt, and suggested windowing API ideas.

Gareth Rushgrove made it easier for folks to get started with Riemann-dash by fixing typos, adding 1.8 compatibility, and writing a puppet module.

Edward Ribeiro refactored riemann-java-client's reporting and helped find bugs in riemann-java-client's rewrite.

Derek Perez wrote a node.js client

Joeseph Abrahamson, of Reify Health, wrote an Erlang client: Zeta.

Joe Caswell added FreeBSD and Darwin support to riemann-health.

Michael Klishin (antares) helped get Riemann's build process up to speed with Leiningen 2.


Michael Bernstein (mrb) got Riemann running on Clojure 1.4 and Lein2.

Brian Shumate corrected a non-portable shebang line.

Jeremy Carroll pointed out my evil lies in the configuration guide.


Michael Fairley added a hostname override to RiemannReporter.

Edward Ribeiro improved concurrency in the Java client and fixed lots of little bugs, misphrasings, and typos.

Tom Crayford pointed out a typo.

Benjamin Anderson (banjiewen) wrote a new Python client.

Steve Losh (sjl) wrote streams/fill-in-last and polished several rough edges in common, streams, and periodic. Steve also expanded the adjust stream to take a function which arbitrarily transforms entire events.

Mårten Gustafson started work on the Java client, added timeouts, and tests.

Paul Butcher fixed a typo in the quickstart.

Obfuscurity and Lusis contributed ideas for HA failover and peer discovery.

Lusis wrote an adapter between logstash and Riemann.

Eric Lindvall (lindvall) updated riemann-ruby-client to be 1.8-compatible.


#flatland, #clojure and #leiningen, including jodaro, ninjudd, raynes, and amalloy, helped with protobufs parsing, leiningen, and general Clojure questions.

Showyou, my employer, gave me the infrastructure I needed Riemann for, and the chance to share it with the world.

John Mullerleile (jrecursive) was deeply involved in talking through the concept and structure of Riemann, as well as advice around the JVM and profiling.

C Scott Andreas (cscotta) and the Boundary crew gave many helpful suggestions around the JVM, Maven, high_scale_lib, and profiling. Our conversations yielded many references, algorithms and ideas.

Allen Rohner (arohner) on #clojure offered a logging configuration snippet.

Ryan Grove and Sean Cribbs gave feedback on documentation and design.

Reid Draper contributed a syntactic patch.

Sam Newman (snewman) brought Riemann up to speed with Clojure 1.3.

Tyler Schuett offered graphic design advice.

Gleicon wrote the Python client.