Как использовать новый API отчетности Metrics Storm? - PullRequest
0 голосов
/ 18 октября 2018

Я использую шторм V1.2.1.После настройки в соответствии с официальной документацией я хочу получить некоторые метрики в носике, код носика выглядит следующим образом, но в графитовой сети нет ожидаемых данных метрики.

Вопрос 1 : Как правильно использовать API отчетов о новых метриках?

Вопрос 2 : Как получить метрику номера ACK в привязанном к шторму KafkaSpout с помощью API Storm's Old или New Metrics API?

Использование New API в носике для получения номера кортежа:

      public static class MyTestWordSpout extends BaseRichSpout {
            public static Logger LOG = LoggerFactory.getLogger(TestWordSpout.class);
            boolean _isDistributed;
            SpoutOutputCollector _collector;
            private Counter tupleCounter;
            transient CountMetric ackcountMetric;
            long msid=0;


            public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
                _collector = collector;
                this.tupleCounter = context.registerCounter("tupleCount");
                ackcountMetric = new CountMetric();
                context.registerMetric("ack_count", ackcountMetric, 5);
            }

            public void close() {

            }

            public void nextTuple() {
                Utils.sleep(100);
                final String[] words = new String[] {"nathan", "mike", "jackson", "golda", "bertels"};
                final Random rand = new Random();
                final String word = words[rand.nextInt(words.length)];
                _collector.emit(new Values(word),msid++);
                this.tupleCounter.inc();

            }

            public void ack(Object msgId) {
                  ackcountMetric.incr();
            }

            public void fail(Object msgId) {

            }

            public void declareOutputFields(OutputFieldsDeclarer declarer) {
                declarer.declare(new Fields("word"));
            }
        }

storm.yaml:

storm.metrics.reporters:
  # Graphite Reporter
  - class: "org.apache.storm.metrics2.reporters.GraphiteStormReporter"
    daemons:
        - "supervisor"
        - "nimbus"
        - "worker"
    report.period: 1
    report.period.units: "SECONDS"
    graphite.host: "10.11.6.79"
    graphite.port: 2003
  - class: "org.apache.storm.metrics2.reporters.ConsoleStormReporter"
    daemons:
        - "worker"
    report.period: 1
    report.period.units: "SECONDS"

графитовый браузер: графитбраузер

1 Ответ

0 голосов
/ 20 марта 2019

вы можете использовать эту библиотеку https://github.com/staslev/storm-metrics-reporter. Добавьте это к вашему pom.xml

<dependency>
  <groupId>com.github.staslev</groupId>
  <artifactId>storm-metrics-reporter</artifactId>
  <version>1.5.0</version>
</dependency>

Добавьте эту конфигурацию к вашей топологии:

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, YOUR-TOPOLOGY.class.getCanonicalName());
        config.registerMetricsConsumer(MetricReporter.class,
                new MetricReporterConfig(".*", SimpleGraphiteStormMetricProcessor.class.getCanonicalName()), 1);

И добавьте следующеевызовите метод prepare ваших болтов:

public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
        StormYammerMetricsAdapter.configure(stormConf, context, new MetricsRegistry());

Тогда вы можете увидеть в своем браузере, показывает ли Graphite метрики.enter image description here

...