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); }
@Override public void bindTo(MeterRegistry registry) { for (Map.Entry<String, KafkaMessageChannelBinder.TopicInformation> topicInfo : this.binder.getTopicsInUse() .entrySet()) { if (!topicInfo.getValue().isConsumerTopic()) { continue; } String topic = topicInfo.getKey(); String group = topicInfo.getValue().getConsumerGroup(); Gauge.builder(METRIC_NAME, this, (o) -> computeUnconsumedMessages(topic, group)) .tag("group", group) .tag("topic", topic) .description("Unconsumed messages for a particular group and topic") .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); }
@Override public void bindTo(MeterRegistry registry) { for (Map.Entry<String, KafkaMessageChannelBinder.TopicInformation> topicInfo : this.binder.getTopicsInUse() .entrySet()) { if (!topicInfo.getValue().isConsumerTopic()) { continue; } String topic = topicInfo.getKey(); String group = topicInfo.getValue().getConsumerGroup(); Gauge.builder(METRIC_NAME, this, (o) -> computeUnconsumedMessages(topic, group)) .tag("group", group) .tag("topic", topic) .description("Unconsumed messages for a particular group and topic") .register(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 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); }
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); } }
@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 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 public void bindTo(MeterRegistry registry) { if (registry instanceof StatsdMeterRegistry) { StatsdMeterRegistry statsdRegistry = (StatsdMeterRegistry) registry; Gauge.builder("statsd.queue.size", statsdRegistry, StatsdMeterRegistry::queueSize) .description("The total number of StatsD events queued for transmission over UDP") .register(statsdRegistry); Gauge.builder("statsd.queue.capacity", statsdRegistry, StatsdMeterRegistry::queueCapacity) .description("The maximum number of StatsD events that can be queued for transmission") .register(statsdRegistry); } } }
@Override public void bindTo(@Nonnull MeterRegistry meterRegistry) { Gauge.builder("spring.sessions", sessions, SessionMetrics::getSessions) .description("The number of sessions, including expired sessions") .register(meterRegistry); }
@Override public GaugeBuilder description(String desc) { this.builder.description(desc); return this; }
@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 GaugeBuilder description(String desc) { this.builder.description(desc); return this; }
.description("Total connections") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .description("Idle connections") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .description("Active connections") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .description("Pending threads") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .description("Max connections") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); .description("Min connections") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry);