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();
}
}