@Override public void run() { final Set<Map.Entry<MetricName, Metric>> metrics = getMetricsRegistry().allMetrics().entrySet(); try { List<DataObject> dataObjectList = new ArrayList<DataObject>(); for (Map.Entry<MetricName, Metric> entry : metrics) { final MetricName metricName = entry.getKey(); final Metric metric = entry.getValue(); if (predicate.matches(metricName, metric)) { metric.processWith(this, entry.getKey(), dataObjectList); } } SenderResult senderResult = sender.send(dataObjectList); if (!senderResult.success()) { log.warn("metrics reporting to zabbix {} unsuccessful: {}", sender.getHost(), sender.getPort(), senderResult); } else if (log.isDebugEnabled()) { log.debug("metrics reported to zabbix {} {}: {}", sender.getHost(), sender.getPort(), senderResult); } } catch (Exception e) { log.error("failed to report metrics to " + sender.getHost() + ':' + sender.getPort(), e); } } }