Я хорошо собирал метрики от Apache Storm до Graphite. Затем я разработал настраиваемый планировщик, который реализует интерфейс IScheduler, и теперь я не могу собирать какие-либо показатели.
Вот мой планировщик :
public class SiteAwareScheduler implements IScheduler {
@Override
public void prepare(Map conf) {
}
@Override
public void schedule(Topologies topologies, Cluster cluster) {
....
}
}
В файле storm.yaml:
supervisor.scheduler.meta:
site: "cluster"
storm.scheduler: "org.sense.storm.scheduler.SiteAwareScheduler"
Я использую эту библиотеку для сбора метрик и отправки их на сервер Graphite.
public class MyTopology {
config.put(YammerFacadeMetric.FACADE_METRIC_TIME_BUCKET_IN_SEC, 30);
config.put(SimpleGraphiteStormMetricProcessor.GRAPHITE_HOST, "127.0.0.1");
config.put(SimpleGraphiteStormMetricProcessor.GRAPHITE_PORT, 2003);
config.put(SimpleGraphiteStormMetricProcessor.REPORT_PERIOD_IN_SEC, 10);
config.put(Config.TOPOLOGY_NAME, "MqttSensorSumTopology");
config.registerMetricsConsumer(MetricReporter.class, new MetricReporterConfig(".*", SimpleGraphiteStormMetricProcessor.class.getCanonicalName()), 1);
...
TopologyBuilder topologyBuilder = new TopologyBuilder();
...
topologyBuilder.setBolt(MqttSensors.BOLT_SENSOR_TICKET_SUM.getValue(), new SumSensorValuesWindowBolt(SensorType.COUNTER_TICKETS).withTumblingWindow(Duration.seconds(5)), 1)
.shuffleGrouping(MqttSensors.SPOUT_STATION_01_TICKETS.getValue())
.addConfiguration(TagSite.SITE.getValue(), TagSite.CLUSTER.getValue());
}
public class SumSensorValuesWindowBolt extends BaseWindowedBolt {
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
StormYammerMetricsAdapter.configure(stormConf, context, new MetricsRegistry());
this.collector = collector;
}
public void execute(TupleWindow inputWindow) {
...
}
}
Метод "prepare" в IScheduler не имеет TopologyContext, поэтому я не знаю, где создавать экземпляры моих метрик с новым расписанием.
Есть намеки?
Спасибо
Фелипе