2015-09-04 16 views
5

Sono una newbee di Coda Hale Metrics. Ho creato un'app di esempio che sta avendo un semplice metodo di servizio web RESTful.Persist Coda Hale Informazioni metriche

Ho utilizzato strumenti Meter, Timer e Counter forniti dal framework Coda Hale Metrics per tracciare il numero di richieste, il rapporto di richiesta e la durata della richiesta. Attualmente invio queste informazioni alla console utilizzando la Console Reporter of Metrics (si prega di trovare il codice sotto).

@Override 
    public void configureReporters(MetricRegistry metricRegistry) { 

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

Ho alcune domande su Coda Hale Metrics.

(1) Attualmente il contatore mostra il numero totale. della richiesta effettuata da quando il server è attivo. C'è un modo per ottenere il no. di richieste fatte in un periodo di riferimento specifico (es: - contare per 1o 30 secondi = conto1, contare per 2o 30 secondi = conto2, ecc ...)

(2) È possibile ottenere la durata di ciascuna richiesta using Timer? Attualmente il timer mostra i tassi minimi, massimi e medi di tutte le richieste fatte.

(3) Esistono possibilità di mantenere tali dati metrici in un DB esterno (ad esempio: - MySQL)?

Di seguito è riportato il mio metodo di servizio REST.

@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 
*/ 
} 

Apprezzo la vostra guida su questo.

Grazie.

+0

Si potrebbe voler controllare Twitter [zipkin] (http://zipkin.io). – brettw

risposta

0

Il nome corrente della libreria delle metriche è Dropwizard Metrics (solo menzionandolo poiché potresti utilizzare una versione precedente).

Per quanto riguarda 3) se fossi in te, vorrei verificare fuori this progetto per la segnalazione a Cassandra e this progetto per la segnalazione a elasticsearch. È possibile trovare un elenco di moduli di terze parti come il già citato, here.

Non sono a conoscenza di alcun progetto che segnala i dati a un database relazionale.

Informativa al elasticsearch potrebbe essere molto interessante dal momento che si potrebbe quindi l'installazione Kibana di visualizzare immediatamente i dati (possibilmente in modi che sarebbero difficili in Grafite/Grafana)

2

1) Ci sono un modo per ottenere il no. delle richieste fatte in uno specifico periodo di segnalazione?

Non direttamente da un contatore. Tuttavia, un misuratore o un timer emette un "m1_rate" che dovrebbe essere il conteggio delle chiamate nel minuto passato.

Generalmente, raccoglierei il valore del contatore periodicamente e scrivo una query sul mio database di metriche per eseguire questo tipo di analisi.

2) Inferno no. Questo non è ciò che un Timer è per. Pensaci: potresti avere milioni di chiamate a Timer all'interno di una finestra di reporting. Mantenere tutti i dati in giro aumenterebbe la dimensione di un timer in memoria e la complessità del calcolo dei valori riportati.

Se si ha realmente bisogno del tempo per ogni richiesta, questo è un lavoro per la registrazione o il controllo.È inoltre possibile registrare alcune caratteristiche di identificazione univoche della richiesta per facilitare il rollup delle prestazioni lungo vari assi.

Nota che potresti essere in grado di assemblare alcune delle informazioni che stai cercando w/r/t raccogliendo le tempistiche delle richieste attraverso le varie tariffe e metri indicati per un timer. Ad esempio, se sai che 1000 richieste sono avvenute nell'ultimo minuto (perché la m1_rate è 16,6 Hz o 1000 richieste al minuto) e sai che il 50 ° Percentile è 10 ms e il 99 ° Percentile è 100 ms, puoi supporre almeno 500 richieste completato in 10 ms o meno e che 10 o più richieste completate in 100 ms o più.

3) Sicuro. I segnalatori DW sono innestabili e folli di base, è possibile scrivere uno in un giorno (supponendo che non sia possibile trovare un'offerta aperta accettabile).

BUt IMO, il posto migliore per mantenere le metriche è un database specifico della metrica. Ci sono due reporter incorporati nel pacchetto DropWizard che aiutano con questo: un reporter Ganglia e un reporter di grafite.

Il vantaggio di utilizzare uno di questi strumenti è che sono costruiti per l'archiviazione efficiente, il recupero e l'applicazione di funzioni sui dati delle serie temporali. Considera: hai un contatore e vuoi rappresentare graficamente la sua velocità nel tempo. Con Graphite, tieni semplicemente la tua chiamata per tracciare il grafico con un derivativo() e bam, hai la tariffa. Non ho idea di come eseguire questa operazione in SQL, il che è comprensibilmente più preoccupato per gli insiemi che per le serie.

+0

Ho una domanda simile sulle metriche di codahale [qui] (http://stackoverflow.com/questions/40903403/how-to-reset-metrics-every-x-seconds). Sono confuso su come reimpostare i contatori ogni 30 secondi. Non sono sicuro che possiamo farlo. – user1950349