Как использовать микрометр для сбора метрик в стеке TICK без использования Spring или Spring Boot? - PullRequest
0 голосов
/ 15 января 2020

Я пишу приложение в чистом виде Java без использования Spring / SpringBoot или каких-либо других фреймворков. Я использую стек TICK (Telegraf, Influx, Chronograf и Kapacitor) в качестве своей базы метрик и платформы. Я использую Telegraf с плагином Statsd, активированным на localhost 8125. Проблема в том, что мое приложение не отправляет какие-либо метрики в систему. Тем не менее, я написал простое приложение Spring Boot, которое поместило соответствующие метрики на мою панель управления. Кроме того, выполнение echo "api.msgs.ok:10|c" | nc -C -w 1 -u localhost 8125 приводит к переносу метрик на мою панель управления.

Пример кода, который я пытаюсь запустить, находится здесь:

import io.micrometer.statsd.StatsdConfig;
import io.micrometer.statsd.StatsdFlavor;
import io.micrometer.statsd.StatsdMeterRegistry;


import java.util.Properties;

public class TestMicrometer {


    public static void main(String[] args) throws InterruptedException{
        Properties properties = new Properties();
        //properties.put("statsd.host","127.0.0.1");
        //properties.put("statsd.port","8125");
        StatsdConfig config = new StatsdConfig() {
            //Will use localhost 8125 if get returns null always
            @Override
            public String get(String k) {
                /*
                System.out.println("Key " +k+ " is called");
                if (k.equals("statsd.host")){
                    System.out.println("The host is "+properties.getProperty(k));
                }
                return properties.getProperty(k);

                 */
                return null;
            }
            @Override
            public StatsdFlavor flavor() {
                return StatsdFlavor.TELEGRAF;
            }

        };
        MeterRegistry registry = new StatsdMeterRegistry(config, Clock.SYSTEM);
        Counter.builder("loop.counter.test").description("TOTAL_LOOP_COUNTER").tags("LOOP.COUNTER","SAMPLE.LOOP.METER").register(registry).increment();
        Metrics.addRegistry(registry);
        for (int i = 0; i < 50; i++) {
            Metrics.counter("loop.counter.test").increment();
        }
    }
}

Любая помощь будет высоко оценена :)

1 Ответ

0 голосов
/ 15 января 2020

Публикация метрик StatsD является асинхронной, и этот пример просто слишком быстро завершается. Поставьте Thread.sleep(1000) в конце, и показатели будут опубликованы нормально.

...