Class CacheMetricsCollector

Object
CacheMetricsCollector
All Implemented Interfaces:
MultiCollector

public class CacheMetricsCollector extends Object implements MultiCollector
Collect metrics from Guava's com.google.common.cache.Cache.


 // Note that `recordStats()` is required to gather non-zero statistics
 Cache<String, String> cache = CacheBuilder.newBuilder().recordStats().build();
 CacheMetricsCollector cacheMetrics = new CacheMetricsCollector();
 PrometheusRegistry.defaultRegistry.register(cacheMetrics);
 cacheMetrics.addCache("mycache", cache);

 
Exposed metrics are labeled with the provided cache name.

With the example above, sample metric names would be:

     guava_cache_hit_total{cache="mycache"} 10.0
     guava_cache_miss_total{cache="mycache"} 3.0
     guava_cache_requests_total{cache="mycache"} 13.0
     guava_cache_eviction_total{cache="mycache"} 1.0
     guava_cache_size{cache="mycache"} 5.0
 
Additionally, if the cache includes a loader, the following metrics would be provided:
     guava_cache_load_failure_total{cache="mycache"} 2.0
     guava_cache_loads_total{cache="mycache"} 7.0
     guava_cache_load_duration_seconds_count{cache="mycache"} 7.0
     guava_cache_load_duration_seconds_sum{cache="mycache"} 0.0034
 
  • Constructor Details

  • Method Details

    • addCache

      public void addCache(String cacheName, Cache<?,?> cache)
      Add or replace the cache with the given name.

      Any references any previous cache with this name is invalidated.

      Parameters:
      cacheName - The name of the cache, will be the metrics label value
      cache - The cache being monitored
    • removeCache

      public Cache<?,?> removeCache(String cacheName)
      Remove the cache with the given name.

      Any references to the cache are invalidated.

      Parameters:
      cacheName - cache to be removed
    • clear

      public void clear()
      Remove all caches.

      Any references to all caches are invalidated.

    • collect

      Description copied from interface: MultiCollector
      Called when the Prometheus server scrapes metrics.
      Specified by:
      collect in interface MultiCollector
    • getPrometheusNames

      Description copied from interface: MultiCollector
      This is called in two places:
      1. During registration to check if a metric with that name already exists.
      2. During scrape to check if the collector can be skipped because a name filter is present and all names are excluded.
      Returning an empty list means checks are omitted (registration metric always succeeds), and the collector is always scraped (if a name filter is present and all names are excluded the result is dropped).

      If your collector returns a constant list of metrics that have names that do not change at runtime it is a good idea to overwrite this and return the names.

      Specified by:
      getPrometheusNames in interface MultiCollector