This is an automated email from the ASF dual-hosted git repository.
spricoder pushed a commit to branch feature/memory_zhy
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/feature/memory_zhy by this
push:
new 71b2b31f7b6 add simple memory metrics code
71b2b31f7b6 is described below
commit 71b2b31f7b68a185730e7c9a4041f622461f492c
Author: spricoder <[email protected]>
AuthorDate: Wed Sep 25 18:44:36 2024 +0800
add simple memory metrics code
---
.../logdispatcher/IoTConsensusMemoryManager.java | 14 ++++
.../IoTConsensusMemoryManagerMetrics.java | 11 +++
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 15 ++++
.../db/pipe/resource/memory/PipeMemoryManager.java | 27 +++++++
.../queryengine/execution/memory/MemoryPool.java | 28 +++++++
.../cache/schema/DataNodeDevicePathCache.java | 26 +++++--
.../schema/DeviceUsingTemplateSchemaCache.java | 15 ++++
.../cache/schema/TimeSeriesSchemaCache.java | 15 ++++
.../plan/planner/LocalExecutionPlanner.java | 30 ++++++++
.../fetcher/cache/TableDeviceSchemaCache.java | 15 ++++
.../schemaengine/metric/SchemaEngineMemMetric.java | 25 ++++++
.../db/storageengine/buffer/BloomFilterCache.java | 15 ++++
.../iotdb/db/storageengine/buffer/ChunkCache.java | 14 ++++
.../buffer/TimeSeriesMetadataCache.java | 14 ++++
.../rescon/memory/PrimitiveArrayManager.java | 16 +++-
.../db/storageengine/rescon/memory/SystemInfo.java | 88 ++++++++++++++++++++++
.../rescon/memory/TimePartitionManager.java | 31 ++++++++
.../rescon/memory/TsFileResourceManager.java | 30 ++++++++
.../iotdb/commons/service/metric/enums/Metric.java | 1 +
.../iotdb/commons/service/metric/enums/Tag.java | 3 +-
20 files changed, 426 insertions(+), 7 deletions(-)
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManager.java
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManager.java
index df54918c60e..6be4d3e146a 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManager.java
+++
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManager.java
@@ -20,6 +20,9 @@
package org.apache.iotdb.consensus.iot.logdispatcher;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,6 +40,17 @@ public class IoTConsensusMemoryManager {
private IoTConsensusMemoryManager() {
MetricService.getInstance().addMetricSet(new
IoTConsensusMemoryManagerMetrics(this));
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "IoT-Consensus",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "consensus")
+ .set(maxMemorySizeInByte);
}
public boolean reserve(long size, boolean fromQueue) {
diff --git
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManagerMetrics.java
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManagerMetrics.java
index 28945c4350a..8c5c30d7d58 100644
---
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManagerMetrics.java
+++
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/logdispatcher/IoTConsensusMemoryManagerMetrics.java
@@ -42,6 +42,17 @@ public class IoTConsensusMemoryManagerMetrics implements
IMetricSet {
IoTConsensusMemoryManager::getMemorySizeInByte,
Tag.NAME.toString(),
"IoTConsensus");
+ metricService.createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ iotConsensusMemoryManager,
+ IoTConsensusMemoryManager::getMemorySizeInByte,
+ Tag.NAME.toString(),
+ "IoT-Consensus",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "consensus");
metricService.createAutoGauge(
Metric.MEM.toString(),
MetricLevel.IMPORTANT,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 2689e3973c9..ba1dfee65f9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -25,6 +25,8 @@ import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.schema.SchemaConstant;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.NodeUrlUtils;
import org.apache.iotdb.confignode.rpc.thrift.TCQConfig;
import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
@@ -52,10 +54,12 @@ import
org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
import org.apache.iotdb.external.api.IPropertiesLoader;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.metrics.config.ReloadLevel;
+import org.apache.iotdb.metrics.core.IoTDBMetricManager;
import org.apache.iotdb.metrics.metricsets.system.SystemMetrics;
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalMemoryReporter;
import org.apache.iotdb.metrics.reporter.iotdb.IoTDBInternalReporter;
import org.apache.iotdb.metrics.utils.InternalReporterType;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.iotdb.metrics.utils.NodeType;
import org.apache.iotdb.rpc.DeepCopyRpcTransportFactory;
import org.apache.iotdb.rpc.ZeroCopyRpcTransportFactory;
@@ -2094,6 +2098,17 @@ public class IoTDBDescriptor {
maxMemoryAvailable * Integer.parseInt(proportions[2].trim()) /
proportionSum);
conf.setAllocateMemoryForCoordinator(
maxMemoryAvailable * Integer.parseInt(proportions[3].trim()) /
proportionSum);
+ IoTDBMetricManager.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "Coordinator",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query")
+ .set(maxMemoryAvailable *
Integer.parseInt(proportions[3].trim()) / proportionSum);
conf.setAllocateMemoryForOperators(
maxMemoryAvailable * Integer.parseInt(proportions[4].trim()) /
proportionSum);
conf.setAllocateMemoryForDataExchange(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryManager.java
index 4763fcc71b4..4a758ea2638 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryManager.java
@@ -21,8 +21,12 @@ package org.apache.iotdb.db.pipe.resource.memory;
import
org.apache.iotdb.commons.exception.pipe.PipeRuntimeOutOfMemoryCriticalException;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.pipe.agent.PipeDataNodeAgent;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,6 +71,29 @@ public class PipeMemoryManager {
"PipeMemoryManager#tryExpandAll()",
this::tryExpandAllAndCheckConsistency,
PipeConfig.getInstance().getPipeMemoryExpanderIntervalSeconds());
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "total",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "stream")
+ .set(TOTAL_MEMORY_SIZE_IN_BYTES);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ PipeMemoryManager::getUsedMemorySizeInBytes,
+ Tag.NAME.toString(),
+ "total",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "stream");
}
public synchronized PipeMemoryBlock forceAllocate(long sizeInBytes)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/memory/MemoryPool.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/memory/MemoryPool.java
index a9ab6ed5d81..806f21d9842 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/memory/MemoryPool.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/memory/MemoryPool.java
@@ -19,8 +19,12 @@
package org.apache.iotdb.db.queryengine.execution.memory;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.exception.runtime.MemoryLeakException;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.google.common.util.concurrent.AbstractFuture;
import com.google.common.util.concurrent.Futures;
@@ -135,6 +139,30 @@ public class MemoryPool {
maxBytes);
this.maxBytesPerFragmentInstance = maxBytesPerFragmentInstance;
this.remainingBytes = new AtomicLong(maxBytes);
+
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "DataExchange",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query")
+ .set(maxBytes);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ MemoryPool::getRemainingBytes,
+ Tag.NAME.toString(),
+ "DataExchange",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "query");
}
public String getId() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeDevicePathCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeDevicePathCache.java
index 4fe88a9c24f..0c05ffe084b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeDevicePathCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeDevicePathCache.java
@@ -21,8 +21,12 @@ package
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
@@ -36,16 +40,28 @@ public class DataNodeDevicePathCache {
private final Cache<String, PartialPath> devicePathCache;
private DataNodeDevicePathCache() {
+ long maxWeight =
+ (long)
+ (config.getAllocateMemoryForStorageEngine()
+ * config.getWriteProportionForMemtable()
+ * config.getDevicePathCacheProportion());
devicePathCache =
Caffeine.newBuilder()
- .maximumWeight(
- (long)
- (config.getAllocateMemoryForStorageEngine()
- * config.getWriteProportionForMemtable()
- * config.getDevicePathCacheProportion()))
+ .maximumWeight(maxWeight)
.weigher(
(Weigher<String, PartialPath>) (key, val) ->
(PartialPath.estimateSize(val) + 32))
.build();
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "DataNodeDevicePathCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "storage-cache")
+ .set(maxWeight);
}
public static DataNodeDevicePathCache getInstance() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DeviceUsingTemplateSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DeviceUsingTemplateSchemaCache.java
index 50e59e90662..5b97753b4d3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DeviceUsingTemplateSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DeviceUsingTemplateSchemaCache.java
@@ -21,6 +21,9 @@ package
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
@@ -28,6 +31,7 @@ import
org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputation;
import org.apache.iotdb.db.schemaengine.template.ITemplateManager;
import org.apache.iotdb.db.schemaengine.template.Template;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
@@ -63,6 +67,17 @@ public class DeviceUsingTemplateSchemaCache {
(key, val) -> (PartialPath.estimateSize(key) + 32))
.recordStats()
.build();
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "DeviceUsingTemplateSchemaCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "schema-cache")
+ .set(config.getAllocateMemoryForSchemaCache());
}
public long getHitCount() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/TimeSeriesSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/TimeSeriesSchemaCache.java
index 686df60df36..fb04669f26f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/TimeSeriesSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/TimeSeriesSchemaCache.java
@@ -22,6 +22,9 @@ package
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema;
import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -34,6 +37,7 @@ import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.im
import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.impl.DualKeyCachePolicy;
import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.lastcache.DataNodeLastCacheManager;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputation;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.tsfile.read.TimeValuePair;
import org.apache.tsfile.utils.Pair;
@@ -70,6 +74,17 @@ public class TimeSeriesSchemaCache {
.secondKeySizeComputer(s -> 32 + 2 * s.length())
.valueSizeComputer(SchemaCacheEntry::estimateSize)
.build();
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "TimeSeriesSchemaCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "schema-cache")
+ .set(config.getAllocateMemoryForSchemaCache());
}
public long getHitCount() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
index ecb18e919c9..41260f39a80 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
@@ -19,6 +19,9 @@
package org.apache.iotdb.db.queryengine.plan.planner;
import org.apache.iotdb.commons.path.IFullPath;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.protocol.session.IClientSession;
@@ -38,6 +41,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadataImp
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.storageengine.dataregion.read.QueryDataSourceType;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.slf4j.Logger;
@@ -73,6 +77,32 @@ public class LocalExecutionPlanner {
/** allocated memory for operator execution */
private long freeMemoryForOperators = ALLOCATE_MEMORY_FOR_OPERATORS;
+ private LocalExecutionPlanner() {
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "ChunkCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query-cache")
+ .set(ALLOCATE_MEMORY_FOR_OPERATORS);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ LocalExecutionPlanner::getAllocateMemoryForOperators,
+ Tag.NAME.toString(),
+ "Operators",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "query-cache");
+ }
+
public long getFreeMemoryForOperators() {
return freeMemoryForOperators;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
index baeb5408001..d32dde26e9e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/cache/TableDeviceSchemaCache.java
@@ -19,12 +19,16 @@
package org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.cache;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.IDualKeyCache;
import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.impl.DualKeyCacheBuilder;
import
org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.dualkeycache.impl.DualKeyCachePolicy;
import org.apache.iotdb.db.schemaengine.schemaregion.SchemaRegion;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import java.util.Map;
import java.util.Objects;
@@ -68,6 +72,17 @@ public class TableDeviceSchemaCache {
.secondKeySizeComputer(TableDeviceId::estimateSize)
.valueSizeComputer(TableDeviceCacheEntry::estimateSize)
.build();
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "TableDeviceSchemaCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "schema-cache")
+ .set(config.getAllocateMemoryForSchemaCache());
}
// The input deviceId shall have its tailing nulls trimmed
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
index 839477b434d..37df62ff2b0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.schemaengine.metric;
import org.apache.iotdb.commons.conf.CommonDescriptor;
+import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.service.metric.enums.Metric;
import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.consensus.ConsensusFactory;
@@ -70,6 +71,18 @@ public class SchemaEngineMemMetric implements
ISchemaEngineMetric {
ISchemaEngineStatistics::getMemoryUsage,
Tag.NAME.toString(),
TOTAL_MEM_USAGE);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ engineStatistics,
+ ISchemaEngineStatistics::getMemoryUsage,
+ Tag.NAME.toString(),
+ "SchemaEngine",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "schema");
metricService.createAutoGauge(
Metric.SCHEMA_ENGINE.toString(),
MetricLevel.IMPORTANT,
@@ -77,6 +90,18 @@ public class SchemaEngineMemMetric implements
ISchemaEngineMetric {
ISchemaEngineStatistics::getMemoryCapacity,
Tag.NAME.toString(),
MEM_CAPACITY);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ engineStatistics,
+ ISchemaEngineStatistics::getMemoryCapacity,
+ Tag.NAME.toString(),
+ "SchemaEngine",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "schema");
metricService.createAutoGauge(
Metric.SCHEMA_ENGINE.toString(),
MetricLevel.IMPORTANT,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/BloomFilterCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/BloomFilterCache.java
index ca2f3479908..5e5dcfb3be0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/BloomFilterCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/BloomFilterCache.java
@@ -19,10 +19,14 @@
package org.apache.iotdb.db.storageengine.buffer;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
@@ -69,6 +73,17 @@ public class BloomFilterCache {
FileReaderManager.getInstance().get(key.filePath, true);
return reader.readBloomFilter();
});
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "BloomFilterCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query-cache")
+ .set(MEMORY_THRESHOLD_IN_BLOOM_FILTER_CACHE);
}
public static BloomFilterCache getInstance() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
index 3ad81d39930..e3cb5480181 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
@@ -20,6 +20,8 @@
package org.apache.iotdb.db.storageengine.buffer;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -27,6 +29,7 @@ import
org.apache.iotdb.db.queryengine.metric.ChunkCacheMetrics;
import org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
import
org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
@@ -94,6 +97,17 @@ public class ChunkCache {
}
});
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "ChunkCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query-cache")
+ .set(MEMORY_THRESHOLD_IN_CHUNK_CACHE);
// add metrics
MetricService.getInstance().addMetricSet(new ChunkCacheMetrics(this));
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
index 2e7e2b2b627..a681b2822db 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
@@ -21,6 +21,8 @@ package org.apache.iotdb.db.storageengine.buffer;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -28,6 +30,7 @@ import
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
import org.apache.iotdb.db.queryengine.metric.TimeSeriesMetadataCacheMetrics;
import
org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
@@ -94,6 +97,17 @@ public class TimeSeriesMetadataCache {
(int) (key.getRetainedSizeInBytes() +
value.getRetainedSizeInBytes()))
.recordStats()
.build();
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "TimeSeriesMetaCache",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query-cache")
+ .set(MEMORY_THRESHOLD_IN_TIME_SERIES_METADATA_CACHE);
// add metrics
MetricService.getInstance().addMetricSet(new
TimeSeriesMetadataCacheMetrics(this));
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java
index f3363ef7627..2ad168ce883 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java
@@ -18,9 +18,13 @@
*/
package org.apache.iotdb.db.storageengine.rescon.memory;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Binary;
@@ -82,7 +86,17 @@ public class PrimitiveArrayManager {
private static void init() {
LOGGER.info("BufferedArraySizeThreshold is {}",
POOLED_ARRAYS_MEMORY_THRESHOLD);
-
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "pooled_array",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "storage-write")
+ .set((long) POOLED_ARRAYS_MEMORY_THRESHOLD);
// POOLED_ARRAYS_MEMORY_THRESHOLD = ∑(datatype[i].getDataTypeSize() *
ARRAY_SIZE * LIMITS[i])
// we init all LIMITS[i] with the same value, so we have
// => LIMITS[i] = POOLED_ARRAYS_MEMORY_THRESHOLD / ARRAY_SIZE /
∑(datatype[i].getDataTypeSize())
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/SystemInfo.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/SystemInfo.java
index 0458320af05..c28d1c8ec54 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/SystemInfo.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/SystemInfo.java
@@ -21,6 +21,9 @@ package org.apache.iotdb.db.storageengine.rescon.memory;
import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
import org.apache.iotdb.commons.concurrent.ThreadName;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -31,6 +34,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.constant.Compacti
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.CompactionFileCountExceededException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.CompactionMemoryNotEnoughException;
import org.apache.iotdb.db.storageengine.dataregion.memtable.TsFileProcessor;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -403,12 +407,96 @@ public class SystemInfo {
(config.getAllocateMemoryForStorageEngine() *
config.getWriteProportionForMemtable());
memorySizeForCompaction =
(long) (config.getAllocateMemoryForStorageEngine() *
config.getCompactionProportion());
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "total",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "off-heap")
+ .set(config.getMaxOffHeapMemoryBytes());
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "direct_buffer",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "off-heap")
+ .set(totalDirectBufferMemorySizeLimit);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ directBufferMemoryCost,
+ AtomicLong::get,
+ Tag.NAME.toString(),
+ "direct_buffer",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "storage-write");
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "memtable",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "storage-write")
+ .set(memorySizeForMemtable);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ SystemInfo::getMemorySizeForMemtable,
+ Tag.NAME.toString(),
+ "memtable",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "storage-write");
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "compaction",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "storage-compaction")
+ .set(memorySizeForCompaction);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ directBufferMemoryCost,
+ AtomicLong::get,
+ Tag.NAME.toString(),
+ "compaction",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "storage-compaction");
FLUSH_THRESHOLD = memorySizeForMemtable * config.getFlushProportion();
REJECT_THRESHOLD = memorySizeForMemtable * config.getRejectProportion();
WritingMetrics.getInstance().recordFlushThreshold(FLUSH_THRESHOLD);
WritingMetrics.getInstance().recordRejectThreshold(REJECT_THRESHOLD);
}
+ long getMemorySizeForMemtable() {
+ return memorySizeForMemtable;
+ }
+
@TestOnly
public void setMemorySizeForCompaction(long size) {
memorySizeForCompaction = size;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TimePartitionManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TimePartitionManager.java
index 0d545af0c98..16d3cba6c33 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TimePartitionManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TimePartitionManager.java
@@ -20,11 +20,15 @@
package org.apache.iotdb.db.storageengine.rescon.memory;
import org.apache.iotdb.commons.consensus.DataRegionId;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.pipe.extractor.dataregion.realtime.listener.PipeTimePartitionListener;
import org.apache.iotdb.db.storageengine.StorageEngine;
import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.tsfile.utils.Pair;
import org.slf4j.Logger;
@@ -47,6 +51,33 @@ public class TimePartitionManager {
private TimePartitionManager() {
timePartitionInfoMap = new HashMap<>();
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ TimePartitionManager::getMemCost,
+ Tag.NAME.toString(),
+ "timePartitionInfo",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "storage");
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "timePartitionInfo",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "storage")
+ .set(timePartitionInfoMemoryThreshold);
+ }
+
+ long getMemCost() {
+ return memCost;
}
public void registerTimePartitionInfo(TimePartitionInfo timePartitionInfo) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TsFileResourceManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TsFileResourceManager.java
index 9da89447c72..64a09f6a435 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TsFileResourceManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/TsFileResourceManager.java
@@ -18,11 +18,15 @@
*/
package org.apache.iotdb.db.storageengine.rescon.memory;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.TimeIndexLevel;
+import org.apache.iotdb.metrics.utils.MetricLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,6 +51,32 @@ public class TsFileResourceManager {
// degraded time index number
private long degradedTimeIndexNum = 0;
+ private TsFileResourceManager() {
+ MetricService.getInstance()
+ .getOrCreateGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ Tag.NAME.toString(),
+ "TimeIndex",
+ Tag.TYPE.toString(),
+ "threshold",
+ Tag.MODULE.toString(),
+ "query")
+ .set(timeIndexMemoryThreshold);
+ MetricService.getInstance()
+ .createAutoGauge(
+ Metric.IOT_MEMORY.toString(),
+ MetricLevel.IMPORTANT,
+ this,
+ TsFileResourceManager::getTotalTimeIndexMemCost,
+ Tag.NAME.toString(),
+ "TimeIndex",
+ Tag.TYPE.toString(),
+ "actual",
+ Tag.MODULE.toString(),
+ "query");
+ }
+
@TestOnly
public void setTimeIndexMemoryThreshold(long timeIndexMemoryThreshold) {
this.timeIndexMemoryThreshold = timeIndexMemoryThreshold;
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index 7c2f4ac1016..89b2f82ccdb 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -179,6 +179,7 @@ public enum Metric {
LOAD_TIME_COST("load_time_cost"),
LOAD_POINT_COUNT("load_point_count"),
MEMTABLE_POINT_COUNT("memtable_point_count"),
+ IOT_MEMORY("iot_memory"),
;
final String value;
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
index f3062737d92..60a09edd0b7 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
@@ -30,7 +30,8 @@ public enum Tag {
OPERATION("operation"),
INTERFACE("interface"),
CREATION_TIME("creation_time"),
- INDEX("index");
+ INDEX("index"),
+ MODULE("module");
final String value;