You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2023/01/06 12:27:29 UTC
[iotdb] 01/01: [IOTDB-5379] Fix the unit of Prometheus timer metric values (#8773)
This is an automated email from the ASF dual-hosted git repository.
ericpai pushed a commit to branch bugfix/cp-iotdb-5379
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 94f02065203e8f46063f2229786ffaaa986614ac
Author: BaiJian <er...@hotmail.com>
AuthorDate: Fri Jan 6 20:24:56 2023 +0800
[IOTDB-5379] Fix the unit of Prometheus timer metric values (#8773)
---
.../Apache-IoTDB-ConfigNode-Dashboard.json | 2 +-
.../Apache-IoTDB-DataNode-Dashboard.json | 6 ++---
.../type/DropwizardHistogramSnapshot.java | 14 +++++-----
.../metrics/impl/DoNothingHistogramSnapshot.java | 12 ++++-----
.../iotdb/metrics/type/HistogramSnapshot.java | 6 ++---
.../type/MicrometerHistogramSnapshot.java | 14 +++++-----
.../metrics/micrometer/type/MicrometerTimer.java | 2 +-
....java => MicrometerTimerHistogramSnapshot.java} | 30 ++++++++++++----------
.../apache/iotdb/db/metric/MetricServiceTest.java | 4 +--
9 files changed, 49 insertions(+), 41 deletions(-)
diff --git a/docs/UserGuide/Monitor-Alert/Apache-IoTDB-ConfigNode-Dashboard.json b/docs/UserGuide/Monitor-Alert/Apache-IoTDB-ConfigNode-Dashboard.json
index 4e9a208684..85c39e6ac2 100644
--- a/docs/UserGuide/Monitor-Alert/Apache-IoTDB-ConfigNode-Dashboard.json
+++ b/docs/UserGuide/Monitor-Alert/Apache-IoTDB-ConfigNode-Dashboard.json
@@ -1711,7 +1711,7 @@
}
]
},
- "unit": "ns"
+ "unit": "s"
},
"overrides": []
},
diff --git a/docs/UserGuide/Monitor-Alert/Apache-IoTDB-DataNode-Dashboard.json b/docs/UserGuide/Monitor-Alert/Apache-IoTDB-DataNode-Dashboard.json
index a065285d37..03041fc713 100644
--- a/docs/UserGuide/Monitor-Alert/Apache-IoTDB-DataNode-Dashboard.json
+++ b/docs/UserGuide/Monitor-Alert/Apache-IoTDB-DataNode-Dashboard.json
@@ -785,7 +785,7 @@
}
]
},
- "unit": "ns"
+ "unit": "s"
},
"overrides": []
},
@@ -1269,7 +1269,7 @@
}
]
},
- "unit": "ns"
+ "unit": "s"
},
"overrides": []
},
@@ -3840,7 +3840,7 @@
}
]
},
- "unit": "ns"
+ "unit": "s"
},
"overrides": []
},
diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogramSnapshot.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogramSnapshot.java
index ea40f9ec81..7d430099eb 100644
--- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogramSnapshot.java
+++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogramSnapshot.java
@@ -21,6 +21,8 @@ package org.apache.iotdb.metrics.dropwizard.type;
import org.apache.iotdb.metrics.type.HistogramSnapshot;
+import java.util.Arrays;
+
public class DropwizardHistogramSnapshot implements HistogramSnapshot {
com.codahale.metrics.Snapshot snapshot;
@@ -35,8 +37,8 @@ public class DropwizardHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long[] getValues() {
- return snapshot.getValues();
+ public double[] getValues() {
+ return Arrays.stream(snapshot.getValues()).mapToDouble(k -> k).toArray();
}
@Override
@@ -50,8 +52,8 @@ public class DropwizardHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long getMax() {
- return snapshot.getMax();
+ public double getMax() {
+ return (double) snapshot.getMax();
}
@Override
@@ -60,7 +62,7 @@ public class DropwizardHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long getMin() {
- return snapshot.getMin();
+ public double getMin() {
+ return (double) snapshot.getMin();
}
}
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogramSnapshot.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogramSnapshot.java
index 3536331462..c87af4ef56 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogramSnapshot.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogramSnapshot.java
@@ -28,8 +28,8 @@ public class DoNothingHistogramSnapshot implements HistogramSnapshot, DoNothingM
}
@Override
- public long[] getValues() {
- return new long[0];
+ public double[] getValues() {
+ return new double[0];
}
@Override
@@ -43,8 +43,8 @@ public class DoNothingHistogramSnapshot implements HistogramSnapshot, DoNothingM
}
@Override
- public long getMax() {
- return 0;
+ public double getMax() {
+ return 0.0D;
}
@Override
@@ -53,7 +53,7 @@ public class DoNothingHistogramSnapshot implements HistogramSnapshot, DoNothingM
}
@Override
- public long getMin() {
- return 0;
+ public double getMin() {
+ return 0.0D;
}
}
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/type/HistogramSnapshot.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/type/HistogramSnapshot.java
index 468ab6a44d..c212c73d8a 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/type/HistogramSnapshot.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/type/HistogramSnapshot.java
@@ -29,13 +29,13 @@ public interface HistogramSnapshot extends IMetric {
double getValue(double quantile);
/** Get values in snapshot. */
- long[] getValues();
+ double[] getValues();
/** Get the size of values in snapshot. */
int size();
/** Get min value in values. */
- long getMin();
+ double getMin();
/** Get median value in values. */
double getMedian();
@@ -44,7 +44,7 @@ public interface HistogramSnapshot extends IMetric {
double getMean();
/** Get max value in values. */
- long getMax();
+ double getMax();
@Override
default void constructValueMap(Map<String, Object> result) {
diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
index 7e3bb5879d..de36d7e633 100644
--- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
+++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
@@ -21,6 +21,8 @@ package org.apache.iotdb.metrics.micrometer.type;
import org.apache.iotdb.metrics.type.HistogramSnapshot;
+import io.micrometer.core.instrument.distribution.ValueAtPercentile;
+
import java.util.Arrays;
public class MicrometerHistogramSnapshot implements HistogramSnapshot {
@@ -49,9 +51,9 @@ public class MicrometerHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long[] getValues() {
+ public double[] getValues() {
return Arrays.stream(this.histogramSnapshot.percentileValues())
- .mapToLong(k -> (long) k.value())
+ .mapToDouble(ValueAtPercentile::value)
.toArray();
}
@@ -66,8 +68,8 @@ public class MicrometerHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long getMax() {
- return (long) this.histogramSnapshot.max();
+ public double getMax() {
+ return this.histogramSnapshot.max();
}
@Override
@@ -76,8 +78,8 @@ public class MicrometerHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long getMin() {
+ public double getMin() {
// need distributionSummary to push 0 percentiles
- return (long) getValue(0.0);
+ return getValue(0.0);
}
}
diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimer.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimer.java
index a58713d9c4..c9fa79045d 100644
--- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimer.java
+++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimer.java
@@ -44,7 +44,7 @@ public class MicrometerTimer implements Timer {
@Override
public HistogramSnapshot takeSnapshot() {
- return new MicrometerHistogramSnapshot(timer.takeSnapshot());
+ return new MicrometerTimerHistogramSnapshot(timer.takeSnapshot(), timer.baseTimeUnit());
}
@Override
diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimerHistogramSnapshot.java
similarity index 73%
copy from metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
copy to metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimerHistogramSnapshot.java
index 7e3bb5879d..574de1b167 100644
--- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
+++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimerHistogramSnapshot.java
@@ -7,7 +7,7 @@
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
@@ -16,20 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.iotdb.metrics.micrometer.type;
import org.apache.iotdb.metrics.type.HistogramSnapshot;
import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
-public class MicrometerHistogramSnapshot implements HistogramSnapshot {
+/** This implementation is just for a timer as it needs the TimeUnit to convert from nanoseconds. */
+public class MicrometerTimerHistogramSnapshot implements HistogramSnapshot {
io.micrometer.core.instrument.distribution.HistogramSnapshot histogramSnapshot;
+ private final TimeUnit baseTimeUnit;
- public MicrometerHistogramSnapshot(
- io.micrometer.core.instrument.distribution.HistogramSnapshot histogramSnapshot) {
+ public MicrometerTimerHistogramSnapshot(
+ io.micrometer.core.instrument.distribution.HistogramSnapshot histogramSnapshot,
+ TimeUnit baseTimeUnit) {
this.histogramSnapshot = histogramSnapshot;
+ this.baseTimeUnit = baseTimeUnit;
}
@Override
@@ -45,13 +49,13 @@ public class MicrometerHistogramSnapshot implements HistogramSnapshot {
}
}
- return this.histogramSnapshot.percentileValues()[prevIndex].value();
+ return this.histogramSnapshot.percentileValues()[prevIndex].value(baseTimeUnit);
}
@Override
- public long[] getValues() {
+ public double[] getValues() {
return Arrays.stream(this.histogramSnapshot.percentileValues())
- .mapToLong(k -> (long) k.value())
+ .mapToDouble(k -> k.value(baseTimeUnit))
.toArray();
}
@@ -66,18 +70,18 @@ public class MicrometerHistogramSnapshot implements HistogramSnapshot {
}
@Override
- public long getMax() {
- return (long) this.histogramSnapshot.max();
+ public double getMax() {
+ return this.histogramSnapshot.max(baseTimeUnit);
}
@Override
public double getMean() {
- return this.histogramSnapshot.mean();
+ return this.histogramSnapshot.mean(baseTimeUnit);
}
@Override
- public long getMin() {
+ public double getMin() {
// need distributionSummary to push 0 percentiles
- return (long) getValue(0.0);
+ return getValue(0.0);
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metric/MetricServiceTest.java b/server/src/test/java/org/apache/iotdb/db/metric/MetricServiceTest.java
index dc0f1bcc68..a2381a04e4 100644
--- a/server/src/test/java/org/apache/iotdb/db/metric/MetricServiceTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metric/MetricServiceTest.java
@@ -195,8 +195,8 @@ public class MetricServiceTest {
metricService.histogram(50, "histogram1", MetricLevel.IMPORTANT, "tag", "value");
assertEquals(5, histogram1.count());
assertEquals(5, histogram1.takeSnapshot().size());
- assertEquals(10, histogram1.takeSnapshot().getMin());
- assertEquals(50, histogram1.takeSnapshot().getMax());
+ assertEquals(10.0D, histogram1.takeSnapshot().getMin(), 0.00001);
+ assertEquals(50.0D, histogram1.takeSnapshot().getMax(), 0.00001);
Histogram histogram2 =
metricService.getOrCreateHistogram("histogram1", MetricLevel.IMPORTANT, "tag", "value");
assertEquals(histogram1, histogram2);