You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2023/02/13 09:07:00 UTC

[iotdb] 01/04: edit metrics computation

This is an automated email from the ASF dual-hosted git repository.

marklau99 pushed a commit to branch IOTDB-5517
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 715c1a01922e58d4d66644d6d9030a6bb0fce015
Author: liuxuxin <li...@outlook.com>
AuthorDate: Mon Feb 13 15:04:22 2023 +0800

    edit metrics computation
---
 .../iotdb/commons/service/metric/enums/Metric.java |  1 +
 .../iotdb/db/service/metrics/DiskMetrics.java      | 28 ++++++++--------
 .../metrics/io/LinuxDiskMetricsManager.java        | 37 ++++++++++++++++------
 3 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index acff8839f6..18cad095b0 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -29,6 +29,7 @@ public enum Metric {
   DISK_IO_SIZE,
   DISK_IO_OPS,
   DISK_IO_TIME,
+  DISK_IO_AVG_TIME,
   DISK_IO_SECTOR_NUM,
   PROCESS_IO_SIZE,
   PROCESS_IO_OPS,
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java
index 3ac3f087ec..c09b9b8542 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java
@@ -43,7 +43,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadDataSizeForDisk().getOrDefault(diskID, 0L),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "read",
           Tag.NAME.toString(),
           diskID);
@@ -52,7 +52,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteDataSizeForDisk().getOrDefault(diskID, 0L),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "write",
           Tag.NAME.toString(),
           diskID);
@@ -61,7 +61,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadOperationCountForDisk().getOrDefault(diskID, 0),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "read",
           Tag.NAME.toString(),
           diskID);
@@ -70,7 +70,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteOperationCountForDisk().getOrDefault(diskID, 0),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "write",
           Tag.NAME.toString(),
           diskID);
@@ -79,7 +79,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadCostTimeForDisk().getOrDefault(diskID, 0L),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "read",
           Tag.NAME.toString(),
           diskID);
@@ -88,26 +88,26 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteCostTimeForDisk().getOrDefault(diskID, 0L),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "write",
           Tag.NAME.toString(),
           diskID);
       metricService.createAutoGauge(
-          Metric.DISK_IO_TIME.toString(),
+          Metric.DISK_IO_AVG_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgReadCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0).longValue(),
-          Tag.NAME.toString(),
-          "avg_read",
+          Tag.TYPE.toString(),
+          "read",
           Tag.NAME.toString(),
           diskID);
       metricService.createAutoGauge(
-          Metric.DISK_IO_TIME.toString(),
+          Metric.DISK_IO_AVG_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgWriteCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0).longValue(),
-          Tag.NAME.toString(),
-          "avg_write",
+          Tag.TYPE.toString(),
+          "write",
           Tag.NAME.toString(),
           diskID);
       metricService.createAutoGauge(
@@ -115,7 +115,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgSectorCountOfEachReadForDisk().getOrDefault(diskID, 0.0).longValue(),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "read",
           Tag.NAME.toString(),
           diskID);
@@ -124,7 +124,7 @@ public class DiskMetrics implements IMetricSet {
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgSectorCountOfEachWriteForDisk().getOrDefault(diskID, 0.0).longValue(),
-          Tag.NAME.toString(),
+          Tag.TYPE.toString(),
           "write",
           Tag.NAME.toString(),
           diskID);
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java
index 14e4a27600..f724f801dc 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java
@@ -45,9 +45,10 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
   private final int DISK_SECTOR_WRITE_COUNT_OFFSET = 10;
   private final int DISK_WRITE_TIME_COST_OFFSET = 11;
   private final int DISK_IO_TOTAL_TIME_OFFSET = 13;
-  private final long UPDATE_INTERVAL = 10000L;
+  private final long UPDATE_SMALLEST_INTERVAL = 10000L;
   private Set<String> diskIDSet;
   private long lastUpdateTime = 0L;
+  private long updateInterval = 1L;
   private String[] dataNodeProcessId;
   private String[] configNodeProcessId;
   private final Map<String, Integer> lastReadOperationCountForDisk = new HashMap<>();
@@ -71,7 +72,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
     Map<String, Long> readDataMap = new HashMap<>();
     for (Map.Entry<String, Long> entry : incrementReadSectorCountForDisk.entrySet()) {
       // the data size in each sector is 512 byte
-      readDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L);
+      readDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L / updateInterval * 1000L);
     }
     return readDataMap;
   }
@@ -82,7 +83,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
     Map<String, Long> writeDataMap = new HashMap<>();
     for (Map.Entry<String, Long> entry : incrementWriteSectorCountForDisk.entrySet()) {
       // the data size in each sector is 512 byte
-      writeDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L);
+      writeDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L / updateInterval * 1000L);
     }
     return writeDataMap;
   }
@@ -90,22 +91,38 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
   @Override
   public Map<String, Integer> getReadOperationCountForDisk() {
     checkUpdate();
-    return incrementReadOperationCountForDisk;
+    Map<String, Integer> incrementMapPerSecond = new HashMap<>();
+    for (Map.Entry<String, Integer> entry : incrementReadOperationCountForDisk.entrySet()) {
+      incrementMapPerSecond.put(entry.getKey(), (int) (entry.getValue() / updateInterval * 1000L));
+    }
+    return incrementMapPerSecond;
   }
 
   @Override
   public Map<String, Integer> getWriteOperationCountForDisk() {
-    return incrementWriteOperationCountForDisk;
+    Map<String, Integer> incrementMapPerSecond = new HashMap<>();
+    for (Map.Entry<String, Integer> entry : incrementWriteOperationCountForDisk.entrySet()) {
+      incrementMapPerSecond.put(entry.getKey(), (int) (entry.getValue() / updateInterval * 1000L));
+    }
+    return incrementMapPerSecond;
   }
 
   @Override
   public Map<String, Long> getReadCostTimeForDisk() {
-    return incrementReadTimeCostForDisk;
+    Map<String, Long> incrementMapPerSecond = new HashMap<>();
+    for (Map.Entry<String, Long> entry : incrementReadTimeCostForDisk.entrySet()) {
+      incrementMapPerSecond.put(entry.getKey(), entry.getValue() / updateInterval * 1000L);
+    }
+    return incrementMapPerSecond;
   }
 
   @Override
   public Map<String, Long> getWriteCostTimeForDisk() {
-    return incrementWriteTimeCostForDisk;
+    Map<String, Long> incrementMapPerSecond = new HashMap<>();
+    for (Map.Entry<String, Long> entry : incrementWriteTimeCostForDisk.entrySet()) {
+      incrementMapPerSecond.put(entry.getKey(), entry.getValue() / updateInterval * 1000L);
+    }
+    return incrementMapPerSecond;
   }
 
   @Override
@@ -213,7 +230,9 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
   }
 
   private void updateDiskInfo() {
-    lastUpdateTime = System.currentTimeMillis();
+    long currentTime = System.currentTimeMillis();
+    updateInterval = currentTime - lastUpdateTime;
+    lastUpdateTime = currentTime;
     File diskStatsFile = new File(DISK_STATS_FILE_PATH);
     if (!diskStatsFile.exists()) {
       return;
@@ -293,7 +312,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager {
   }
 
   private void checkUpdate() {
-    if (System.currentTimeMillis() - lastUpdateTime > UPDATE_INTERVAL) {
+    if (System.currentTimeMillis() - lastUpdateTime > UPDATE_SMALLEST_INTERVAL) {
       updateDiskInfo();
     }
   }