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:25:04 UTC

[iotdb] branch master updated: [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 master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b4732ccd9 [IOTDB-5379] Fix the unit of Prometheus timer metric values (#8773)
2b4732ccd9 is described below

commit 2b4732ccd99b943864fd34226b9bc44a8d9bff79
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);