Fork me on GitHub

Release Notes

Please refer to the GitHub releases for the latest releases of Dropwizard Metrics.

v4.0.0: Dec 24 2017

  • Compiled and targeted JDK8

  • Support for running under JDK9 #1236

  • Move JMX reporting to the metrics-jmx module

  • Add Bill of Materials for Metrics #1239 #1239

  • Used Java 8 Time API for data formatting

  • Removed unnecessary reflection hacks for HealthCheckRegistry

  • Removed internal LongAdder

  • Removed internal ThreadLocalRandom

  • Optimized generating random numbers

  • Timer.Context now implements AutoCloseable

  • Upgrade Jetty integration to Jetty 9.4

  • Support tracking Jersey filters in Jersey resources #1118

  • Add ResponseMetered annotation for Jersey resources #1186

  • Add a method for timing non-throwing functions. #1224

  • Unnecessary clear operation for ChunkedAssociativeArray #1211

  • Add some common metric filters #1210

  • Add possibility to subclass Timer.Context #1226

v3.2.6: Dec 24 2017

  • Jetty9: unhandled response should be counted as 404 and not 200 #1232

  • Prevent NaN values when calculating mean #1230

  • Avoid NaN values in WeightedSnapshot #1233

v3.2.5: Sep 15 2017

  • [InstrumentedScheduledExecutorService] Fix the scheduledFixedDelay to call the correct method #1192

v3.2.4: Aug 24 2017

  • Fix GraphiteReporter rate reporting #1167

  • Remove non Jdk6 compatible letter from date pattern #1163

  • Fix uncaught CancellationException when stopping reporter #1170

v3.2.3: Jun 28 2017

  • Improve ScheduledReporter convertDurations precision #1115

  • Suppress all kinds of Throwables raised by report() #1128

  • ExponentiallyDecayingReservoir was giving incorrect values in the snapshot if the inactive period was too long #1135

  • Ability to get default metrics registry without an exception #1140

  • Ability to get default health check registry without an exception #1152

  • SlidingTimeWindowArrayReservoir as a fast alternative of SlidingTimeWindowReservoir #1139

  • Avoid a NPE in toString of HealthCheck.Result #1141

v3.1.5: Jun 2 2017

  • More robust lookup of ThreadLocal and LongAdder on JDK6 (e.g. WebLogic) #1136

v3.2.2: Mar 20 2017

  • Fix creating a uniform snapshot from a collection #1111

  • Register metrics defined at Resource level #1105

v3.2.1: Mar 10 2017

  • Support for shutting down the health check registry. #1084

  • Added support for the default shared health check registry name #1095 #1095

  • SharedMetricRegistries are now thread-safe. #1094

  • The size of the snapshot of a histogram is reported via JMX. #1102

  • Don’t ignore the counter attribute for reporters. #1090

  • Added support for disabling attributes in ConsoleReporter. #1092

  • Rollbacked GraphiteSanitize to replacing whitespaces. #1099

v3.1.4: Mar 10 2017

  • Fix accidentally broken Graphite UDP reporter #1100

v3.2.0: Feb 24 2017

  • GraphiteReporter opens a new TCP connection when sending metrics instead of maintaining a persisted connection. #1047

  • GraphiteReporter retries DNS lookups in case of a lookup failure. #1064

  • ScheduledReporter suppresses all kind of exceptions raised by the report method. #1049

  • JDK’s ThreadLocalRandom is now used by default. #1052

  • JDK’s LongAdder is now used by default. #1055

  • Fixed a race condition bug in ExponentiallyDecayingReservoir. #1033

  • Fixed a long overflow bug in SlidingTimeWindowReservoir. #1063

  • AdminServlet supports CPU profiling. #927

  • GraphiteReporter sanitizes metrics. #938

  • Support for publishing BigInteger and BigDecimal metrics in GraphiteReporter. #933

  • Support for publishing boolean metrics in GraphiteReporter. #905

  • Added support for overriding the format of floating numbers in GraphiteReporter. #1073

  • Added support for disabling reporting of metric attributes. #1048

  • Reporters are more user friendly for managed environments like GAE or JEE. #1018

  • Support for setting a custom initial delay for reporters. #999

  • Support for custom details in a result of a health check. #663

  • Added a listener for health checks. #1068

  • Support for asynchronous health checks #1077

  • Health checks are reported as unhealthy on exceptions. #783

  • Allow setting a custom prefix for Jetty’s InstrumentedQueuedThreadPool. #947

  • Allow setting custom prefix for Jetty’s QueuedThreadPool. #908

  • Added support for Jetty 9.3 and higher. #1038

  • Fixed instrumentation of Jetty9 async servlets. #1074

  • Added support for JCache/JSR 107 metrics. #1010

  • Added thread-safe getters for metrics with custom instantiations. #1023

  • Added an overload of Timer#time that takes a Runnable. #989

  • Support extracting the request URI from wrapped requests in HttpClientMetricNameStrategies. #947

  • Support for the log4j2 xml-based config. #900

  • Internal Striped64 doesn’t depend on sun.misc.Unsafe anymore. #966

  • Optimized creation of UniformSnapshot. #970

  • Added a memory pool gauge to the JVM memory usage metrics. #786

  • Added support for async servlets for metric-servlet. #796

  • Opt-in default shared metric registry. #801

  • Added support for patterns in MBean object names #809

  • Allow a pluggable strategy for the name of the CSV files for CsvReporter. #882

  • Upgraded to slf4j 1.22

  • Upgraded to Jackson 2.6.6

  • Upgraded to amqp-client 3.6.6

  • Upgraded to httpclient 4.5.2

  • Upgraded to log4j2 2.3

  • Upgraded to logback 1.1.10

v3.1.3: Feb 24 2017

  • GraphiteReporter opens a new TCP connection when sending metrics instead of maintaining a persisted connection. #1036

  • GraphiteReporter retries DNS lookups in case of a lookup failure. #1064

  • ScheduledReporter suppresses all kind of exceptions raised by the report method. #1040

  • JDK’s ThreadLocalRandom is now used by default. #1052

  • JDK’s LongAdder is now used by default. #1055

  • Fixed a race condition bug in ExponentiallyDecayingReservoir. #1046

  • Fixed a long overflow bug in SlidingTimeWindowReservoir. #1072

v3.1.0: Sen 10 2014!topic/metrics-user/zwzHnMBcAX4

  • Upgrade to Jetty 9.1 (metrics-jetty9, Jetty 9.0 module renamed to metrics-jetty9-legacy)

  • Add log4j2 support (metrics-log4j2)

  • Upgrade to Jersey2 (metrics-jersey2)

  • Add httpasyncclient support (metrics-httpasyncclient)

  • Changed maven groupId to io.dropwizard.metrics

  • Enable Java8 builds on Travis, fix javadocs and disable some doclinting

  • Fixing some compilation warnings about missing generics and varargs invocation

  • Instrumentation for java.util.concurrent classes

  • ExponentiallyDecayingReservoir: quantiles weighting

  • Loosen type requirements for JmxAttributeGauge constructor

  • SlidingWindowReservoir - ArrayOutOfBoundsException thrown if # of Reservoir examples exceeds Integer max value

  • Classloader metrics

  • Add an instrumented ScheduledExecutorService

  • Fix race condition in InstrumentedThreadFactoryTest

  • Correct comparison of System.nanoTime in SlidingTimeWindowReservoir

  • Add SharedHealthCheckRegistries class

  • Migrate benchmarks from Caliper to JMH

  • New annotations: @CachedGauge, @Counted, @Metric

  • Support for annotations on classes and constructors

  • Allow @Metric on methods and parameters

  • Add @Inherited and @Documented on all type annotations

  • Adapted ehcache integration to latest ehcache version 2.8.3

  • Upgrade to HttpClient 4.3

  • InstrumentedHandler: Remove duplicate calls to requests.update(…)

  • New metric ‘utilization-max’ to track thread usage out of max pool size in jetty

  • Replaced Jetty-specific Request with Servlet API interfaces

  • Jetty 8: Avoid NPE if InstrumentedQueuedThreadPool gauges are read too early

  • Jetty 8: Call updateResponses onComplete of ContinuationListener

  • Allow specifying a custom prefix Jetty 9 InstrumentedHandler

  • MetricsModule is serializing wrong minute rates for timers

  • MeterSerializer.serialize had m1_rate and m15_rate transposed

  • Add CachedThreadStatesGaugeSet

  • Monitor count of deadlock threads

  • Prevent exceptions from ThreadDumpServlet on Google AppEngine

  • Upgrade to logback 1.1.1

  • Allow InstrumentedAppender use in logback.xml

  • Use getClass() in place of AbstractInstrumentedFilter.class in generated metric names

  • Update MetricsServlet with support for JSONP as alternative to CORS

  • Specify the base name of the metrics as a filter init-param for the metrics captured in the AbstractInstrumentedFilter

  • Add option to provide MetricFilter to MetricsServlet

  • AdminServlet generates link to pretty printed healthchecks

  • MetricsServlet.ContextListener doesn’t initialize the context correctly

  • Every reporter implements Reporter interface to indicate that is a Reporter

  • Added support for passing a ScheduledExecutorService to ScheduledReporters

  • Improve the ScheduledReporter#stop method

  • Ensure ScheduledReporters get unique thread pools.

  • Suppress runtime exceptions thrown from ScheduledReporter#report

  • Ability to inject a factory of ObjectName

  • Lazy fetch of PlatformMBeanServer

  • JMX Reporter throws exception when metric name contains an asterisk

  • onTimerRemoved in JmxListener calls registered.add

  • Support for mBean servers that rewrite the supplied ObjectName upon registration

  • Graphite reporter does not notify when Graphite/Carbon server is unreachable

  • Persistent connections to Graphite

  • Graphite constructor accepts host/port

  • Graphtie Pickle sender

  • Graphite UDP sender

  • Graphite AMQP sender

  • Add a threshold/minimum value to report before converting results to 0

  • Report to multiple gmetric instances

  • Escape slahes on ganglia metric names

  • Upgrade slf4j to 1.7.6

  • Enhancement for logging level option on Slf4jReporter

v3.0.1: Jul 23 2013

  • Fixed NPE in MetricRegistry#name.

  • ScheduledReporter and JmxReporter now implement Closeable.

  • Fixed cast exception for async requests in metrics-jetty9.

  • Added support for Access-Control-Allow-Origin to MetricsServlet.

  • Fixed numerical issue with Meter EWMA rates.

  • Deprecated AdminServletContextListener in favor of MetricsServlet.ContextListener and HealthCheckServlet.ContextListener.

  • Added additional constructors to HealthCheckServlet and MetricsServlet.

v3.0.0: June 10 2013

  • Renamed DefaultWebappMetricsFilter to InstrumentedFilter.

  • Renamed MetricsContextListener to InstrumentedFilterContextListener and made it fully abstract to avoid confusion.

  • Renamed MetricsServletContextListener to AdminServletContextListener and made it fully abstract to avoid confusion.

  • Upgraded to Servlet API 3.1.

  • Upgraded to Jackson 2.2.2.

  • Upgraded to Jetty 8.1.11.

v3.0.0-RC1: May 31 2013

  • Added SharedMetricRegistries, a singleton for sharing named metric registries.

  • Fixed XML configuration for metrics-ehcache.

  • Fixed XML configuration for metrics-jersey.

  • Fixed XML configuration for metrics-log4j.

  • Fixed XML configuration for metrics-logback.

  • Fixed a counting bug in metrics-jetty9’s InstrumentedHandler.

  • Added MetricsContextListener to metrics-servlet.

  • Added MetricsServletContextListener to metrics-servlets.

  • Extracted the Counting interface.

  • Reverted SlidingWindowReservoir to a synchronized implementation.

  • Added the implementation version to the JAR manifests.

  • Made dependencies for all modules conform to Maven Enforcer’s convergence rules.

  • Fixed Slf4jReporter’s logging of 99th percentiles.

  • Added optional name prefixing to GraphiteReporter.

  • Added metric-specific overrides of rate and duration units to JmxReporter.

  • Documentation fixes.

v3.0.0-BETA3: May 13 2013

  • Added ScheduledReporter#report() for manual reporting.

  • Fixed overly-grabby catches in HealthCheck and InstrumentedResourceMethodDispatchProvider.

  • Fixed phantom reads in SlidingWindowReservoir.

  • Revamped metrics-jetty9, removing InstrumentedConnector and improving the API.

  • Fixed OSGi imports for sun.misc.

  • Added a strategy class for HttpClient metrics.

  • Upgraded to Jetty 9.0.3.

  • Upgraded to Jackson 2.2.1.

  • Upgraded to Ehcache 2.6.6.

  • Upgraded to Logback 1.0.13.

  • Upgraded to HttpClient 4.2.5.

  • Upgraded to gmetric4j 1.0.3, which allows for host spoofing.

v3.0.0-BETA2: Apr 22 2013

  • Metrics is now under the com.codahale.metrics package, with the corresponding changes in Maven artifact groups. This should allow for an easier upgrade path without classpath conflicts.

  • MetricRegistry no longer has a name.

  • Added metrics-jetty9 for Jetty 9.

  • JmxReporter takes an optional domain property to disambiguate multiple reporters.

  • Fixed Java 6 compatibility problem. (Also added Java 6 as a CI environment.)

  • Added MetricRegistryListener.Base.

  • Switched Counter, Meter, and EWMA to use JSR133’s LongAdder instead of AtomicLong, improving contended concurrency.

  • Added MetricRegistry#buildMap(), allowing for custom map implementations in MetricRegistry.

  • Added MetricRegistry#removeMatching(MetricFilter).

  • Changed metrics-json to optionally depend on metrics-healthcheck.

  • Upgraded to Jetty 8.1.10 for metrics-jetty8.

v3.0.0-BETA1: Apr 01 2013

  • Total overhaul of most of the core Metrics classes:

    • Metric names are now just dotted paths like com.example.Thing, allowing for very flexible scopes, etc.

    • Meters and timers no longer have rate or duration units; those are properties of reporters.

    • Reporter architecture has been radically simplified, fixing many bugs.

    • Histograms and timers can take arbitrary reservoir implementations.

    • Added sliding window reservoir implementations.

    • Added MetricSet for sets of metrics.

  • Changed package names to be OSGi-compatible and added OSGi bundling.

  • Extracted JVM instrumentation to metrics-jvm.

  • Extracted Jackson integration to metrics-json.

  • Removed metrics-guice, metrics-scala, and metrics-spring.

  • Renamed metrics-servlet to metrics-servlets.

  • Renamed metrics-web to metrics-servlet.

  • Renamed metrics-jetty to metrics-jetty8.

  • Many more small changes!

v2.2.0: Nov 26 2012

  • Removed all OSGi bundling. This will be back in 3.0.

  • Added InstrumentedSslSelectChannelConnector and InstrumentedSslSocketConnector.

  • Made all metric names JMX-safe.

  • Upgraded to Ehcache 2.6.2.

  • Upgraded to Apache HttpClient 4.2.2.

  • Upgraded to Jersey 1.15.

  • Upgraded to Log4j 1.2.17.

  • Upgraded to Logback 1.0.7.

  • Upgraded to Spring 3.1.3.

  • Upgraded to Jetty 8.1.8.

  • Upgraded to SLF4J 1.7.2.

  • Replaced usage of Unsafe in InstrumentedResourceMethodDispatchProvider with type erasure trickery.

v2.1.5: Nov 19 2012

  • Upgraded to Jackson 2.1.1.

v2.1.4: Nov 15 2012

  • Added OSGi bundling manifests.

v2.1.3: Aug 06 2012

  • Upgraded to Apache HttpClient 4.2.1.

  • Changed InstrumentedClientConnManager to extend PoolingClientConnectionManager instead of the deprecated ThreadSafeClientConnManager.

  • Fixed a bug in ExponentiallyDecayingSample with long periods of inactivity.

  • Fixed problems with re-registering metrics in JMX.

  • Added support for DnsResolver instances to InstrumentedClientConnManager.

  • Added support for formatted health check error messages.

v2.1.2: Apr 11 2012

  • Fixed double-registration in metrics-guice.

v2.1.1: Mar 13 2012

  • Fixed instrumentation of all usages of InstrumentedHttpClient.

v2.1.0: Mar 12 2012

  • Added support for Java 7’s direct and mapped buffer pool stats in VirtualMachineMetrics and metrics-servlet.

  • Added support for XML configuration in metrics-ehcache.

  • metrics-spring now support @Gauge-annotated fields.

  • Opened GraphiteReporter up for extension.

  • Added group and type to metrics-annotations, metrics-guice, metrics-jersey, and metrics-spring.

  • Fixed handling of non-int gauges in GangliaReporter.

  • Fixed NullPointerException errors in metrics-spring.

  • General improvements to metrics-spring, including allowing custom Clock instances.

v2.0.3: Feb 24 2012

  • Change logging of InstanceNotFoundException exceptions thrown while unregistering a metric in JmxReporter to TRACE. It being WARN resulted in huge log dumps preventing process shutdowns when applications had ~1K+ metrics.

  • Upgraded to Spring 3.1.1 for metrics-spring.

  • Upgraded to JDBI 2.31.2.

  • Upgraded to Jersey 1.12.

  • Upgraded to Jetty 7.6.1.

  • Fixed rate units for meters in GangliaReporter.

v2.0.2: Feb 09 2012

  • InstrumentationModule in metrics-guice now uses the default MetricsRegistry and HealthCheckRegistry.

v2.0.1: Feb 08 2012

  • Fixed a concurrency bug in JmxReporter.

v2.0.0: Feb 07 2012

  • Upgraded to Jackson 1.9.4.

  • Upgraded to Jetty 7.6.0.

  • Added escaping for garbage collector and memory pool names in GraphiteReporter.

  • Fixed the inability to start and stop multiple reporter instances.

  • Switched to using a backported version of ThreadLocalRandom for UniformSample and ExponentiallyDecayingSample to reduce lock contention on random number generation.

  • Removed Ordered from TimedAnnotationBeanPostProcessor in metrics-spring.

  • Upgraded to JDBI 2.31.1.

  • Upgraded to Ehcache 2.5.1.

  • Added #timerContext() to Scala Timer.

v2.0.0-RC0: Jan 19 2012

  • Added FindBugs checks to the build process.

  • Fixed the catching of Error instances thrown during health checks.

  • Added enable static methods to CsvReporter and changed CsvReporter(File, MetricsRegistry) to CsvReporter(MetricsRegistry, File).

  • Slimmed down InstrumentedEhcache.

  • Hid the internals of GangliaReporter.

  • Hid the internals of metrics-guice.

  • Changed metrics-httpclient to consistently associate metrics with the org.apache class being extended.

  • Hid the internals of metrics-httpclient.

  • Rewrote InstrumentedAppender in metrics-log4j. It no longer forwards events to an appender. Instead, you can just attach it to your root logger to instrument logging.

  • Rewrote InstrumentedAppender in metrics-logback. No major API changes.

  • Fixed bugs with @ExceptionMetered-annotated resource methods in metrics-jersey.

  • Fixed bugs generating Snapshot instances from concurrently modified collections.

  • Fixed edge case in MetricsServlet’s thread dumps where one thread could be missed.

  • Added RatioGauge and PercentGauge.

  • Changed InstrumentedQueuedThreadPool’s percent-idle gauge to be a ratio.

  • Decomposed MetricsServlet into a set of focused servlets: HealthCheckServlet, MetricsServlet, PingServlet, and ThreadDumpServlet. The top-level servlet which provides the HTML menu page is now AdminServlet.

  • Added metrics-spring.

v2.0.0-BETA19: Jan 07 2012

  • Added absolute memory usage to MetricsServlet.

  • Extracted @Timed etc. to metrics-annotations.

  • Added metrics-jersey, which provides a class allowing you to automatically instrument all @Timed, @Metered, and @ExceptionMetered-annotated resource methods.

  • Moved all classes in metrics-scala from com.yammer.metrics to com.yammer.metrics.scala.

  • Renamed CounterMetric to Counter.

  • Renamed GaugeMetric to Gauge.

  • Renamed HistogramMetric to Histogram.

  • Renamed MeterMetric to Meter.

  • Renamed TimerMetric to Timer.

  • Added ToggleGauge, which returns 1 the first time it’s called and 0 every time after that.

  • Now licensed under Apache License 2.0.

  • Converted VirtualMachineMetrics to a non-singleton class.

  • Removed Utils.

  • Removed deprecated constructors from Meter and Timer.

  • Removed LoggerMemoryLeakFix.

  • DeathRattleExceptionHandler now logs to SLF4J, not syserr.

  • Added MetricsRegistry#groupedMetrics().

  • Removed Metrics#allMetrics().

  • Removed Metrics#remove(MetricName).

  • Removed MetricsRegistry#threadPools() and #newMeterTickThreadPool() and added #newScheduledThreadPool.

  • Added MetricsRegistry#shutdown().

  • Renamed ThreadPools#shutdownThreadPools() to #shutdown().

  • Replaced HealthCheck’s abstract name method with a required constructor parameter.

  • HealthCheck#check() is now protected.

  • Moved DeadlockHealthCheck from com.yammer.metrics.core to com.yammer.metrics.utils.

  • Added HealthCheckRegistry#unregister(HealthCheck).

  • Fixed typo in VirtualMachineMetrics and MetricsServlet: commited to committed.

  • Changed MetricsRegistry#createName to protected.

  • All metric types are created exclusively through MetricsRegistry now.

  • Metrics.newJmxGauge and MetricsRegistry.newJmxGauge are deprecated.

  • Fixed heap metrics in VirtualMachineMetrics.

  • Added Snapshot, which calculates quantiles.

  • Renamed Percentiled to Sampling and dropped percentile and percentiles in favor of producing Snapshot instances. This affects both Histogram and Timer.

  • Renamed Summarized to Summarizable.

  • Changed order of CsvReporter’s construction parameters.

  • Renamed VirtualMachineMetrics.GarbageCollector to VirtualMachineMetrics.GarbageCollectorStats.

  • Moved Guice/Servlet support from metrics-servlet to metrics-guice.

  • Removed metrics-aop.

  • Removed newJmxGauge from both Metrics and MetricsRegistry. Just use JmxGauge.

  • Moved JmxGauge to com.yammer.metrics.util.

  • Moved MetricPredicate to com.yammer.metrics.core.

  • Moved NameThreadFactory into ThreadPools and made ThreadPools package-visible.

  • Removed Timer#values(), Histogram#values(), and Sample#values(). Use getSnapshot() instead.

  • Removed Timer#dump(File) and Histogram#dump(File), and Sample#dump(File). Use Snapshot#dump(File) instead.

v2.0.0-BETA18: Dec 16 2011

  • Added DeathRattleExceptionHandler.

  • Fixed NPE in VirtualMachineMetrics.

  • Added decorators for connectors and thread pools in metrics-jetty.

  • Added TimerMetric#time() and TimerContext.

  • Added a shorter factory method for millisecond/second timers.

  • Switched tests to JUnit.

  • Improved logging in GangliaReporter.

  • Improved random number generation for UniformSample.

  • Added metrics-httpclient for instrumenting Apache HttpClient 4.1.

  • Massively overhauled the reporting code.

  • Added support for instrumented, non-public methods in metrics-guice.

  • Added @ExceptionMetered to metrics-guice.

  • Added group prefixes to GangliaReporter.

  • Added CvsReporter, which outputs metric values to .csv files.

  • Improved metric name sanitization in GangliaReporter.

  • Added Metrics.shutdown() and improved metrics lifecycle behavior.

  • Added metrics-web.

  • Upgraded to ehcache 2.5.0.

  • Many, many refactorings.

  • metrics-servlet now responds with 501 Not Implememented when no health checks have been registered.

  • Many internal refactorings for testability.

  • Added histogram counts to metrics-servlet.

  • Fixed a race condition in ExponentiallyDecayingSample.

  • Added timezone and locale support to ConsoleReporter.

  • Added metrics-aop for Guiceless support of method annotations.

  • Added metrics-jdbi which adds instrumentation to JDBI.

  • Fixed NPE for metrics which belong to classes in the default package.

  • Now deploying artifacts to Maven Central.

v2.0.0-BETA17: Oct 07 2011

  • Added an option message to successful health check results.

  • Fixed locale issues in GraphiteReporter.

  • Added GangliaReporter.

  • Added per-HTTP method timers to InstrumentedHandler in metrics-jetty.

  • Fixed a thread pool leak for meters.

  • Added #dump(File) to HistogramMetric and TimerMetric.

  • Upgraded to Jackson 1.9.x.

  • Upgraded to slf4j 1.6.2.

  • Upgraded to logback 0.9.30.

  • Upgraded to ehcache 2.4.5.

  • Surfaced Metrics.removeMetric().

v2.0.0-BETA16: Aug 23 2011

  • Fixed a bug in GC monitoring.

v2.0.0-BETA15: Aug 15 2011

  • Fixed dependency scopes for metrics-jetty.

  • Added time and VM version to vm output of MetricsServlet.

  • Dropped com.sun.mangement-based GC instrumentation in favor of a one. getLastGcInfo has a nasty native memory leak in it, plus it often returned incorrect data.

  • Upgraded to Jackson 1.8.5.

  • Upgraded to Jetty 7.4.5.

  • Added sanitization for metric names in GraphiteReporter.

  • Extracted out a Clock interface for timers for non-wall-clock timing.

  • Extracted out most of the remaining statics into MetricsRegistry and HealthCheckRegistry.

  • Added an init parameter to MetricsServlet for disabling the jvm section.

  • Added a Guice module for MetricsServlet.

  • Added dynamic metric names.

  • Upgraded to ehcache 2.4.5.

  • Upgraded to logback 0.9.29.

  • Allowed for the removal of metrics.

  • Added the ability to filter metrics exposed by a reporter to those which match a given predicate.

v2.0.0-BETA14: Jul 05 2011

  • Moved to Maven for a build system and extracted the Scala façade to a metrics-scala module which is now the only cross-built module. All other modules dropped the Scala version suffix in their artifactId.

  • Fixed non-heap metric name in GraphiteReporter.

  • Fixed stability error in GraphiteReporter when dealing with unavailable servers.

  • Fixed error with anonymous, instrumented classes.

  • Fixed error in MetricsServlet when a gauge throws an exception.

  • Fixed error with bogus GC run times.

  • Link to the pretty JSON output from the MetricsServlet menu page.

  • Fixed potential race condition in histograms’ variance calculations.

  • Fixed memory pool reporting for the G1 collector.

v2.0.0-BETA13: May 13 2011

  • Fixed a bug in the initial startup phase of the JmxReporter.

  • Added metrics-ehcache, for the instrumentation of Ehcache instances.

  • Fixed a typo in metrics-jetty’s InstrumentedHandler.

  • Added name prefixes to GraphiteReporter.

  • Added JVM metrics reporting to GraphiteReporter.

  • Actually fixed MetricsServlet’s links when the servlet has a non-root context path.

  • Now cross-building for Scala 2.9.0.

  • Added pretty query parameter for MetricsServlet to format the JSON object for human consumption.

  • Added no-cache headers to the MetricsServlet responses.

v2.0.0-BETA12: May 09 2011

  • Upgraded to Jackson 1.7.6.

  • Added a new instrumented Log4J appender.

  • Added a new instrumented Logback appender. Thanks to Bruce Mitchener (@waywardmonkeys) for the patch.

  • Added a new reporter for the Graphite aggregation system. Thanks to Mahesh Tiyyagura (@tmahesh) for the patch.

  • Added scoped metric names.

  • Added Scala 2.9.0.RC{2,3,4} as build targets.

  • Added meters to Jetty handler for the percent of responses which have 4xx or 5xx status codes.

  • Changed the Servlet API to be a provided dependency. Thanks to Mårten Gustafson (@chids) for the patch.

  • Separated project into modules:

    • metrics-core: A dependency-less project with all the core metrics.

    • metrics-graphite: A reporter for the [Graphite]( aggregation system.

    • metrics-guice: Guice AOP support.

    • metrics-jetty: An instrumented Jetty handler.

    • metrics-log4j: An instrumented Log4J appender.

    • metrics-logback: An instrumented Logback appender.

    • metrics-servlet: The Metrics servlet with context listener.

v2.0.0-BETA11: Apr 27 2011

  • Added thread state and deadlock detection metrics.

  • Fix VirtualMachineMetrics’ initialization.

  • Context path fixes for the servlet.

  • Added the @Gauge annotation.

  • Big reworking of the exponentially-weighted moving average code for meters. Thanks to JD Maturen (@sku) and John Ewart (@johnewart) for pointing this out.

  • Upgraded to Guice 3.0.

  • Upgraded to Jackson 1.7.5.

  • Upgraded to Jetty 7.4.0.

  • Big rewrite of the servlet’s thread dump code.

  • Fixed race condition in ExponentiallyDecayingSample. Thanks to Martin Traverso (@martint) for the patch.

  • Lots of spelling fixes in Javadocs. Thanks to Bruce Mitchener (@waywardmonkeys) for the patch.

  • Added Scala 2.9.0.RC1 as a build target. Thanks to Bruce Mitchener (@waywardmonkeys) for the patch.

  • Patched a hilarious memory leak in java.util.logging.

v2.0.0-BETA10: Mar 25 2011

  • Added Guice AOP annotations: @Timed and @Metered.

  • Added HealthCheck#name().

  • Added Metrics.newJmxGauge().

  • Moved health checks into HealthChecks.

  • Upgraded to Jackson 1.7.3 and Jetty 7.3.1.

v2.0.0-BETA9: Mar 14 2011

  • Fixed JmxReporter lag.

  • Added default arguments to timers and meters.

  • Added default landing page to the servlet.

  • Improved the performance of ExponentiallyDecayingSample.

  • Fixed an integer overflow bug in UniformSample.

  • Added linear scaling to ExponentiallyDecayingSample.

v2.0.0-BETA8: Mar 01 2011

  • Added histograms.

  • Added biased sampling for timers.

  • Added dumping of timer/histogram samples via the servlet.

  • Added dependency on jackon-mapper.

  • Added classname filtering for the servlet.

  • Added URI configuration for the servlet.

v2.0.0-BETA7: Jan 12 2011

  • Added JettyHandler.

  • Made the Servlet dependency optional.

v2.0.0-BETA6: Jan 12 2011

  • Fix JmxReporter initialization.

v2.0.0-BETA5: Jan 11 2011

  • Dropped Counter#++ and Counter#--.

  • Added Timer#update.

  • Upgraded to Jackson 1.7.0.

  • Made JMX reporting implicit.

  • Added health checks.

v2.0.0-BETA3: Dec 23 2010

  • Fixed thread names and some docs.

v2.0.0-BETA2: Dec 22 2010

  • Fixed a memory leak in MeterMetric.

v2.0.0-BETA1: Dec 22 2010

  • Total rewrite in Java.

v1.0.7: Sep 21 2010

  • Added median to Timer.

  • Added p95 to Timer (95th percentile).

  • Added p98 to Timer (98th percentile).

  • Added p99 to Timer (99th percentile).

v1.0.6: Jul 15 2010

  • Now compiled exclusively for 2.8.0 final.

v1.0.5: Jun 01 2010

  • Documentation fix.

  • Added TimedToggle, which may or may not be useful at all.

  • Now cross-building for RC2 and RC3.

v1.0.4: Apr 27 2010

  • Blank Timer instances (i.e., those which have recorded no timings yet) no longer explode when asked for metrics for that which does not yet exist.

  • Nested classes, companion objects, and singletons don’t have trailing $ characters messing up JMX’s good looks.

v1.0.3: Apr 16 2010

  • Fixed some issues with the plumbing.

  • Tweaked the sample size for Timer, giving it 99.9% confidence level with a %5 margin of error (for a normally distributed variable, which it almost certainly isn’t.)

  • Sample#iterator returns only the recorded data, not a bunch of zeros.

  • Moved units of Timer, Meter, and LoadMeter to their own attributes, which allows for easy export of Metrics data via JMX to things like Ganglia or whatever.

v1.0.2: Mar 08 2010

  • Timer now uses Welford’s algorithm for calculating running variance, which means no more hilariously wrong standard deviations (e.g., NaN).

  • Timer now supports +=(Long) for pre-recorded, nanosecond-precision timings.

v1.0.1: Mar 05 2010

  • changed Sample to use an AtomicReferenceArray

v1.0.0: Feb 27 2010

  • Initial release