2014-04-02 59 views
3

我們使用包含代碼的指標庫的dropwizard。我想用這個庫來報告Java應用程序的一些指標。 我們有一個自定義指標報告引擎,用於處理由內部應用程序發出的指標,但期望指標具有特定的JSON格式。使Metrics庫能夠以自定義JSON格式報告指標的最佳方式是什麼?這是否需要將代碼更改爲度量標準庫?或者我必須編寫一個自定義翻譯器應用程序?指標報告定製

我在「指標」手冊或谷歌上找不到關於自定義報告的任何內容。這也給我帶來了這樣的問題:「這是正確的做法嗎?」

歡迎任何建議/想法。謝謝。

回答

3

度量標準附帶metrics-json,其中有兩個可重複使用的模塊供Jackson使用。

這允許將所有度量類型和運行狀況檢查序列化爲標準的,易於解析的JSON格式。

這裏是在GitHub上的包:https://github.com/dropwizard/metrics/tree/master/metrics-json

您也可以在度量實例的數據建立自己的JSON數據。

您可以通過HTTP發送您的JSON,或者您正在使用的發送數據的數據發送到您的指標引擎。

+3

任何文件爲'指標,JSON '圖書館?網站在這裏,但我沒有看到任何文檔:https://dropwizard.github.io/metrics/3.1.0/manual/json/ –

0

這裏是一個例子JsonSl4jReporter

public class JsonSl4jReporter extends ScheduledReporter { 

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

    private final ObjectMapper mapper; 

    public static JsonSl4jReporter create(MetricRegistry registry) { 
     return new JsonSl4jReporter(registry, MetricFilter.ALL, TimeUnit.SECONDS, TimeUnit.MILLISECONDS); 
    } 

    private JsonSl4jReporter(MetricRegistry registry, MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit) { 
     super(registry, "json-sl4j-reporter", filter, rateUnit, durationUnit); 
     // from metrics-json 
     MetricsModule metricsModule = new MetricsModule(rateUnit, durationUnit, false, filter); 
     // jackson mapper 
     mapper = new ObjectMapper().registerModule(metricsModule); 
     mapper.enable(SerializationFeature.INDENT_OUTPUT); 
    } 

    @Override 
    public void report(SortedMap<String, Gauge> gauges, SortedMap<String, Counter> counters, SortedMap<String, Histogram> histograms, SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) { 
     log(gauges); 
     log(counters); 
     log(histograms); 
     log(meters); 
     log(timers); 
    } 

    private void log(Map<String, ?> data){ 

     if(data.isEmpty()) return; 

     try { 
      String json = mapper.writeValueAsString(data); 
      logger.debug(json); 
     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

正如你所看到的,你就必須使用MetricModulObjectMapper配置指標,JSON