2016-11-29 6 views
1

私はSpringブートアプリケーションのメトリック測定を追加したいと思います。メトリックはグラファナを介して表示されます。Prometheusを搭載したスプリングアクチュエータ、カスタムMetricWriterは決して呼び出されません

私はプロメテウスと統合スプリングアクチュエータのためにいいarticleを見つけました。

サンプルによると、私はプロメテウスCollectorRegistry に対応CounterまたはGaugeを更新するための私のカスタムMetricWriterを実装する必要がありますそれは次のようになります。

class PrometheusMetricWriter implements MetricWriter { 

    CollectorRegistry registry 

    private final ConcurrentMap<String, Gauge> counters = new ConcurrentHashMap<>() 
    private final ConcurrentHashMap<String, Gauge> gauges = new ConcurrentHashMap<>() 

    @Autowired 
    PrometheusMetricWriter(CollectorRegistry registry) { 
     this.registry = registry 
    } 

    @Override 
    void increment(Delta<?> delta) { 
     counter(delta.name).inc(delta.value.doubleValue()) 
    } 

    @Override 
    void reset(String metricName) { 
     counter(metricName).clear() 
    } 

    @Override 
    void set(Metric<?> value) { 
     println "inside metric writer" 
     gauge(value.name).set(value.value.doubleValue()) 
    } 

    private Counter counter(String name) { 
     def key = sanitizeName(name) 
     counters.computeIfAbsent key, { k -> 
      Counter.build().name(k).help(k).register(registry) 
     } 
    } 

    private Gauge gauge(String name) { 
     def key = sanitizeName(name) 
     gauges.computeIfAbsent key, { k -> 
      Gauge.build().name(k).help(k).register(registry) 
     } 
    } 

    private String sanitizeName(String name) { 
     return name.replaceAll("[^a-zA-Z0-9_]", "_") 
    } 
} 

他の3に必要な要素は次のとおりです。PrometheusEndpointPrometheusMvcEndpointPrometheusEndpointContextConfiguration

結局のところ、収集された指標は「http://localhost:8080/prometheus」というURLを呼び出すことで確認できます。

そして結果は次のようになります。

# HELP gauge_com_egalacoral_spark_stage_vto gauge_com_egalacoral_spark_stage_vto 
# TYPE gauge_com_egalacoral_spark_stage_vto gauge 
gauge_com_egalacoral_spark_stage_vto 4.0 
# HELP gauge_com_egalacoral_spark_test_vfl gauge_com_egalacoral_spark_test_vfl 
# TYPE gauge_com_egalacoral_spark_test_vfl gauge 
gauge_com_egalacoral_spark_test_vfl 16.0 

しかし、私は空のページをを受けています。 いくつかのメトリックを収集するためのテストクラスです。

class Runner { 

    @Autowired 
    GaugeService gaugeService 

    private static final Logger logger = LoggerFactory.getLogger(Runner.class) 

    private ZoneId zoneId = ZoneId.of('Europe/London') 

    private Integer delay = 10 

    @Scheduled(fixedDelay = 10000L) 
    void runOnTest() throws Exception { 

     def now = ZonedDateTime.now(zoneId) 
     println "collect metrics" 
     gaugeService.submit("test", 2.0) 

    } 
} 

P.S:私はGaugeServiceはいくつかの実装を持っていることに気づいた、と私のアプリでは、これはDropwizardMetricServicesです。この実装には、すでに独自のメトリックレジストリが含まれており、メトリックを収集します。 したがって、私が '/ prometheus'エンドポイントを呼び出すときに、CollectorRegistry' in my custom PrometheusMetricWriterに決して空きページがありません。

どうすればこの問題を解決できますか?

答えて

関連する問題