Skip to content

Introducing tritondigital-counters: practical application monitoring for the JVM

by Julien on June 7th, 2015

Une version française de ce billet est disponible ici.

There are a quite a lot of systems available to monitor applications at scale. On the backend side, well established players are OpenTSDB, Datadog, or InfluxDB. They allow applications with hundreds of instances to publish various metrics and later on, analyze them.

Unfortunately, most of the client integrations have several issues:

  • Tied up: the client APIs are specific to each individual system. Switching systems or publishing to multiple systems requires maintaining all of your applications.
  • Performance: most the client APIs is calling the backend each time you update a metric. Obviously, if you have busy applications whith thausends of transactions per seconds, this is not reaslistic.
  • Overhead: most the client APIs are using blocking IO. Again, for applications with high throughput, this is a limiting factor.

On the other end of the spectrum, some popular clients APIs are doing a great job locally in the application. In particular, the Codahale Metrics are popular due to their simplicity and outstanding performance. However, they have some drawbacks as well:

  • No backend: if you have multiple application instances, it will be difficult to have an aggregate view of your metrics.
  • No tags: most of the backends back-end systems support the dynamic addition of custom tags each time you increment or update a metric. But unfortunately, Codahale does not.

This is why at Triton Digital, we developped a simple library to answer to all those concerns. It is used in production for approximately 8 months now. We are exited to Open Source it today!

Here are some highlights:

  • Multiple backends: it can support a variety of backends. Currently, it supports Datadog and Logback (for debugging purposes). Initially, it also supported OpenTSDB, if you are interested drop me a line, we can plug it back in.
  • Low overhead: 100% asynchronous and non blocking IO, based on akka-io. It is also using Codahale Metrics to keep current values between publication rounds. Backends are called only every 15 seconds with a dump of all metrics. This is allowing for application to not worry about how many times they update their metrics.
  • Tags: It is using an API close to the Codahale Metrics one’s, except it supports dynamic custom tags.
  • For the JVM: Developped in Scala, but with a friendly JAVA API that should fit all the JVM languages.

The library is available in Maven Central. You can find the code source and documentation on GitHub:

tritondigital-counters on Github

Please don’t hesitate to ask questions, feature requests, or submit bugs on GitHub.

From → Uncategorized

One Comment
  1. With so many application monitoring tools being launched every year, finding the best one that suits your IT needs can sometimes become a challenge. There might be a great one but its too expensive to acquire by small scale IT industry.

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS