Class Histogram

  • All Implemented Interfaces:
    Collector.Describable

    public class Histogram
    extends SimpleCollector<Histogram.Child>
    implements Collector.Describable
    Histogram metric, to track distributions of events.

    Example of uses for Histograms include:

    • Response latency
    • Request size

    Note: Each bucket is one timeseries. Many buckets and/or many dimensions with labels can produce large amount of time series, that may cause performance problems.

    The default buckets are intended to cover a typical web/rpc request from milliseconds to seconds.

    Example Histograms:

     
       class YourClass {
         static final Histogram requestLatency = Histogram.build()
             .name("requests_latency_seconds").help("Request latency in seconds.").register();
    
         void processRequest(Request req) {
            Histogram.Timer requestTimer = requestLatency.startTimer();
            try {
              // Your code here.
            } finally {
              requestTimer.observeDuration();
            }
         }
    
         // Or if using Java 8 lambdas.
         void processRequestLambda(Request req) {
            requestLatency.time(() -> {
              // Your code here.
            });
         }
       }
     
     

    You can choose your own buckets:

     
         static final Histogram requestLatency = Histogram.build()
             .buckets(.01, .02, .03, .04)
             .name("requests_latency_seconds").help("Request latency in seconds.").register();
     
     
    linearBuckets and exponentialBuckets offer easy ways to set common bucket patterns.