DropwizardMetricServices # submit() Ich verwende die Messgröße nicht zum zweiten Mal.DropwizardMetricServices sendet die Messgröße nicht zum zweiten Mal an JMX (nach dem ersten Entfernen)
, d. H. Mein Anwendungsfall ist das Entfernen der Messgröße von JMX nach dem Lesen. Und meine Anwendung kann die gleiche Metrik (mit unterschiedlichem Wert) senden.
Zum ersten Mal wird die Metrik-Metrik erfolgreich übergeben (dann entfernt meine Anwendung sie, sobald sie die Metrik gelesen hat). Aber dieselbe Metrik wird nicht zum zweiten Mal eingereicht.
Also, ich bin ein bisschen verwirrt, was wäre der Grund für DropwizardMetricServices # submit() nicht zum zweiten Mal zu arbeiten?
Unten finden Sie den Code ein:
Senden metrisch:
private void submitNonSparseMetric(final String metricName, final long value) {
validateMetricName(metricName);
metricService.submit(metricName, value); // metricService is the DropwizardMetricServices
log(metricName, value);
LOGGER.debug("Submitted the metric {} to JMX", metricName);
}
Code, der die Metrik liest und entfernt:
protected void collectMetrics() {
// Create the connection
Long currTime = System.currentTimeMillis()/1000; // Graphite needs
Socket connection = createConnection();
if (connection == null){
return;
}
// Get the output stream
DataOutputStream outputStream = getDataOutputStream(connection);
if (outputStream == null){
closeConnection();
return;
}
// Get metrics from JMX
Map<String, Gauge> g = metricRegistry.getGauges(); // metricRegistry is com.codahale.metrics.MetricRegistry
for(Entry<String, Gauge> e : g.entrySet()){
String key = e.getKey();
if(p2cMetric(key)){
String metricName = convertToMetricStandard(key);
String metricValue = String.valueOf(e.getValue().getValue());
String metricToSend = String.format("%s %s %s\n", metricName, metricValue, currTime);
try {
writeToStream(outputStream, metricToSend);
// Remove the metric from JMX after successfully sending metric to graphite
removeMetricFromJMX(key);
} catch (IOException e1) {
LOGGER.error("Unable to send metric to Graphite - {}", e1.getMessage());
}
}
}
closeOutputStream();
closeConnection();
}