2015-09-04 6 views
5

Ich bin ein Newbee zu Coda Hale Metrics. Ich habe eine Beispiel-Frühlings-App erstellt, die eine einfache REST-konforme Web-Service-Methode hat.Persist Coda Hale Metrik Informationen

Ich habe Meter-, Timer- und Counter-Tools verwendet, die von Coda Hale Metrics Framework bereitgestellt werden, um die Anzahl der Anfragen, das Anfrageverhältnis und die Anforderungsdauer zu verfolgen. Momentan gebe ich diese Informationen an die Konsole aus, indem ich den Console Reporter of Metrics verwende (bitte den Code unten finden).

@Override 
    public void configureReporters(MetricRegistry metricRegistry) { 

     registerReporter(ConsoleReporter.forRegistry(metricRegistry).build()) 
       .start(30, TimeUnit.SECONDS); 
    } 

Ich habe einige Fragen in Bezug auf Coda Hale Metrics.

(1) Derzeit zeigt der Zähler die Gesamtanzahl an. der Anfrage, seit der Server läuft. Gibt es eine Möglichkeit, das Nein zu bekommen? von Anfragen, die in einem bestimmten Berichtszeitraum (z. B .: - zählen für die ersten 30 Sekunden = count1, count für die 2. 30 Sekunden = count2, etc ...)

(2) Ist es möglich, die Dauer jeder Anfrage zu erhalten mit Timer? Currently Timer zeigt Min-, Max- und Durchschnittswerte aller Anfragen an.

(3) Gibt es Möglichkeiten, diese Metrics-Daten in einer externen Datenbank (zB: - MySQL) zu erhalten?

Unten ist meine REST-Service-Methode.

@RequestMapping(value = "/examplerest", method = RequestMethod.GET) 
    @ResponseBody 
    @Metered(name="exampleRestMetered") 
    @Timed(name="exampleRestTimed") 
    @Counted(name="exampleRestCounted", monotonic=true) 
    public String exampleRest(
      HttpServletResponse response) { 

/** 
some logics here 
*/ 
} 

Ich schätze Ihre Anleitung zu diesem Thema.

Danke.

+0

Sie möchten vielleicht Twitter [zipkin] (http://zipkin.io) überprüfen. – brettw

Antwort

0

Der aktuelle Name der Metrikbibliothek lautet Dropwizard Metrics (erwähnen Sie ihn nur, da Sie möglicherweise eine ältere Version verwenden).

Was 3) wenn ich du wäre, ich this Projekt überprüfen würde Cassandra für die Berichterstattung und this Projekt zu Elasticsearch berichten. Sie finden eine Liste von Drittanbieter-Modulen wie dem oben genannten, here.

Mir ist kein Projekt bekannt, das die Daten an eine relationale Datenbank meldet.

zu Elasticsearch Berichterstattung könnte sehr ansprechend sein, da Sie könnten dann Setup Kibana sofort Ihre Daten zu visualisieren (möglicherweise in einer Weise, die in Graphit/Grafana schwierig sein würde)

2

1) Gibt es eine Möglichkeit, die nicht zu bekommen. von Anträgen, die in einem bestimmten Berichtszeitraum gestellt wurden?

Nicht von einem Zähler direkt. Ein Meter oder Timer gibt jedoch eine "m1_rate" aus, die die Anzahl der Anrufe innerhalb der letzten Minute sein sollte.

Im Allgemeinen würde ich den Wert des Leistungsindikators regelmäßig sammeln und eine Abfrage für meine Metrik-Datenbank schreiben, um diese Art von Analyse durchzuführen.

2) Hölle nein. Dafür gibt es keinen Timer. Denken Sie darüber nach: Sie könnten innerhalb eines Berichtsfensters Millionen von Aufrufen an den Timer senden. Wenn all diese Daten beibehalten werden, würde dies sowohl die Größe eines Timers im Speicher als auch die Komplexität der Berechnung der gemeldeten Werte erhöhen.

Wenn Sie wirklich Zeit für jede Anfrage benötigen, ist dies eine Aufgabe für Protokollierung oder Auditing.Sie können auch einige eindeutige Identifizierungsmerkmale der Anforderung protokollieren, um die Leistung auf verschiedenen Achsen zusammenzufassen.

Beachten Sie, dass Sie in der Lage sein, einige der Informationen, die Sie suchen w/r/t zu sammeln Anfrage Zeiten durch die verschiedenen Preise und Meter für einen Timer berichtet. Wenn Sie beispielsweise wissen, dass 1000 Anfragen in der letzten Minute aufgetreten sind (weil die m1_rate 16,6 Hz oder 1000 Anfragen pro Minute beträgt) und Sie wissen, dass die 50. Perzentilzeit 10 ms und die 99. Perzentile 100 ms beträgt, können Sie mindestens 500 Anfragen annehmen abgeschlossen in 10 ms oder weniger und dass 10 oder mehr Anfragen in 100 ms oder mehr abgeschlossen wurden.

3) Sicher. DW Reporter sind steckbar und einfach, man könnte einen Tag schreiben (vorausgesetzt, man findet kein akzeptables Angebot).

BUt IMO, der beste Ort für persistente Metriken ist eine metrikspezifische Datenbank. In das DropWizard-Paket sind zwei Reporter integriert, die dabei helfen: ein Ganglia-Reporter und ein Graphit-Reporter.

Der Vorteil eines dieser Tools besteht darin, dass sie zum effizienten Speichern, Abrufen und Anwenden von Funktionen auf Zeitreihendaten verwendet werden. Bedenken Sie: Sie haben einen Zähler und möchten die Änderungsrate im Zeitverlauf grafisch darstellen. Mit Graphite, wickeln Sie einfach Ihren Anruf ein, um den Wert mit einem Derivat() und bam grafisch darzustellen, Sie haben die Rate. Ich habe keine Ahnung, wie ich diese Operation in SQL durchführen würde, die verständlicherweise mehr mit Sets als mit Serien beschäftigt ist.

+0

Ich habe ähnliche Fragen zu Codahale-Metriken [hier] (http://stackoverflow.com/questions/40903403/how-to-reset-metrics-every-x-seconds). Ich bin verwirrt, wie man die Zähler alle 30 Sekunden zurücksetzt. Nicht sicher, ob wir das schaffen können. – user1950349