private void gauge(final MeterRegistry registry, final String name, final Supplier<PoolStats> stats, final Function<PoolStats, Number> function) { Gauge.builder(metricName + "." + name, () -> function.apply(stats.get())) .tags(defaultTags) .register(registry); }
public MicrometerGauge(MeterRegistry meterRegistry, MetricId id) { super(id); io.micrometer.core.instrument.Gauge.builder(id.getName(), value, DoubleAdder::sum) .description(id.getDescription()) .tags(id.getTags().stream().map(tag -> Tag.of(tag.getKey(), tag.getValue())) .collect(Collectors.toList())).register(meterRegistry); }
public <T> MicrometerCallbackGauge(MeterRegistry meterRegistry, MetricId id, T obj, ToDoubleFunction<T> toDoubleFunction) { super(id); gauge = io.micrometer.core.instrument.Gauge.builder(id.getName(), obj, toDoubleFunction) .description(id.getDescription()) .tags(id.getTags().stream().map(tag -> Tag.of(tag.getKey(), tag.getValue())) .collect(Collectors.toList())).register(meterRegistry); }
private void monitor(MeterRegistry registry, ThreadPoolExecutor tp) { FunctionCounter.builder(name + ".completed", tp, ThreadPoolExecutor::getCompletedTaskCount) .tags(tags) .description("The approximate total number of tasks that have completed execution") .register(registry); Gauge.builder(name + ".active", tp, ThreadPoolExecutor::getActiveCount) .tags(tags) .description("The approximate number of threads that are actively executing tasks") .register(registry); Gauge.builder(name + ".queued", tp, tpRef -> tpRef.getQueue().size()) .tags(tags) .description("The approximate number of threads that are queued for execution") .register(registry); Gauge.builder(name + ".pool", tp, ThreadPoolExecutor::getPoolSize) .tags(tags) .description("The current number of threads in the pool") .register(registry); } }
private void averages(MeterRegistry registry) { Gauge.builder("cache.puts.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageWriteTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache puts") .register(registry); Gauge.builder("cache.gets.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageReadTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache gets") .register(registry); Gauge.builder("cache.removes.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageRemoveTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache removes") .register(registry); } }
private void averages(MeterRegistry registry) { Gauge.builder("cache.puts.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageWriteTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache puts") .register(registry); Gauge.builder("cache.gets.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageReadTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache gets") .register(registry); Gauge.builder("cache.removes.latency", cache, cache -> cache.getAdvancedCache().getStats().getAverageRemoveTime()) .baseUnit(TimeUnit.MILLISECONDS.name()) .tags(getTagsWithCacheName()) .description("Cache removes") .register(registry); } }
private void nearCacheMetrics(MeterRegistry registry) { if (isNearCacheEnabled()) { Gauge.builder("cache.near.requests", cache, cache -> cache.clientStatistics().getNearCacheHits()) .tags(getTagsWithCacheName()).tag("result", "hit") .description("The number of hits (reads) of near cache entries owned by this client") .register(registry); Gauge.builder("cache.near.requests", cache, cache -> cache.clientStatistics().getNearCacheMisses()) .tags(getTagsWithCacheName()).tag("result", "miss") .description("The number of hits (reads) of near cache entries owned by this client") .register(registry); Gauge.builder("cache.near.invalidations", cache, cache -> cache.clientStatistics().getNearCacheInvalidations()) .tags(getTagsWithCacheName()) .description("The number of invalidations of near cache entries owned by this client") .register(registry); Gauge.builder("cache.near.size", cache, cache -> cache.clientStatistics().getNearCacheSize()) .tags(getTagsWithCacheName()) .description("The size of the near cache owned by this client") .register(registry); } }
@Override protected void bindImplementationSpecificMetrics(MeterRegistry registry) { if (cache == null) return; Gauge.builder("cache.start", cache, cache -> cache.getAdvancedCache().getStats().getTimeSinceStart()) .baseUnit(TimeUnit.SECONDS.name()) .tags(getTagsWithCacheName()) .description("Time elapsed since start") .register(registry); Gauge.builder("cache.reset", cache, cache -> cache.getAdvancedCache().getStats().getTimeSinceReset()) .baseUnit(TimeUnit.SECONDS.name()) .tags(getTagsWithCacheName()) .description("Time elapsed since the last statistics reset") .register(registry); memory(registry); averages(registry); }
private void memory(MeterRegistry registry) { Gauge.builder("cache.memory.size", cache, cache -> cache.getAdvancedCache().getStats().getCurrentNumberOfEntriesInMemory()) .tags(getTagsWithCacheName()) .description("Number of entries currently in the cache, excluding passivated entries") .register(registry); if (cache.getCacheConfiguration().memory().evictionStrategy().isEnabled()) { Gauge.builder("cache.memory.used", cache, cache -> cache.getAdvancedCache().getStats().getDataMemoryUsed()) .tags(getTagsWithCacheName()) .description("Provides how much memory the current eviction algorithm estimates is in use for data") .register(registry); } Gauge.builder("cache.memory.offHeap", cache, cache -> cache.getAdvancedCache().getStats().getOffHeapMemoryUsed()) .tags(getTagsWithCacheName()) .description("The amount of off-heap memory used by this cache") .register(registry); }
@Override public void bindTo(MeterRegistry registry) { Gauge.builder("spring.integration.channelNames", configurer, c -> c.getChannelNames().length) .tags(tags) .description("The number of spring integration channels") .register(registry); Gauge.builder("spring.integration.handlerNames", configurer, c -> c.getHandlerNames().length) .tags(tags) .description("The number of spring integration handlers") .register(registry); Gauge.builder("spring.integration.sourceNames", configurer, c -> c.getSourceNames().length) .tags(tags) .description("The number of spring integration sources") .register(registry); registries.add(registry); }
private void memory(MeterRegistry registry) { Gauge.builder("cache.memory.size", cache, cache -> cache.getAdvancedCache().getStats().getCurrentNumberOfEntriesInMemory()) .tags(getTagsWithCacheName()) .description("Number of entries currently in the cache, excluding passivated entries") .register(registry); if (cache.getCacheConfiguration().memory().evictionStrategy().isEnabled()) { Gauge.builder("cache.memory.used", cache, cache -> cache.getAdvancedCache().getStats().getDataMemoryUsed()) .tags(getTagsWithCacheName()) .description("Provides how much memory the current eviction algorithm estimates is in use for data") .register(registry); } Gauge.builder("cache.memory.offHeap", cache, cache -> cache.getAdvancedCache().getStats().getOffHeapMemoryUsed()) .tags(getTagsWithCacheName()) .description("The amount of off-heap memory used by this cache") .register(registry); }
public synchronized T get(String... values) { // This method is synchronized to make sure the "T" built via supplier will match the one passed to Gauge // since it is stored as WeakReference in Micrometer DefaultGauge, it must not be lost. T t = tSupplier.get(); // Register this gauge if necessary // Note: we need here to go through the process of Gauge creation, even if it already exists, // in order to get the Gauge ID. This ID generation is not trivial since it may involves attached MetricFilters. // Micrometer will not register the gauge twice if it was already created. Gauge g = Gauge.builder(name, t, dGetter) .description(description) .tags(Labels.toTags(keys, values)) .register(registry); return gauges.computeIfAbsent(g.getId(), v -> t); } }
private void averages(MeterRegistry registry) { Gauge.builder("cache.puts.latency", cache, cache -> cache.clientStatistics().getAverageRemoteStoreTime()) .tags(getTagsWithCacheName()) .description("Cache puts") .register(registry); Gauge.builder("cache.gets.latency", cache, cache -> cache.clientStatistics().getAverageRemoteReadTime()) .tags(getTagsWithCacheName()) .description("Cache gets") .register(registry); Gauge.builder("cache.removes.latency", cache, cache -> cache.clientStatistics().getAverageRemoteRemovesTime()) .tags(getTagsWithCacheName()) .description("Cache removes") .register(registry); }
@Override protected void bindImplementationSpecificMetrics(MeterRegistry registry) { if (cache == null) return; Gauge.builder("cache.start", cache, cache -> cache.getAdvancedCache().getStats().getTimeSinceStart()) .baseUnit(TimeUnit.SECONDS.name()) .tags(getTagsWithCacheName()) .description("Time elapsed since start") .register(registry); Gauge.builder("cache.reset", cache, cache -> cache.getAdvancedCache().getStats().getTimeSinceReset()) .baseUnit(TimeUnit.SECONDS.name()) .tags(getTagsWithCacheName()) .description("Time elapsed since the last statistics reset") .register(registry); memory(registry); averages(registry); }
@Override public <T> Gauge gauge(String name, Collection<Tag> tags, T obj, ToDoubleFunction<T> f) { return new MicrometerGauge<T>(io.micrometer.core.instrument.Gauge.builder(name, obj, f).tags(toTags(tags)).register(registry)); }
@Override protected void doStart() throws Exception { super.doStart(); Gauge.builder(namingStrategy.getRouteAddedName(), routesAdded, value -> Long.valueOf(value.get()).doubleValue()) .baseUnit("routes") .tags(namingStrategy.getTags(getCamelContext())) .register(getMeterRegistry()); Gauge.builder(namingStrategy.getRouteRunningName(), routesRunning, value -> Long.valueOf(value.get()).doubleValue()) .baseUnit("routes") .tags(namingStrategy.getTags(getCamelContext())) .register(getMeterRegistry()); }
@Override public Gauge maxGauge(Id id) { // Note: micrometer doesn't support this type directly so it uses an arbitrary // window of 1m StepDouble value = new StepDouble(Double.NaN, clock(), 60000L); io.micrometer.core.instrument.Gauge gauge = io.micrometer.core.instrument.Gauge .builder(id.name(), value, StepDouble::poll) .tags(convert(id.tags())) .register(impl); return new MicrometerGauge(id, v -> value.getCurrent().max(v), gauge); }
@Override protected void bindImplementationSpecificMetrics(MeterRegistry registry) { if (cache == null) return; Gauge.builder("cache.reset", cache, cache -> cache.clientStatistics().getTimeSinceReset()) .tags(getTagsWithCacheName()).tag("ownership", "backup") .description("Time elapsed in seconds since the last statistics reset") .register(registry); averages(registry); nearCacheMetrics(registry); }
@Override public Gauge gauge(Id id) { AtomicDouble value = new AtomicDouble(Double.NaN); io.micrometer.core.instrument.Gauge gauge = io.micrometer.core.instrument.Gauge .builder(id.name(), value, AtomicDouble::get) .tags(convert(id.tags())) .register(impl); return new MicrometerGauge(id, value::set, gauge); }
.tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .tags(METRIC_CATEGORY, poolName) .register(meterRegistry);