public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
/** * {@inheritDoc} */ public List<Metric> poll(MetricFilter filter) { return poll(filter, false); }
private void refreshMonitorCache(MetricFilter filter) { final long age = System.currentTimeMillis() - cacheLastUpdateTime.get(); if (age > cacheTTL) { List<Monitor<?>> monitors = new ArrayList<>(); for (Monitor<?> monitor : registry.getRegisteredMonitors()) { try { getMonitors(monitors, filter, monitor); } catch (Exception e) { LOGGER.warn("failed to get monitors for composite " + monitor.getConfig(), e); } } cacheLastUpdateTime.set(clock.now()); cachedMonitors.set(monitors); LOGGER.debug("cache refreshed, {} monitors matched filter, previous age {} seconds", monitors.size(), age / 1000); } else { LOGGER.debug("cache age of {} seconds is within ttl of {} seconds", age / 1000, cacheTTL / 1000); } }
/** * {@inheritDoc} */ public List<Metric> poll(MetricFilter filter, boolean reset) { refreshMonitorCache(filter); List<Monitor<?>> monitors = cachedMonitors.get(); List<Metric> metrics = new ArrayList<>(monitors.size()); for (Monitor<?> monitor : monitors) { Object v = getValue(monitor); if (v != null) { metrics.add(new Metric(monitor.getConfig(), clock.now(), v)); } } return metrics; }
MonitorRegistryMetricPoller[] pollers = new MonitorRegistryMetricPoller[10]; for (int i = 0; i < pollers.length; ++i) { pollers[i] = new MonitorRegistryMetricPoller(registry); pollers[i].poll(MATCH_ALL); poller.shutdown();
/** * {@inheritDoc} */ public List<Metric> poll(MetricFilter filter, boolean reset) { refreshMonitorCache(filter); List<Monitor<?>> monitors = cachedMonitors.get(); List<Metric> metrics = new ArrayList<>(monitors.size()); for (Monitor<?> monitor : monitors) { Object v = getValue(monitor); if (v != null) { metrics.add(new Metric(monitor.getConfig(), clock.now(), v)); } } return metrics; }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
/** * {@inheritDoc} */ public List<Metric> poll(MetricFilter filter) { return poll(filter, false); }
private void getMonitors(List<Monitor<?>> monitors, MetricFilter filter, Monitor<?> monitor) { if (monitor instanceof CompositeMonitor<?>) { for (Monitor<?> m : ((CompositeMonitor<?>) monitor).getMonitors()) { getMonitors(monitors, filter, m); } } else if (filter.matches(monitor.getConfig())) { monitors.add(monitor); } }
private static void initMetricsPublishing() throws Exception { final List<MetricObserver> observers = new ArrayList<>(); if (Config.isFileObserverEnabled()) { observers.add(createFileObserver()); } if (Config.isAtlasObserverEnabled()) { observers.add(createAtlasObserver()); } if (Config.isGraphiteObserverEnabled()) { observers.add(createGraphiteObserver()); } PollScheduler.getInstance().start(); schedule(new MonitorRegistryMetricPoller(), observers); if (Config.isJvmPollerEnabled()) { schedule(new JvmMetricPoller(), observers); } }
private void refreshMonitorCache(MetricFilter filter) { final long age = System.currentTimeMillis() - cacheLastUpdateTime.get(); if (age > cacheTTL) { List<Monitor<?>> monitors = new ArrayList<>(); for (Monitor<?> monitor : registry.getRegisteredMonitors()) { try { getMonitors(monitors, filter, monitor); } catch (Exception e) { LOGGER.warn("failed to get monitors for composite " + monitor.getConfig(), e); } } cacheLastUpdateTime.set(clock.now()); cachedMonitors.set(monitors); LOGGER.debug("cache refreshed, {} monitors matched filter, previous age {} seconds", monitors.size(), age / 1000); } else { LOGGER.debug("cache age of {} seconds is within ttl of {} seconds", age / 1000, cacheTTL / 1000); } }
@Test public void testBasic() throws Exception { MonitorRegistry registry = new BasicMonitorRegistry(); registry.register(Monitors.newCounter("test")); MetricPoller poller = new MonitorRegistryMetricPoller(registry); Metric metric = poller.poll(MATCH_ALL).get(0); MonitorConfig expected = MonitorConfig.builder("test") .withTag(DataSourceType.COUNTER) .build(); assertEquals(metric.getConfig(), expected); }
private void getMonitors(List<Monitor<?>> monitors, MetricFilter filter, Monitor<?> monitor) { if (monitor instanceof CompositeMonitor<?>) { for (Monitor<?> m : ((CompositeMonitor<?>) monitor).getMonitors()) { getMonitors(monitors, filter, m); } } else if (filter.matches(monitor.getConfig())) { monitors.add(monitor); } }
@Test public void testSlowMonitor() throws Exception { MonitorRegistry registry = new BasicMonitorRegistry(); registry.register(new SlowCounter("slow")); registry.register(Monitors.newCounter("test")); MetricPoller poller = new MonitorRegistryMetricPoller(registry); long start = System.currentTimeMillis(); Metric metric = poller.poll(MATCH_ALL).get(0); long end = System.currentTimeMillis(); // Verify we didn't wait too long, we should only wait 1 second but allow up to // 10 to make it less likely to have spurious test failures assertTrue(end - start < TEN_SECONDS); MonitorConfig expected = MonitorConfig.builder("test") .withTag(DataSourceType.COUNTER) .build(); assertEquals(metric.getConfig(), expected); }
MetricPoller createMonitorRegistryMetricPoller() { return new MonitorRegistryMetricPoller(); }
/** * Creates a {@link PollRunnable} that will poll for all custom metrics that have been * registered in {@link DefaultMonitoringService}. * * @param observers the list of observers that will react on the polled values, e.g. graphite * @return a {@link PollRunnable} instance that will poll for all custom metrics */ public PollRunnable createCustomMetricsTask(final List<MetricObserver> observers) { return new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, observers != null ? observers : Collections.<MetricObserver>emptyList()); } }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
@Override protected void initializePlatform() { if (initalized) return; try { PollScheduler scheduler = PollScheduler.getInstance(); scheduler.start(); MetricObserver fileObserver = new FileMetricObserver("stats", new File(".")); MetricObserver transform = new CounterToRateMetricTransform(fileObserver, 2, TimeUnit.MINUTES); PollRunnable task = new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); scheduler.addPoller(task, 1, TimeUnit.MINUTES); } catch (Throwable e) { // dont do anything... just eat. logger.error("Epic Plugin was not intialized: ", e); } initalized = true; }
public void init() { PollScheduler scheduler = PollScheduler.getInstance(); if (!scheduler.isStarted()) { scheduler.start(); } if (isRollingFileEnabled()) { MetricObserver fileObserver = new FileOutputMetricObserver(fileOutput, convertor, formatter); MetricObserver fileTransform = new CounterToRateMetricTransform(fileObserver, metricPoll, TimeUnit.SECONDS); PollRunnable fileTask = new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, fileTransform); scheduler.addPoller(fileTask, metricPoll, TimeUnit.SECONDS); } }