protected ServiceMetricEvent.Builder builder() { return ServiceMetricEvent.builder().setFeed(feed); } }
private ServiceMetricEvent.Builder createEventBuilder(String serviceName) { ServiceMetricEvent.Builder builder = ServiceMetricEvent.builder() .setDimension("serviceName", serviceName); MonitorUtils.addDimensionsToBuilder(builder, dimensions); return builder; } }
@Override public void run() { try { final long tasks = updatesStarted.get(); serviceEmitter.emit( ServiceMetricEvent.builder() .build("namespace/deltaTasksStarted", tasks - priorUpdatesStarted) ); priorUpdatesStarted = tasks; } catch (Exception e) { log.error(e, "Error emitting namespace stats"); if (Thread.currentThread().isInterrupted()) { throw Throwables.propagate(e); } } } },
@Override void monitor(ServiceEmitter serviceEmitter) { long numEntries = 0; long size = 0; expungeCollectedCaches(); for (WeakReference<ConcurrentMap<String, String>> cacheRef : caches) { final Map<String, String> cache = cacheRef.get(); if (cache == null) { continue; } numEntries += cache.size(); for (Map.Entry<String, String> sEntry : cache.entrySet()) { final String key = sEntry.getKey(); final String value = sEntry.getValue(); if (key == null || value == null) { LOG.debug("Missing entries for cache key"); continue; } size += key.length() + value.length(); } } serviceEmitter.emit(ServiceMetricEvent.builder().build("namespace/cache/numEntries", numEntries)); serviceEmitter.emit(ServiceMetricEvent.builder().build("namespace/cache/heapSizeInBytes", size * Chars.BYTES)); } }
@Override public boolean doMonitor(ServiceEmitter emitter) { final Map<String, Long> priorValues = this.priorValues.get(); final Map<String, Long> currentValues = getCurrentValues(); final ServiceMetricEvent.Builder builder = ServiceMetricEvent.builder(); for (Map.Entry<String, Long> entry : currentValues.entrySet()) { emitter.emit( builder.setDimension("memcached metric", entry.getKey()) .build("query/cache/memcached/total", entry.getValue()) ); final Long prior = priorValues.get(entry.getKey()); if (prior != null) { emitter.emit( builder.setDimension("memcached metric", entry.getKey()).build( "query/cache/memcached/delta", entry.getValue() - prior ) ); } } if (!this.priorValues.compareAndSet(priorValues, currentValues)) { log.error("Prior value changed while I was reporting! updating anyways"); this.priorValues.set(currentValues); } return true; }
private Runnable emitLag() { return () -> { try { Map<Integer, Long> highestCurrentOffsets = getHighestCurrentOffsets(); if (latestOffsetsFromKafka == null) { throw new ISE("Latest offsets from Kafka have not been fetched"); } if (!latestOffsetsFromKafka.keySet().equals(highestCurrentOffsets.keySet())) { log.warn( "Lag metric: Kafka partitions %s do not match task partitions %s", latestOffsetsFromKafka.keySet(), highestCurrentOffsets.keySet() ); } long lag = getLagPerPartition(highestCurrentOffsets) .values() .stream() .mapToLong(x -> Math.max(x, 0)) .sum(); emitter.emit( ServiceMetricEvent.builder().setDimension("dataSource", dataSource).build("ingest/kafka/lag", lag) ); } catch (Exception e) { log.warn(e, "Unable to compute Kafka lag"); } }; }
@Override public void doMonitor(ServiceEmitter emitter) { final CacheStats oldStats = priorStats.get(); final CacheStats newStats = cache.stats(); final CacheStats deltaStats = newStats.minus(oldStats); final ServiceMetricEvent.Builder builder = ServiceMetricEvent.builder(); emitter.emit(builder.build("query/cache/caffeine/delta/requests", deltaStats.requestCount())); emitter.emit(builder.build("query/cache/caffeine/total/requests", newStats.requestCount())); emitter.emit(builder.build("query/cache/caffeine/delta/loadTime", deltaStats.totalLoadTime())); emitter.emit(builder.build("query/cache/caffeine/total/loadTime", newStats.totalLoadTime())); emitter.emit(builder.build("query/cache/caffeine/delta/evictionBytes", deltaStats.evictionWeight())); emitter.emit(builder.build("query/cache/caffeine/total/evictionBytes", newStats.evictionWeight())); if (!priorStats.compareAndSet(oldStats, newStats)) { // ISE for stack trace log.warn( new IllegalStateException("Multiple monitors"), "Multiple monitors on the same cache causing race conditions and unreliable stats reporting" ); } }
.builder() .setDimension("task", task.getId()) .setDimension("dataSource", task.getDataSource())