You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/10/26 15:25:37 UTC

[iotdb] branch master updated: [IOTDB-4651] Remove Predefined Metric Sets and Add MultiLeader metrics. (#7602)

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

xingtanzjr 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 9f8bcc7692 [IOTDB-4651] Remove Predefined Metric Sets and Add MultiLeader metrics. (#7602)
9f8bcc7692 is described below

commit 9f8bcc7692183207acfb2a67ddc7348ad5849350
Author: ZhangHongYin <46...@users.noreply.github.com>
AuthorDate: Wed Oct 26 23:25:30 2022 +0800

    [IOTDB-4651] Remove Predefined Metric Sets and Add MultiLeader metrics. (#7602)
---
 .../iotdb/confignode/manager/load/LoadManager.java |  2 +-
 .../manager/load/LoadManagerMetrics.java           |  4 +-
 .../iotdb/confignode/manager/node/NodeManager.java |  2 +-
 .../manager/partition/PartitionManager.java        |  2 +-
 .../persistence/metric/NodeInfoMetrics.java        |  4 +-
 .../persistence/metric/PartitionInfoMetrics.java   |  4 +-
 .../persistence/partition/PartitionInfo.java       |  6 +-
 .../iotdb/confignode/service/ConfigNode.java       | 12 ++-
 .../service/thrift/ConfigNodeRPCService.java       |  2 +-
 .../thrift/ConfigNodeRPCServiceHandler.java        |  2 +-
 .../thrift/ConfigNodeRPCServiceHandlerMetrics.java |  4 +-
 .../thrift/ConfigNodeRPCServiceMetrics.java        |  4 +-
 .../resources/confignode1conf/iotdb-metric.yml     |  5 --
 .../resources/confignode2conf/iotdb-metric.yml     |  5 --
 .../resources/confignode3conf/iotdb-metric.yml     |  5 --
 .../multileader/MultiLeaderServerImpl.java         | 65 +++++++++++++++
 .../multileader/MultiLeaderServerMetrics.java      | 88 ++++++++++++++++++++
 .../multileader/client/DispatchLogHandler.java     | 15 ++++
 .../multileader/logdispatcher/LogDispatcher.java   | 23 ++++++
 .../logdispatcher/LogDispatcherThreadMetrics.java  | 95 ++++++++++++++++++++++
 .../logdispatcher/MultiLeaderMemoryManager.java    | 10 ++-
 .../MultiLeaderMemoryManagerMetrics.java           | 41 +++-------
 docs/UserGuide/Maintenance-Tools/Metric-Tool.md    |  6 --
 docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md |  7 --
 .../src/test/resources/logback-test.xml            |  2 +-
 integration/src/test/resources/logback-test.xml    |  2 +-
 metrics/ReadMe.md                                  |  9 +-
 .../resources/conf/iotdb-confignode-metric.yml     |  5 --
 .../resources/conf/iotdb-datanode-metric.yml       |  5 --
 .../iotdb/metrics/AbstractMetricService.java       | 19 ++---
 .../iotdb/metrics/DoNothingMetricService.java      |  6 --
 .../apache/iotdb/metrics/config/MetricConfig.java  | 15 ----
 .../metrics/config/MetricConfigDescriptor.java     |  1 -
 .../jvm/JvmClassLoaderMetrics.java                 |  2 +-
 .../{predefined => }/jvm/JvmCompileMetrics.java    |  2 +-
 .../{predefined => }/jvm/JvmGcMetrics.java         |  2 +-
 .../{predefined => }/jvm/JvmMemoryMetrics.java     |  2 +-
 .../{predefined => }/jvm/JvmMetrics.java           |  2 +-
 .../{predefined => }/jvm/JvmThreadMetrics.java     |  2 +-
 .../metricsets/{predefined => }/jvm/JvmUtils.java  |  2 +-
 .../{predefined => }/logback/LogbackMetrics.java   |  2 +-
 .../logback/MetricsTurboFilter.java                |  2 +-
 .../metricsets/predefined/PredefinedMetric.java    | 33 --------
 .../iotdb/metrics/config/MetricConfigTest.java     |  1 -
 .../interface/src/test/resources/iotdb-metric.yml  |  8 --
 node-commons/pom.xml                               | 16 ++++
 .../commons/service/metric}/MetricService.java     | 35 +-------
 .../service/metric}/MetricServiceMBean.java        |  2 +-
 .../commons/service/metric}/enums/Metric.java      |  9 +-
 .../commons/service/metric}/enums/Operation.java   |  2 +-
 .../iotdb/commons/service/metric}/enums/Tag.java   |  3 +-
 server/pom.xml                                     | 10 ---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  5 --
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  2 +-
 .../iotdb/db/engine/TsFileMetricManager.java       |  7 +-
 .../apache/iotdb/db/engine/cache/ChunkCache.java   |  2 +-
 .../iotdb/db/engine/cache/ChunkCacheMetrics.java   |  4 +-
 .../db/engine/cache/TimeSeriesMetadataCache.java   |  2 +-
 .../cache/TimeSeriesMetadataCacheMetrics.java      |  4 +-
 .../apache/iotdb/db/engine/flush/FlushManager.java |  2 +-
 .../iotdb/db/engine/flush/FlushManagerMetrics.java |  4 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |  6 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  6 +-
 .../iotdb/db/engine/storagegroup/DataRegion.java   |  2 +-
 .../db/engine/storagegroup/DataRegionMetrics.java  |  4 +-
 .../engine/storagegroup/TsFileProcessorInfo.java   |  2 +-
 .../storagegroup/TsFileProcessorInfoMetrics.java   |  6 +-
 .../db/metadata/cache/DataNodeSchemaCache.java     |  2 +-
 .../metadata/cache/DataNodeSchemaCacheMetrics.java |  4 +-
 .../db/metadata/rescon/SchemaResourceManager.java  |  2 +-
 .../rescon/SchemaStatisticsManagerMetrics.java     |  4 +-
 .../execution/exchange/MPPDataExchangeService.java |  2 +-
 .../exchange/MPPDataExchangeServiceMetrics.java    |  4 +-
 .../MPPDataExchangeServiceThriftHandler.java       |  2 +-
 ...MppDataExchangeServiceThriftHandlerMetrics.java |  6 +-
 .../db/query/pool/RawQueryReadTaskPoolManager.java |  2 +-
 .../pool/RawQueryReadTaskPoolManagerMetrics.java   |  4 +-
 .../java/org/apache/iotdb/db/service/DataNode.java |  5 +-
 .../db/service/DataNodeInternalRPCService.java     |  2 +-
 .../service/DataNodeInternalRPCServiceMetrics.java |  4 +-
 .../java/org/apache/iotdb/db/service/IoTDB.java    |  5 +-
 .../java/org/apache/iotdb/db/service/NewIoTDB.java |  5 +-
 .../org/apache/iotdb/db/service/RPCService.java    |  2 +-
 .../apache/iotdb/db/service/RPCServiceMetrics.java |  4 +-
 ...erviceMBean.java => DataNodeMetricsHelper.java} | 25 ++++--
 .../metrics/{predefined => }/FileMetrics.java      |  6 +-
 .../metrics/{predefined => }/ProcessMetrics.java   |  6 +-
 .../metrics/{predefined => }/SystemMetrics.java    |  6 +-
 .../metrics/recorder/CacheMetricsRecorder.java     |  6 +-
 .../recorder/CompactionMetricsRecorder.java        |  6 +-
 .../db/service/thrift/ProcessorWithMetrics.java    |  6 +-
 .../handler/InternalServiceThriftHandler.java      |  2 +-
 .../InternalServiceThriftHandlerMetrics.java       |  4 +-
 .../thrift/handler/RPCServiceThriftHandler.java    |  2 +-
 .../handler/RPCServiceThriftHandlerMetrics.java    |  4 +-
 .../service/thrift/impl/ClientRPCServiceImpl.java  |  4 +-
 .../impl/DataNodeInternalRPCServiceImpl.java       |  6 +-
 .../db/service/thrift/impl/TSServiceImpl.java      |  4 +-
 .../test/resources/datanode1conf/iotdb-metric.yml  |  7 +-
 .../test/resources/datanode2conf/iotdb-metric.yml  |  7 +-
 .../test/resources/datanode3conf/iotdb-metric.yml  |  7 +-
 server/src/test/resources/logback-test.xml         |  2 +-
 .../apache/iotdb/spark/db/EnvironmentUtils.java    |  2 +-
 103 files changed, 496 insertions(+), 347 deletions(-)

diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManager.java
index 13ed4a479b..4051dcc433 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManager.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.commons.partition.DataPartitionTable;
 import org.apache.iotdb.commons.partition.SchemaPartitionTable;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.confignode.client.DataNodeRequestType;
 import org.apache.iotdb.confignode.client.async.AsyncDataNodeClientPool;
 import org.apache.iotdb.confignode.client.async.handlers.AsyncClientHandler;
@@ -50,7 +51,6 @@ import org.apache.iotdb.confignode.manager.node.NodeManager;
 import org.apache.iotdb.confignode.manager.partition.PartitionManager;
 import org.apache.iotdb.confignode.persistence.node.NodeStatistics;
 import org.apache.iotdb.confignode.persistence.partition.statistics.RegionGroupStatistics;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.mpp.rpc.thrift.TRegionRouteReq;
 
 import org.slf4j.Logger;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManagerMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManagerMetrics.java
index a9936f764e..989dcaae1b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManagerMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/LoadManagerMetrics.java
@@ -22,12 +22,12 @@ import org.apache.iotdb.common.rpc.thrift.TConfigNodeLocation;
 import org.apache.iotdb.common.rpc.thrift.TDataNodeConfiguration;
 import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
 import org.apache.iotdb.commons.cluster.NodeStatus;
+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.manager.IManager;
 import org.apache.iotdb.confignode.manager.node.NodeManager;
 import org.apache.iotdb.confignode.manager.partition.PartitionManager;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index bc99e8f093..c9c113f240 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.commons.conf.CommonConfig;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.consensus.ConsensusGroupId;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.utils.StatusUtils;
 import org.apache.iotdb.confignode.client.DataNodeRequestType;
 import org.apache.iotdb.confignode.client.async.AsyncConfigNodeHeartbeatClientPool;
@@ -69,7 +70,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TRatisConfig;
 import org.apache.iotdb.consensus.common.DataSet;
 import org.apache.iotdb.consensus.common.Peer;
 import org.apache.iotdb.consensus.common.response.ConsensusGenericResponse;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.mpp.rpc.thrift.THeartbeatReq;
 import org.apache.iotdb.rpc.TSStatusCode;
 
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index 92bba6dfb4..1aaf517313 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.commons.partition.DataPartitionTable;
 import org.apache.iotdb.commons.partition.SchemaPartitionTable;
 import org.apache.iotdb.commons.partition.executor.SeriesPartitionExecutor;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.confignode.client.DataNodeRequestType;
 import org.apache.iotdb.confignode.client.sync.SyncDataNodeClientPool;
 import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
@@ -75,7 +76,6 @@ import org.apache.iotdb.confignode.persistence.partition.statistics.RegionGroupS
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.consensus.common.DataSet;
 import org.apache.iotdb.consensus.common.response.ConsensusReadResponse;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.mpp.rpc.thrift.TCreateDataRegionReq;
 import org.apache.iotdb.mpp.rpc.thrift.TCreateSchemaRegionReq;
 import org.apache.iotdb.rpc.RpcUtils;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/NodeInfoMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/NodeInfoMetrics.java
index 81c7e19d0e..d5c75ec5fb 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/NodeInfoMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/NodeInfoMetrics.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.confignode.persistence.metric;
 
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.confignode.persistence.node.NodeInfo;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/PartitionInfoMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/PartitionInfoMetrics.java
index a72b52e28b..d832f547ce 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/PartitionInfoMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/metric/PartitionInfoMetrics.java
@@ -20,10 +20,10 @@
 package org.apache.iotdb.confignode.persistence.metric;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.confignode.persistence.partition.PartitionInfo;
 import org.apache.iotdb.confignode.persistence.partition.StorageGroupPartitionTable;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
index 8bf978cc7e..e33d850670 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
@@ -28,6 +28,9 @@ import org.apache.iotdb.common.rpc.thrift.TSeriesPartitionSlot;
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.partition.DataPartitionTable;
 import org.apache.iotdb.commons.partition.SchemaPartitionTable;
+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.snapshot.SnapshotProcessor;
 import org.apache.iotdb.confignode.consensus.request.read.GetDataPartitionPlan;
 import org.apache.iotdb.confignode.consensus.request.read.GetRegionIdPlan;
@@ -58,9 +61,6 @@ import org.apache.iotdb.confignode.persistence.partition.statistics.RegionGroupS
 import org.apache.iotdb.confignode.rpc.thrift.TRegionInfo;
 import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq;
 import org.apache.iotdb.consensus.common.DataSet;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index 35b2607b43..a3646f1f66 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.RegisterManager;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.udf.service.UDFClassLoaderManager;
 import org.apache.iotdb.confignode.client.ConfigNodeRequestType;
 import org.apache.iotdb.confignode.client.sync.SyncConfigNodeClientPool;
@@ -37,7 +38,10 @@ import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
 import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
 import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCService;
 import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCServiceProcessor;
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.db.service.metrics.ProcessMetrics;
+import org.apache.iotdb.db.service.metrics.SystemMetrics;
+import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
+import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.slf4j.Logger;
@@ -192,6 +196,12 @@ public class ConfigNode implements ConfigNodeMBean {
     registerManager.register(UDFClassLoaderManager.setupAndGetInstance(CONF.getUdfLibDir()));
 
     registerManager.register(MetricService.getInstance());
+    // bind predefined metric sets
+    MetricService.getInstance().addMetricSet(new JvmMetrics());
+    MetricService.getInstance().addMetricSet(new LogbackMetrics());
+    MetricService.getInstance().addMetricSet(new ProcessMetrics());
+    MetricService.getInstance().addMetricSet(new SystemMetrics());
+
     LOGGER.info("Successfully setup internal services.");
   }
 
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
index 605d47e109..aeaee70f7b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
@@ -26,10 +26,10 @@ import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
 import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
 import org.apache.iotdb.confignode.rpc.thrift.IConfigNodeRPCService;
-import org.apache.iotdb.db.service.metrics.MetricService;
 
 /** ConfigNodeRPCServer exposes the interface that interacts with the DataNode */
 public class ConfigNodeRPCService extends ThriftService implements ConfigNodeRPCServiceMBean {
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
index 21e8f4bf8b..f9892f2ae6 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
@@ -17,7 +17,7 @@
 
 package org.apache.iotdb.confignode.service.thrift;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandlerMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandlerMetrics.java
index 8526847d58..327e854687 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandlerMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandlerMetrics.java
@@ -17,8 +17,8 @@
 
 package org.apache.iotdb.confignode.service.thrift;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceMetrics.java
index 4cedf4c9e6..f266b49844 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceMetrics.java
@@ -19,8 +19,8 @@ package org.apache.iotdb.confignode.service.thrift;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/confignode/src/test/resources/confignode1conf/iotdb-metric.yml b/confignode/src/test/resources/confignode1conf/iotdb-metric.yml
index e516cf26c4..6d4e82e10b 100644
--- a/confignode/src/test/resources/confignode1conf/iotdb-metric.yml
+++ b/confignode/src/test/resources/confignode1conf/iotdb-metric.yml
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9091
 
diff --git a/confignode/src/test/resources/confignode2conf/iotdb-metric.yml b/confignode/src/test/resources/confignode2conf/iotdb-metric.yml
index c1eba1d2f1..8bdbae6800 100644
--- a/confignode/src/test/resources/confignode2conf/iotdb-metric.yml
+++ b/confignode/src/test/resources/confignode2conf/iotdb-metric.yml
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9093
 
diff --git a/confignode/src/test/resources/confignode3conf/iotdb-metric.yml b/confignode/src/test/resources/confignode3conf/iotdb-metric.yml
index 22a4d3c4cb..fceee51f4b 100644
--- a/confignode/src/test/resources/confignode3conf/iotdb-metric.yml
+++ b/confignode/src/test/resources/confignode3conf/iotdb-metric.yml
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9095
 
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerImpl.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerImpl.java
index aaeb63d788..ae13e4df28 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerImpl.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerImpl.java
@@ -22,6 +22,9 @@ package org.apache.iotdb.consensus.multileader;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.client.IClientManager;
+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.IStateMachine;
 import org.apache.iotdb.consensus.common.DataSet;
 import org.apache.iotdb.consensus.common.Peer;
@@ -47,6 +50,7 @@ import org.apache.iotdb.consensus.multileader.thrift.TTriggerSnapshotLoadReq;
 import org.apache.iotdb.consensus.multileader.thrift.TTriggerSnapshotLoadRes;
 import org.apache.iotdb.consensus.multileader.wal.ConsensusReqReader;
 import org.apache.iotdb.consensus.multileader.wal.GetConsensusReqReaderPlan;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.tsfile.utils.PublicBAOS;
@@ -94,6 +98,9 @@ public class MultiLeaderServerImpl {
   private boolean active;
   private String latestSnapshotId;
   private final IClientManager<TEndPoint, SyncMultiLeaderServiceClient> syncClientManager;
+  private final MultiLeaderServerMetrics metrics;
+
+  private final String consensusGroupId;
 
   public MultiLeaderServerImpl(
       String storageDir,
@@ -123,6 +130,8 @@ public class MultiLeaderServerImpl {
       reader.setSafelyDeletedSearchIndex(Long.MAX_VALUE);
     }
     this.index = new AtomicLong(currentSearchIndex);
+    this.consensusGroupId = thisNode.getGroupId().toString();
+    this.metrics = new MultiLeaderServerMetrics(this);
   }
 
   public IStateMachine getStateMachine() {
@@ -130,6 +139,7 @@ public class MultiLeaderServerImpl {
   }
 
   public void start() {
+    MetricService.getInstance().addMetricSet(this.metrics);
     stateMachine.start();
     logDispatcher.start();
   }
@@ -137,14 +147,27 @@ public class MultiLeaderServerImpl {
   public void stop() {
     logDispatcher.stop();
     stateMachine.stop();
+    MetricService.getInstance().removeMetricSet(this.metrics);
   }
 
   /**
    * records the index of the log and writes locally, and then asynchronous replication is performed
    */
   public TSStatus write(IConsensusRequest request) {
+    long consensusWriteStartTime = System.currentTimeMillis();
     stateMachineLock.lock();
     try {
+      long getStateMachineLockTime = System.currentTimeMillis();
+      // statistic the time of acquiring stateMachine lock
+      MetricService.getInstance()
+          .getOrCreateHistogram(
+              Metric.STAGE.toString(),
+              MetricLevel.CORE,
+              Tag.TYPE.toString(),
+              "getStateMachineLock",
+              Tag.REGION.toString(),
+              this.consensusGroupId)
+          .update(getStateMachineLockTime - consensusWriteStartTime);
       if (needBlockWrite()) {
         logger.info(
             "[Throttle Down] index:{}, safeIndex:{}",
@@ -164,8 +187,19 @@ public class MultiLeaderServerImpl {
           Thread.currentThread().interrupt();
         }
       }
+      long writeToStateMachineStartTime = System.currentTimeMillis();
       IndexedConsensusRequest indexedConsensusRequest =
           buildIndexedConsensusRequestForLocalRequest(request);
+      // statistic the time of checking write block
+      MetricService.getInstance()
+          .getOrCreateHistogram(
+              Metric.STAGE.toString(),
+              MetricLevel.CORE,
+              Tag.TYPE.toString(),
+              "checkingBeforeWrite",
+              Tag.REGION.toString(),
+              this.consensusGroupId)
+          .update(writeToStateMachineStartTime - getStateMachineLockTime);
       if (indexedConsensusRequest.getSearchIndex() % 1000 == 0) {
         logger.info(
             "DataRegion[{}]: index after build: safeIndex:{}, searchIndex: {}",
@@ -175,6 +209,17 @@ public class MultiLeaderServerImpl {
       }
       // TODO wal and memtable
       TSStatus result = stateMachine.write(indexedConsensusRequest);
+      long writeToStateMachineEndTime = System.currentTimeMillis();
+      // statistic the time of writing request into stateMachine
+      MetricService.getInstance()
+          .getOrCreateHistogram(
+              Metric.STAGE.toString(),
+              MetricLevel.CORE,
+              Tag.TYPE.toString(),
+              "writeStateMachine",
+              Tag.REGION.toString(),
+              this.consensusGroupId)
+          .update(writeToStateMachineEndTime - writeToStateMachineStartTime);
       if (result.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         // The index is used when constructing batch in LogDispatcher. If its value
         // increases but the corresponding request does not exist or is not put into
@@ -186,6 +231,16 @@ public class MultiLeaderServerImpl {
           logDispatcher.offer(indexedConsensusRequest);
           index.incrementAndGet();
         }
+        // statistic the time of offering request into queue
+        MetricService.getInstance()
+            .getOrCreateHistogram(
+                Metric.STAGE.toString(),
+                MetricLevel.CORE,
+                Tag.TYPE.toString(),
+                "offerRequestToQueue",
+                Tag.REGION.toString(),
+                this.consensusGroupId)
+            .update(System.currentTimeMillis() - writeToStateMachineEndTime);
       } else {
         logger.debug(
             "{}: write operation failed. searchIndex: {}. Code: {}",
@@ -193,6 +248,16 @@ public class MultiLeaderServerImpl {
             indexedConsensusRequest.getSearchIndex(),
             result.getCode());
       }
+      // statistic the time of total write process
+      MetricService.getInstance()
+          .getOrCreateHistogram(
+              Metric.STAGE.toString(),
+              MetricLevel.CORE,
+              Tag.TYPE.toString(),
+              "consensusWrite",
+              Tag.REGION.toString(),
+              this.consensusGroupId)
+          .update(System.currentTimeMillis() - consensusWriteStartTime);
       return result;
     } finally {
       stateMachineLock.unlock();
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerMetrics.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerMetrics.java
new file mode 100644
index 0000000000..0f0a3a34a4
--- /dev/null
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderServerMetrics.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "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
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.consensus.multileader;
+
+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.AbstractMetricService;
+import org.apache.iotdb.metrics.metricsets.IMetricSet;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.iotdb.metrics.utils.MetricType;
+
+public class MultiLeaderServerMetrics implements IMetricSet {
+  private final MultiLeaderServerImpl impl;
+
+  public MultiLeaderServerMetrics(MultiLeaderServerImpl impl) {
+    this.impl = impl;
+  }
+
+  @Override
+  public void bindTo(AbstractMetricService metricService) {
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.MULTI_LEADER.toString(),
+            MetricLevel.CORE,
+            impl,
+            MultiLeaderServerImpl::getIndex,
+            Tag.NAME.toString(),
+            "multiLeaderServerImpl",
+            Tag.REGION.toString(),
+            impl.getThisNode().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "searchIndex");
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.MULTI_LEADER.toString(),
+            MetricLevel.CORE,
+            impl,
+            MultiLeaderServerImpl::getCurrentSafelyDeletedSearchIndex,
+            Tag.NAME.toString(),
+            "multiLeaderServerImpl",
+            Tag.REGION.toString(),
+            impl.getThisNode().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "safeIndex");
+  }
+
+  @Override
+  public void unbindFrom(AbstractMetricService metricService) {
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MULTI_LEADER.toString(),
+            Tag.NAME.toString(),
+            "multiLeaderServerImpl",
+            Tag.REGION.toString(),
+            impl.getThisNode().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "searchIndex");
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MULTI_LEADER.toString(),
+            Tag.NAME.toString(),
+            "multiLeaderServerImpl",
+            Tag.REGION.toString(),
+            impl.getThisNode().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "safeIndex");
+  }
+}
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/client/DispatchLogHandler.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/client/DispatchLogHandler.java
index 958ccd1fa0..0e4644aad4 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/client/DispatchLogHandler.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/client/DispatchLogHandler.java
@@ -19,9 +19,13 @@
 
 package org.apache.iotdb.consensus.multileader.client;
 
+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.multileader.logdispatcher.LogDispatcher.LogDispatcherThread;
 import org.apache.iotdb.consensus.multileader.logdispatcher.PendingBatch;
 import org.apache.iotdb.consensus.multileader.thrift.TSyncLogRes;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.thrift.async.AsyncMethodCallback;
@@ -36,11 +40,13 @@ public class DispatchLogHandler implements AsyncMethodCallback<TSyncLogRes> {
 
   private final LogDispatcherThread thread;
   private final PendingBatch batch;
+  private final long createTime;
   private int retryCount;
 
   public DispatchLogHandler(LogDispatcherThread thread, PendingBatch batch) {
     this.thread = thread;
     this.batch = batch;
+    this.createTime = System.currentTimeMillis();
   }
 
   @Override
@@ -58,6 +64,15 @@ public class DispatchLogHandler implements AsyncMethodCallback<TSyncLogRes> {
       // update safely deleted search index after current sync index is updated by removeBatch
       thread.updateSafelyDeletedSearchIndex();
     }
+    MetricService.getInstance()
+        .getOrCreateHistogram(
+            Metric.STAGE.toString(),
+            MetricLevel.CORE,
+            Tag.TYPE.toString(),
+            "syncLogTimePerRequest",
+            Tag.REGION.toString(),
+            this.thread.getPeer().getGroupId().toString())
+        .update((System.currentTimeMillis() - createTime) / batch.getBatches().size());
   }
 
   private boolean needRetry(int statusCode) {
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
index 4dedfbbfac..307fc141f7 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcher.java
@@ -22,6 +22,9 @@ package org.apache.iotdb.consensus.multileader.logdispatcher;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.client.IClientManager;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
+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.common.Peer;
 import org.apache.iotdb.consensus.common.request.IConsensusRequest;
 import org.apache.iotdb.consensus.common.request.IndexedConsensusRequest;
@@ -34,6 +37,7 @@ import org.apache.iotdb.consensus.multileader.thrift.TSyncLogReq;
 import org.apache.iotdb.consensus.multileader.wal.ConsensusReqReader;
 import org.apache.iotdb.consensus.multileader.wal.GetConsensusReqReaderPlan;
 import org.apache.iotdb.consensus.ratis.Utils;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
@@ -188,6 +192,8 @@ public class LogDispatcher {
 
     private ConsensusReqReader.ReqIterator walEntryIterator;
 
+    private final LogDispatcherThreadMetrics metrics;
+
     public LogDispatcherThread(Peer peer, MultiLeaderConfig config, long initialSyncIndex) {
       this.peer = peer;
       this.config = config;
@@ -200,6 +206,7 @@ public class LogDispatcher {
               config.getReplication().getCheckpointGap());
       this.syncStatus = new SyncStatus(controller, config);
       this.walEntryIterator = reader.getReqIterator(START_INDEX);
+      this.metrics = new LogDispatcherThreadMetrics(this);
     }
 
     public IndexController getController() {
@@ -222,6 +229,10 @@ public class LogDispatcher {
       return pendingRequest.size();
     }
 
+    public int getBufferRequestSize() {
+      return bufferedRequest.size();
+    }
+
     /** try to offer a request into queue with memory control */
     public boolean offer(IndexedConsensusRequest indexedConsensusRequest) {
       if (!multiLeaderMemoryManager.reserve(indexedConsensusRequest.getSerializedSize())) {
@@ -255,6 +266,7 @@ public class LogDispatcher {
       for (IndexedConsensusRequest indexedConsensusRequest : bufferedRequest) {
         multiLeaderMemoryManager.free(indexedConsensusRequest.getSerializedSize());
       }
+      MetricService.getInstance().removeMetricSet(metrics);
     }
 
     public void cleanup() throws IOException {
@@ -268,9 +280,11 @@ public class LogDispatcher {
     @Override
     public void run() {
       logger.info("{}: Dispatcher for {} starts", impl.getThisNode(), peer);
+      MetricService.getInstance().addMetricSet(metrics);
       try {
         PendingBatch batch;
         while (!Thread.interrupted() && !stopped) {
+          long startTime = System.currentTimeMillis();
           while ((batch = getBatch()).isEmpty()) {
             // we may block here if there is no requests in the queue
             IndexedConsensusRequest request =
@@ -283,6 +297,15 @@ public class LogDispatcher {
               }
             }
           }
+          MetricService.getInstance()
+              .getOrCreateHistogram(
+                  Metric.STAGE.toString(),
+                  MetricLevel.CORE,
+                  Tag.TYPE.toString(),
+                  "constructBatch",
+                  Tag.REGION.toString(),
+                  peer.getGroupId().toString())
+              .update((System.currentTimeMillis() - startTime) / batch.getBatches().size());
           // we may block here if the synchronization pipeline is full
           syncStatus.addNextBatch(batch);
           // sends batch asynchronously and migrates the retry logic into the callback handler
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcherThreadMetrics.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcherThreadMetrics.java
new file mode 100644
index 0000000000..cf11ff8d85
--- /dev/null
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/LogDispatcherThreadMetrics.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "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
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.consensus.multileader.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.AbstractMetricService;
+import org.apache.iotdb.metrics.metricsets.IMetricSet;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.iotdb.metrics.utils.MetricType;
+
+public class LogDispatcherThreadMetrics implements IMetricSet {
+  private final LogDispatcher.LogDispatcherThread logDispatcherThread;
+
+  public LogDispatcherThreadMetrics(LogDispatcher.LogDispatcherThread logDispatcherThread) {
+    this.logDispatcherThread = logDispatcherThread;
+  }
+
+  @Override
+  public void bindTo(AbstractMetricService metricService) {
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.MULTI_LEADER.toString(),
+            MetricLevel.IMPORTANT,
+            logDispatcherThread,
+            LogDispatcher.LogDispatcherThread::getCurrentSyncIndex,
+            Tag.NAME.toString(),
+            formatName(),
+            Tag.REGION.toString(),
+            logDispatcherThread.getPeer().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "currentSyncIndex");
+    MetricService.getInstance()
+        .getOrCreateAutoGauge(
+            Metric.MULTI_LEADER.toString(),
+            MetricLevel.IMPORTANT,
+            logDispatcherThread,
+            x -> x.getPendingRequestSize() + x.getBufferRequestSize(),
+            Tag.NAME.toString(),
+            formatName(),
+            Tag.REGION.toString(),
+            logDispatcherThread.getPeer().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "cachedRequestInMemoryQueue");
+  }
+
+  @Override
+  public void unbindFrom(AbstractMetricService metricService) {
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MULTI_LEADER.toString(),
+            Tag.NAME.toString(),
+            formatName(),
+            Tag.REGION.toString(),
+            logDispatcherThread.getPeer().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "currentSyncIndex");
+    MetricService.getInstance()
+        .remove(
+            MetricType.GAUGE,
+            Metric.MULTI_LEADER.toString(),
+            Tag.NAME.toString(),
+            formatName(),
+            Tag.REGION.toString(),
+            logDispatcherThread.getPeer().getGroupId().toString(),
+            Tag.TYPE.toString(),
+            "cachedRequestInMemoryQueue");
+  }
+
+  private String formatName() {
+    return String.format(
+        "logDispatcher-%s:%s",
+        logDispatcherThread.getPeer().getEndpoint().getIp(),
+        logDispatcherThread.getPeer().getEndpoint().getPort());
+  }
+}
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManager.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManager.java
index 4abfde8fd2..36c6c98b2b 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManager.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManager.java
@@ -19,6 +19,8 @@
 
 package org.apache.iotdb.consensus.multileader.logdispatcher;
 
+import org.apache.iotdb.commons.service.metric.MetricService;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +31,9 @@ public class MultiLeaderMemoryManager {
   private final AtomicLong memorySizeInByte = new AtomicLong(0);
   private Long maxMemorySizeInByte = Runtime.getRuntime().maxMemory() / 10;
 
-  private MultiLeaderMemoryManager() {}
+  private MultiLeaderMemoryManager() {
+    MetricService.getInstance().addMetricSet(new MultiLeaderMemoryManagerMetrics(this));
+  }
 
   public boolean reserve(long size) {
     synchronized (this) {
@@ -64,6 +68,10 @@ public class MultiLeaderMemoryManager {
     this.maxMemorySizeInByte = maxMemorySize;
   }
 
+  long getMemorySizeInByte() {
+    return memorySizeInByte.get();
+  }
+
   private static final MultiLeaderMemoryManager INSTANCE = new MultiLeaderMemoryManager();
 
   public static MultiLeaderMemoryManager getInstance() {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManagerMetrics.java
similarity index 58%
copy from server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java
copy to consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManagerMetrics.java
index 64f40bb46a..326d3dc1ad 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/logdispatcher/MultiLeaderMemoryManagerMetrics.java
@@ -17,51 +17,36 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.engine.cache;
+package org.apache.iotdb.consensus.multileader.logdispatcher;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
 
-import java.util.Objects;
+public class MultiLeaderMemoryManagerMetrics implements IMetricSet {
+  private final MultiLeaderMemoryManager multiLeaderMemoryManager;
 
-public class ChunkCacheMetrics implements IMetricSet {
-  private ChunkCache chunkCache;
-
-  public ChunkCacheMetrics(ChunkCache chunkCache) {
-    this.chunkCache = chunkCache;
+  public MultiLeaderMemoryManagerMetrics(MultiLeaderMemoryManager multiLeaderMemoryManager) {
+    this.multiLeaderMemoryManager = multiLeaderMemoryManager;
   }
 
   @Override
   public void bindTo(AbstractMetricService metricService) {
     metricService.getOrCreateAutoGauge(
-        Metric.CACHE_HIT.toString(),
-        MetricLevel.IMPORTANT,
-        chunkCache,
-        o -> (long) o.getHitRate(),
+        Metric.MEM.toString(),
+        MetricLevel.CORE,
+        multiLeaderMemoryManager,
+        MultiLeaderMemoryManager::getMemorySizeInByte,
         Tag.NAME.toString(),
-        "chunk");
+        "MultiLeaderConsensus");
   }
 
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.GAUGE, Metric.CACHE_HIT.toString(), Tag.NAME.toString(), "chunk");
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    ChunkCacheMetrics that = (ChunkCacheMetrics) o;
-    return Objects.equals(chunkCache, that.chunkCache);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(chunkCache);
+        MetricType.GAUGE, Metric.MEM.toString(), Tag.NAME.toString(), "MultiLeaderConsensus");
   }
 }
diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
index 74c3fce64b..a3ed1f94da 100644
--- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -137,7 +137,6 @@ Next, we will choose Prometheus format data as samples to describe each kind of
 | slot                      | name="{{storageGroupName}}",type="schemaSlotNumber/dataSlotNumber" | normal    | The number of dataSlot/schemaSlot in storage group                                           | slot{name="root.schema.sg1",type="schemaSlotNumber",} 2.0                    |
 
 ### 1.3.4. IoTDB PreDefined Metrics Set
-Users can modify the value of `predefinedMetrics` in the `iotdb-metric.yml` file to enable the predefined set of metrics,now support `JVM`, `LOGBACK`, `FILE`, `PROCESS`, `SYSYTEM`.
 
 #### 1.3.4.1. JVM
 
@@ -260,11 +259,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9091
 
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
index 1efabf02a0..07d50d4d9e 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -135,8 +135,6 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通
 
 ### 1.3.4. IoTDB 预定义指标集
 
-用户可以在`iotdb-metric.yml`文件中,修改`predefinedMetrics`的值来启用预定义指标集,目前有`JVM`、`LOGBACK`、`FILE`、`PROCESS`、`SYSYTEM`这五种。
-
 #### 1.3.4.1. JVM
 
 ##### 1.3.4.1.1. 线程
@@ -259,11 +257,6 @@ monitorType: MICROMETER
 # 初始化metric的级别,可选参数: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# 预定义的指标集, 可选参数: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # Prometheus Reporter 使用的端口
 prometheusExporterPort: 9091
 
diff --git a/integration-test/src/test/resources/logback-test.xml b/integration-test/src/test/resources/logback-test.xml
index 433fffc0f5..fd59509b34 100644
--- a/integration-test/src/test/resources/logback-test.xml
+++ b/integration-test/src/test/resources/logback-test.xml
@@ -44,7 +44,7 @@
     <logger name="org.apache.iotdb.db.engine.merge" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.ThriftServiceThread" level="INFO"/>
     <logger name="org.eclipse.jetty.util.thread.QueuedThreadPool" level="INFO"/>
-    <logger name="org.apache.iotdb.db.service.metrics.MetricService" level="INFO"/>
+    <logger name="org.apache.iotdb.commons.service.metric.MetricService" level="INFO"/>
     <logger name="org.apache.iotdb.db.engine.flush.FlushManager" level="INFO"/>
     <logger name="org.apache.iotdb.db.integration.IoTDBCompactionIT" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.RegisterManager" level="INFO"/>
diff --git a/integration/src/test/resources/logback-test.xml b/integration/src/test/resources/logback-test.xml
index a5ec897bb8..c757a1d100 100644
--- a/integration/src/test/resources/logback-test.xml
+++ b/integration/src/test/resources/logback-test.xml
@@ -44,7 +44,7 @@
     <logger name="org.apache.iotdb.db.engine.merge" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.ThriftServiceThread" level="INFO"/>
     <logger name="org.eclipse.jetty.util.thread.QueuedThreadPool" level="INFO"/>
-    <logger name="org.apache.iotdb.db.service.metrics.MetricService" level="INFO"/>
+    <logger name="org.apache.iotdb.commons.service.metric.MetricService" level="INFO"/>
     <logger name="org.apache.iotdb.db.engine.flush.FlushManager" level="INFO"/>
     <logger name="org.apache.iotdb.db.integration.IoTDBCompactionIT" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.RegisterManager" level="INFO"/>
diff --git a/metrics/ReadMe.md b/metrics/ReadMe.md
index 74147f5b16..81b7305946 100644
--- a/metrics/ReadMe.md
+++ b/metrics/ReadMe.md
@@ -55,7 +55,7 @@ Metric Module
 4. MetricService
    1. Provide the start and stop method of metric service.
    2. Provide the ability to reload properties when running.
-   3. Provide the ability to load predefined metric sets.
+   3. Provide the ability to load metric sets.
    4. Provide the access of metricManager and CompositeReporter.
 
 # 2. Test Report
@@ -105,7 +105,6 @@ System.setProperty("IOTDB_CONF", "metrics/dropwizard-metrics/src/test/resources"
 | metricReporterList         | the list of reporter                                                                   | JMX, PROMETHEUS, IOTDB              |
 | monitorType                | The type of metric manager                                                             | DROPWIZARD, MICROMETER              |
 | metricLevel                | the init level of metrics                                                              | ALL, NORMAL, IMPORTANT, CORE        |
-| predefinedMetrics          | predefined set of metrics                                                              | JVM, LOGBACK, FILE, PROCESS, SYSTEM |
 | asyncCollectPeriodInSecond | The period of the collection of some metrics in asynchronous way, such as tsfile size. | 5                                   |
 | pushPeriodInSecond         | the period time of push(used for prometheus, unit: s)                                  | 5                                   |
 
@@ -119,8 +118,7 @@ MetricService.getInstance().count(1, "operation_count", MetricLevel.IMPORTANT, "
 
 # 4. How to implement your own metric framework?
 1. implement your MetricService
-   1. You need to implement `enablePredefinedMetrics` to load predefined metrics.
-   2. You need to implement `reloadProperties` to reload properties when running.
+   1. You need to implement `reloadProperties` to reload properties when running.
 2. implement your MetricManager
    1. The name of MetricManager should start with `monitorType`, MetricService will init manager according to the prefix of class name.
    2. You need to create `src/main/resources/META-INF/services/org.apache.iotdb.metrics.AbstractMetricManager`,and record your MetricManager class name in this file, such as `org.apache.iotdb.metrics.dropwizard.DropwizardMetricManager`
@@ -131,9 +129,6 @@ MetricService.getInstance().count(1, "operation_count", MetricLevel.IMPORTANT, "
 4. implement your specific metric
    1. They are counter, gauge, histogram, histogramSnapshot, rate and timer.
    2. These metrics will be managed by your MetricManager, and reported by your reporter.
-5. extends preDefinedMetric module:
-   1. you can add value into `metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric`, such as `System` and `Thread`.
-   2. then you need to fix the implementation of `enablePredefinedMetric(PredefinedMetric metric)` in your manager.
 
 # 5. Some docs
 1. <a href = "https://iotdb.apache.org/UserGuide/Master/Maintenance-Tools/Metric-Tool.html">Metric Tool</a>
diff --git a/metrics/interface/src/main/assembly/resources/conf/iotdb-confignode-metric.yml b/metrics/interface/src/main/assembly/resources/conf/iotdb-confignode-metric.yml
index 92f33c27f1..af1c039d9e 100644
--- a/metrics/interface/src/main/assembly/resources/conf/iotdb-confignode-metric.yml
+++ b/metrics/interface/src/main/assembly/resources/conf/iotdb-confignode-metric.yml
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The period of the collection of some metrics in asynchronous way, such as tsfile size.
 asyncCollectPeriodInSecond: 5
 
diff --git a/metrics/interface/src/main/assembly/resources/conf/iotdb-datanode-metric.yml b/metrics/interface/src/main/assembly/resources/conf/iotdb-datanode-metric.yml
index 92f33c27f1..af1c039d9e 100644
--- a/metrics/interface/src/main/assembly/resources/conf/iotdb-datanode-metric.yml
+++ b/metrics/interface/src/main/assembly/resources/conf/iotdb-datanode-metric.yml
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The period of the collection of some metrics in asynchronous way, such as tsfile size.
 asyncCollectPeriodInSecond: 5
 
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/AbstractMetricService.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/AbstractMetricService.java
index 30f13c5198..eac64480ae 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/AbstractMetricService.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/AbstractMetricService.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.config.ReloadLevel;
 import org.apache.iotdb.metrics.impl.DoNothingMetricManager;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
-import org.apache.iotdb.metrics.metricsets.predefined.PredefinedMetric;
 import org.apache.iotdb.metrics.reporter.CompositeReporter;
 import org.apache.iotdb.metrics.reporter.Reporter;
 import org.apache.iotdb.metrics.type.Counter;
@@ -44,7 +43,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.ToLongFunction;
 
 /** MetricService is the entry to get all metric features. */
@@ -53,8 +51,6 @@ public abstract class AbstractMetricService {
   private static final Logger logger = LoggerFactory.getLogger(AbstractMetricService.class);
   /** The config of metric service */
   private final MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig();
-  /** Is the first initialization of metric service */
-  protected AtomicBoolean isFirstInitialization = new AtomicBoolean(true);
   /** The metric manager of metric service */
   protected AbstractMetricManager metricManager = new DoNothingMetricManager();
   /** The metric reporter of metric service */
@@ -102,10 +98,6 @@ public abstract class AbstractMetricService {
     loadReporter();
     // do start all reporter without first time
     startAllReporter();
-    logger.info("Start predefined metrics: {}", metricConfig.getPredefinedMetrics());
-    for (PredefinedMetric predefinedMetric : metricConfig.getPredefinedMetrics()) {
-      enablePredefinedMetrics(predefinedMetric);
-    }
   }
 
   /** stop metric core module */
@@ -161,9 +153,6 @@ public abstract class AbstractMetricService {
     }
   }
 
-  /** Enable predefined Metrics */
-  protected abstract void enablePredefinedMetrics(PredefinedMetric metric);
-
   /** Reload metric service according to reloadLevel */
   protected abstract void reloadProperties(ReloadLevel reloadLevel);
 
@@ -296,4 +285,12 @@ public abstract class AbstractMetricService {
       metricSets.add(metricSet);
     }
   }
+
+  /** remove metrics */
+  public void removeMetricSet(IMetricSet metricSet) {
+    if (metricSets.contains(metricSet)) {
+      metricSet.unbindFrom(this);
+      metricSets.remove(metricSet);
+    }
+  }
 }
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java
index b6e4baf066..7e73ac0536 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/DoNothingMetricService.java
@@ -20,15 +20,9 @@
 package org.apache.iotdb.metrics;
 
 import org.apache.iotdb.metrics.config.ReloadLevel;
-import org.apache.iotdb.metrics.metricsets.predefined.PredefinedMetric;
 
 public class DoNothingMetricService extends AbstractMetricService {
 
-  @Override
-  public void enablePredefinedMetrics(PredefinedMetric metric) {
-    // do nothing
-  }
-
   @Override
   protected void reloadProperties(ReloadLevel reloadLevel) {
     // do nothing
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
index 1b5a625b8f..ed32ca72a9 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.metrics.config;
 
-import org.apache.iotdb.metrics.metricsets.predefined.PredefinedMetric;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MonitorType;
 import org.apache.iotdb.metrics.utils.ReporterType;
@@ -45,10 +44,6 @@ public class MetricConfig {
   /** The level of metric service */
   private MetricLevel metricLevel = MetricLevel.IMPORTANT;
 
-  /** The list of predefined metrics in metric service */
-  private List<PredefinedMetric> predefinedMetrics =
-      Arrays.asList(PredefinedMetric.JVM, PredefinedMetric.FILE);
-
   private Integer asyncCollectPeriodInSecond = 5;
 
   /** The http server's port for prometheus reporter to get metric data. */
@@ -162,7 +157,6 @@ public class MetricConfig {
     monitorType = newMetricConfig.getMonitorType();
     metricReporterList = newMetricConfig.getMetricReporterList();
     metricLevel = newMetricConfig.getMetricLevel();
-    predefinedMetrics = newMetricConfig.getPredefinedMetrics();
     asyncCollectPeriodInSecond = newMetricConfig.getAsyncCollectPeriodInSecond();
     prometheusExporterPort = newMetricConfig.getPrometheusExporterPort();
     ioTDBReporterConfig = newMetricConfig.ioTDBReporterConfig;
@@ -213,14 +207,6 @@ public class MetricConfig {
     this.metricLevel = metricLevel;
   }
 
-  public List<PredefinedMetric> getPredefinedMetrics() {
-    return predefinedMetrics;
-  }
-
-  public void setPredefinedMetrics(List<PredefinedMetric> predefinedMetrics) {
-    this.predefinedMetrics = predefinedMetrics;
-  }
-
   public Integer getAsyncCollectPeriodInSecond() {
     return asyncCollectPeriodInSecond;
   }
@@ -263,7 +249,6 @@ public class MetricConfig {
         && monitorType.equals(anotherMetricConfig.getMonitorType())
         && metricReporterList.equals(anotherMetricConfig.getMetricReporterList())
         && metricLevel.equals(anotherMetricConfig.getMetricLevel())
-        && predefinedMetrics.equals(anotherMetricConfig.getPredefinedMetrics())
         && asyncCollectPeriodInSecond.equals(anotherMetricConfig.getAsyncCollectPeriodInSecond())
         && prometheusExporterPort.equals(anotherMetricConfig.getPrometheusExporterPort())
         && ioTDBReporterConfig.equals(anotherMetricConfig.getIoTDBReporterConfig());
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfigDescriptor.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfigDescriptor.java
index f27b8fb0b1..e7489dd7be 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfigDescriptor.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfigDescriptor.java
@@ -87,7 +87,6 @@ public class MetricConfigDescriptor {
         // restart reporters or restart service
         if (!metricConfig.getMonitorType().equals(newMetricConfig.getMonitorType())
             || !metricConfig.getMetricLevel().equals(newMetricConfig.getMetricLevel())
-            || !metricConfig.getPredefinedMetrics().equals(newMetricConfig.getPredefinedMetrics())
             || !metricConfig
                 .getAsyncCollectPeriodInSecond()
                 .equals(newMetricConfig.getAsyncCollectPeriodInSecond())) {
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmClassLoaderMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
similarity index 97%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmClassLoaderMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
index daa7cf5206..8ddbe4e1cd 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmClassLoaderMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmCompileMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
similarity index 97%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmCompileMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
index fcf8801983..718656fc75 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmCompileMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmGcMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
similarity index 99%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmGcMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
index 703f3b1e32..e90b0841cd 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmGcMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMemoryMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
similarity index 98%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMemoryMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
index da13ef12ac..2589ded844 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMemoryMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMetrics.java
similarity index 96%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMetrics.java
index 0d63d6a3a9..5eb3414211 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmThreadMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
similarity index 98%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmThreadMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
index f0a5cd8b7d..79d6e4ed19 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmThreadMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmUtils.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmUtils.java
similarity index 96%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmUtils.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmUtils.java
index 79a7b4a54c..e0cf1a647b 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/jvm/JvmUtils.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmUtils.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.jvm;
+package org.apache.iotdb.metrics.metricsets.jvm;
 
 import java.lang.management.MemoryPoolMXBean;
 import java.lang.management.MemoryUsage;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/LogbackMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
similarity index 98%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/LogbackMetrics.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
index 94464699c0..6790c31b6c 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/LogbackMetrics.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.logback;
+package org.apache.iotdb.metrics.metricsets.logback;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/MetricsTurboFilter.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/MetricsTurboFilter.java
similarity index 98%
rename from metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/MetricsTurboFilter.java
rename to metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/MetricsTurboFilter.java
index 173ea3b5e7..a569226533 100644
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/logback/MetricsTurboFilter.java
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/MetricsTurboFilter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets.predefined.logback;
+package org.apache.iotdb.metrics.metricsets.logback;
 
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.type.Counter;
diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/PredefinedMetric.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/PredefinedMetric.java
deleted file mode 100644
index c520afc1f0..0000000000
--- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/predefined/PredefinedMetric.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "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
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.metrics.metricsets.predefined;
-
-public enum PredefinedMetric {
-  JVM,
-  LOGBACK,
-  FILE,
-  PROCESS,
-  SYSTEM;
-
-  @Override
-  public String toString() {
-    return name();
-  }
-}
diff --git a/metrics/interface/src/test/java/org/apache/iotdb/metrics/config/MetricConfigTest.java b/metrics/interface/src/test/java/org/apache/iotdb/metrics/config/MetricConfigTest.java
index 065347f2ef..2906544f86 100644
--- a/metrics/interface/src/test/java/org/apache/iotdb/metrics/config/MetricConfigTest.java
+++ b/metrics/interface/src/test/java/org/apache/iotdb/metrics/config/MetricConfigTest.java
@@ -56,7 +56,6 @@ public class MetricConfigTest {
     assertEquals(3, metricConfig.getMetricReporterList().size());
     assertEquals(MonitorType.DROPWIZARD, metricConfig.getMonitorType());
     assertEquals(MetricLevel.ALL, metricConfig.getMetricLevel());
-    assertEquals(5, metricConfig.getPredefinedMetrics().size());
     assertEquals(10, (int) metricConfig.getAsyncCollectPeriodInSecond());
     assertEquals(9090, (int) metricConfig.getPrometheusExporterPort());
 
diff --git a/metrics/interface/src/test/resources/iotdb-metric.yml b/metrics/interface/src/test/resources/iotdb-metric.yml
index e84ec80bdb..a59aa56086 100644
--- a/metrics/interface/src/test/resources/iotdb-metric.yml
+++ b/metrics/interface/src/test/resources/iotdb-metric.yml
@@ -35,14 +35,6 @@ monitorType: DROPWIZARD
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: ALL
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - LOGBACK
-  - FILE
-  - PROCESS
-  - SYSTEM
-
 # The period of the collection of some metrics in asynchronous way, such as tsfile size.
 asyncCollectPeriodInSecond: 10
 
diff --git a/node-commons/pom.xml b/node-commons/pom.xml
index 9c3dbecd50..81e1471f23 100644
--- a/node-commons/pom.xml
+++ b/node-commons/pom.xml
@@ -127,6 +127,22 @@
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>micrometer-metrics</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>dropwizard-metrics</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.sun.jersey</groupId>
+                    <artifactId>jersey-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
         <dependency>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricService.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
similarity index 76%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/MetricService.java
rename to node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
index 1a998004fd..31d7659c16 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricService.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
@@ -17,22 +17,15 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics;
+package org.apache.iotdb.commons.service.metric;
 
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.IService;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.ServiceType;
-import org.apache.iotdb.db.service.metrics.predefined.FileMetrics;
-import org.apache.iotdb.db.service.metrics.predefined.ProcessMetrics;
-import org.apache.iotdb.db.service.metrics.predefined.SystemMetrics;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.config.ReloadLevel;
-import org.apache.iotdb.metrics.metricsets.IMetricSet;
-import org.apache.iotdb.metrics.metricsets.predefined.PredefinedMetric;
-import org.apache.iotdb.metrics.metricsets.predefined.jvm.JvmMetrics;
-import org.apache.iotdb.metrics.metricsets.predefined.logback.LogbackMetrics;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -76,32 +69,6 @@ public class MetricService extends AbstractMetricService implements MetricServic
     }
   }
 
-  @Override
-  public void enablePredefinedMetrics(PredefinedMetric metric) {
-    IMetricSet metricSet;
-    switch (metric) {
-      case JVM:
-        metricSet = new JvmMetrics();
-        break;
-      case LOGBACK:
-        metricSet = new LogbackMetrics();
-        break;
-      case FILE:
-        metricSet = new FileMetrics();
-        break;
-      case PROCESS:
-        metricSet = new ProcessMetrics();
-        break;
-      case SYSTEM:
-        metricSet = new SystemMetrics();
-        break;
-      default:
-        logger.error("Unknown predefined metrics: {}", metric);
-        return;
-    }
-    metricSet.bindTo(this);
-  }
-
   @Override
   public void reloadProperties(ReloadLevel reloadLevel) {
     logger.info("Reload properties of metric service");
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricServiceMBean.java
similarity index 95%
copy from server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java
copy to node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricServiceMBean.java
index b65b5690d3..6b8f329a82 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricServiceMBean.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.service.metrics;
+package org.apache.iotdb.commons.service.metric;
 
 import org.apache.iotdb.commons.exception.StartupException;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
similarity index 92%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
rename to node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index 74ac14bd32..b1f8a316e6 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics.enums;
+package org.apache.iotdb.commons.service.metric.enums;
 
 public enum Metric {
   ENTRY,
@@ -28,15 +28,12 @@ public enum Metric {
   MEM,
   CACHE,
   CACHE_HIT,
-  ERROR_LOG,
   QUANTITY,
   DATA_WRITTEN,
   DATA_READ,
   COMPACTION_TASK_COUNT,
   CLUSTER_NODE_STATUS,
   CLUSTER_NODE_LEADER_COUNT,
-  CLUSTER_ELECT,
-  CLUSTER_UNCOMMITTED_LOG,
   PROCESS_CPU_LOAD,
   PROCESS_CPU_TIME,
   PROCESS_MAX_MEM,
@@ -61,7 +58,9 @@ public enum Metric {
   REGION,
   SLOT,
   THRIFT_CONNECTIONS,
-  THRIFT_ACTIVE_THREADS;
+  THRIFT_ACTIVE_THREADS,
+  MULTI_LEADER,
+  STAGE;
 
   @Override
   public String toString() {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Operation.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java
rename to node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Operation.java
index 365c74be4c..fa6570e2eb 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Operation.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Operation.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.service.metrics.enums;
+package org.apache.iotdb.commons.service.metric.enums;
 
 public enum Operation {
   EXECUTE_JDBC_BATCH("EXECUTE_JDBC_BATCH"),
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
similarity index 93%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java
rename to node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
index cb2db3a578..1b02b0161c 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Tag.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Tag.java
@@ -17,11 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics.enums;
+package org.apache.iotdb.commons.service.metric.enums;
 
 public enum Tag {
   TYPE,
   NAME,
+  REGION,
   STATUS;
 
   @Override
diff --git a/server/pom.xml b/server/pom.xml
index 9d29b53919..31d8ef3587 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -209,16 +209,6 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>micrometer-metrics</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>dropwizard-metrics</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 16a2890956..06522791d1 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -175,11 +175,6 @@ public class IoTDBConfig {
   /** Write mode of wal */
   private volatile WALMode walMode = WALMode.ASYNC;
 
-  /** WAL directories */
-  private String[] walDirs = {
-    IoTDBConstant.DEFAULT_BASE_DIR + File.separator + IoTDBConstant.WAL_FOLDER_NAME
-  };
-
   /** Max number of wal nodes, each node corresponds to one wal directory */
   private int maxWalNodesNum = 0;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index cd88259b8f..5d4035f300 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.BadNodeUrlException;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.utils.NodeUrlUtils;
 import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
 import org.apache.iotdb.confignode.rpc.thrift.TRatisConfig;
@@ -38,7 +39,6 @@ import org.apache.iotdb.db.exception.BadNodeUrlFormatException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.utils.DateTimeUtils;
 import org.apache.iotdb.db.rescon.SystemInfo;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
 import org.apache.iotdb.db.wal.WALManager;
 import org.apache.iotdb.db.wal.utils.WALMode;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/TsFileMetricManager.java b/server/src/main/java/org/apache/iotdb/db/engine/TsFileMetricManager.java
index 883e59f300..ee90a60ed3 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/TsFileMetricManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/TsFileMetricManager.java
@@ -19,13 +19,12 @@
 
 package org.apache.iotdb.db.engine;
 
+import org.apache.iotdb.db.service.metrics.FileMetrics;
+
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
-/**
- * This class collect the number and size of tsfile, and send it to the {@link
- * org.apache.iotdb.db.service.metrics.predefined.FileMetrics}
- */
+/** This class collect the number and size of tsfile, and send it to the {@link FileMetrics} */
 public class TsFileMetricManager {
   private static final TsFileMetricManager INSTANCE = new TsFileMetricManager();
   private AtomicLong seqFileSize = new AtomicLong(0);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
index bac3869e6c..0fa63a5fdf 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
@@ -19,11 +19,11 @@
 
 package org.apache.iotdb.db.engine.cache;
 
+import org.apache.iotdb.commons.service.metric.MetricService;
 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.query.control.FileReaderManager;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
 import org.apache.iotdb.tsfile.read.common.Chunk;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java
index 64f40bb46a..038ed0827e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCacheMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.engine.cache;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index b64e3541d4..675225a9d1 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -20,11 +20,11 @@
 package org.apache.iotdb.db.engine.cache;
 
 import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.service.metric.MetricService;
 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.query.control.FileReaderManager;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCacheMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCacheMetrics.java
index d7344b7687..01a32827bb 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCacheMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCacheMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.engine.cache;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java
index dcf31495b0..5f2a304eab 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManager.java
@@ -24,12 +24,12 @@ import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.IService;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.ServiceType;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.flush.pool.FlushSubTaskPoolManager;
 import org.apache.iotdb.db.engine.flush.pool.FlushTaskPoolManager;
 import org.apache.iotdb.db.engine.storagegroup.TsFileProcessor;
-import org.apache.iotdb.db.service.metrics.MetricService;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManagerMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManagerMetrics.java
index 3e69678b67..c046887065 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManagerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/FlushManagerMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.engine.flush;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
index 2653d67eac..6e50754e16 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
@@ -18,6 +18,9 @@
  */
 package org.apache.iotdb.db.engine.flush;
 
+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.engine.flush.pool.FlushSubTaskPoolManager;
@@ -27,9 +30,6 @@ import org.apache.iotdb.db.engine.memtable.IWritableMemChunkGroup;
 import org.apache.iotdb.db.exception.runtime.FlushRunTimeException;
 import org.apache.iotdb.db.metadata.idtable.entry.IDeviceID;
 import org.apache.iotdb.db.rescon.SystemInfo;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.tsfile.write.chunk.IChunkWriter;
 import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index 05938e4d74..2f2379f16e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -20,6 +20,9 @@ package org.apache.iotdb.db.engine.memtable;
 
 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.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.flush.FlushStatus;
 import org.apache.iotdb.db.engine.flush.NotifyFlushMemTable;
@@ -34,9 +37,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode;
 import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.utils.MemUtils;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index 240ea4e686..38e30cba35 100755
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.file.SystemFileFactory;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -87,7 +88,6 @@ import org.apache.iotdb.db.query.control.QueryFileManager;
 import org.apache.iotdb.db.rescon.TsFileResourceManager;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.SettleService;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.sync.sender.manager.ISyncManager;
 import org.apache.iotdb.db.tools.settle.TsFileAndModSettleTool;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
index 866b5cea32..9a86e3ca2e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.engine.storagegroup;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
index 502f379641..80f61bc86a 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 
 /** The TsFileProcessorInfo records the memory cost of this TsFileProcessor. */
 public class TsFileProcessorInfo {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfoMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfoMetrics.java
index 866068d936..30e9860a5f 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfoMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfoMetrics.java
@@ -18,9 +18,9 @@
  */
 package org.apache.iotdb.db.engine.storagegroup;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+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.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
index e56b5b8612..bec73aeda7 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCache.java
@@ -21,11 +21,11 @@ package org.apache.iotdb.db.metadata.cache;
 
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.mpp.common.schematree.ClusterSchemaTree;
 import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCacheMetrics.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCacheMetrics.java
index 5cf6d4111b..aa8c7bb066 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCacheMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/DataNodeSchemaCacheMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.metadata.cache;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaResourceManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaResourceManager.java
index b1f6f11a56..8f95c73ad7 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaResourceManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaResourceManager.java
@@ -19,12 +19,12 @@
 
 package org.apache.iotdb.db.metadata.rescon;
 
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.mtree.store.disk.MTreeFlushTaskManager;
 import org.apache.iotdb.db.metadata.mtree.store.disk.MTreeReleaseTaskManager;
 import org.apache.iotdb.db.metadata.mtree.store.disk.memcontrol.MemManagerHolder;
 import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode;
-import org.apache.iotdb.db.service.metrics.MetricService;
 
 public class SchemaResourceManager {
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaStatisticsManagerMetrics.java b/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaStatisticsManagerMetrics.java
index 7d2e2a3e29..ac1b30dbb7 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaStatisticsManagerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/rescon/SchemaStatisticsManagerMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.metadata.rescon;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
index 09d3d3e54b..f1ee4b6438 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
@@ -29,11 +29,11 @@ import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.client.DataNodeClientPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.mpp.execution.memory.LocalMemoryManager;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.mpp.rpc.thrift.MPPDataExchangeService.Processor;
 
 import org.slf4j.Logger;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceMetrics.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceMetrics.java
index 7d87b402c5..b97fe91149 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceMetrics.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.db.mpp.execution.exchange;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
index 4321320974..d4232a7aa7 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
@@ -19,7 +19,7 @@
 
 package org.apache.iotdb.db.mpp.execution.exchange;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MppDataExchangeServiceThriftHandlerMetrics.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MppDataExchangeServiceThriftHandlerMetrics.java
index e86c909ee1..85483dd8fd 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MppDataExchangeServiceThriftHandlerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MppDataExchangeServiceThriftHandlerMetrics.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.mpp.execution.exchange;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+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.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java
index 92cae2641c..a58ecf3dea 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManager.java
@@ -21,9 +21,9 @@ package org.apache.iotdb.db.query.pool;
 
 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.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.rescon.AbstractPoolManager;
-import org.apache.iotdb.db.service.metrics.MetricService;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManagerMetrics.java b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManagerMetrics.java
index db51dfbd6e..aad1440521 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManagerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/pool/RawQueryReadTaskPoolManagerMetrics.java
@@ -20,8 +20,8 @@
 package org.apache.iotdb.db.query.pool;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index fd6b215800..da94af0a18 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.RegisterManager;
 import org.apache.iotdb.commons.service.StartupChecks;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.trigger.TriggerInformation;
 import org.apache.iotdb.commons.trigger.exception.TriggerManagementException;
 import org.apache.iotdb.commons.trigger.service.TriggerExecutableManager;
@@ -68,7 +69,7 @@ import org.apache.iotdb.db.mpp.execution.schedule.DriverScheduler;
 import org.apache.iotdb.db.protocol.mpprest.MPPRestService;
 import org.apache.iotdb.db.service.basic.ServiceProvider;
 import org.apache.iotdb.db.service.basic.StandaloneServiceProvider;
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.db.service.metrics.DataNodeMetricsHelper;
 import org.apache.iotdb.db.service.thrift.impl.ClientRPCServiceImpl;
 import org.apache.iotdb.db.service.thrift.impl.DataNodeRegionManager;
 import org.apache.iotdb.db.sync.SyncService;
@@ -361,6 +362,8 @@ public class DataNode implements DataNodeMBean {
 
     registerManager.register(MetricService.getInstance());
     registerManager.register(CompactionTaskManager.getInstance());
+    // bind predefined metrics
+    DataNodeMetricsHelper.bind();
   }
 
   /** set up RPC and protocols after DataNode is available */
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
index f0f7e941db..915ba071b9 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
@@ -24,9 +24,9 @@ import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.db.service.thrift.handler.InternalServiceThriftHandler;
 import org.apache.iotdb.db.service.thrift.impl.DataNodeInternalRPCServiceImpl;
 import org.apache.iotdb.mpp.rpc.thrift.IDataNodeRPCService.Processor;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCServiceMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCServiceMetrics.java
index a6727223e5..9cbef97bd1 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCServiceMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCServiceMetrics.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.db.service;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index 990eace370..8b9c57d783 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.RegisterManager;
 import org.apache.iotdb.commons.service.StartupChecks;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.udf.service.UDFClassLoaderManager;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -46,7 +47,7 @@ import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.service.basic.ServiceProvider;
 import org.apache.iotdb.db.service.basic.StandaloneServiceProvider;
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.db.service.metrics.DataNodeMetricsHelper;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.wal.WALManager;
 
@@ -179,6 +180,8 @@ public class IoTDB implements IoTDBMBean {
     registerManager.register(TriggerRegistrationService.getInstance());
     registerManager.register(ContinuousQueryService.getInstance());
     registerManager.register(MetricService.getInstance());
+    // bind predefined metrics
+    DataNodeMetricsHelper.bind();
 
     logger.info("IoTDB configuration: " + config.getConfigMessage());
     logger.info("Congratulation, IoTDB is set up successfully. Now, enjoy yourself!");
diff --git a/server/src/main/java/org/apache/iotdb/db/service/NewIoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/NewIoTDB.java
index 03ab7e10dd..86d4f2840b 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/NewIoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/NewIoTDB.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.RegisterManager;
 import org.apache.iotdb.commons.service.StartupChecks;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.udf.service.UDFClassLoaderManager;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -45,7 +46,7 @@ import org.apache.iotdb.db.mpp.execution.schedule.DriverScheduler;
 import org.apache.iotdb.db.protocol.mpprest.MPPRestService;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.rescon.SystemInfo;
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.db.service.metrics.DataNodeMetricsHelper;
 import org.apache.iotdb.db.service.thrift.impl.ClientRPCServiceImpl;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.wal.WALManager;
@@ -168,6 +169,8 @@ public class NewIoTDB implements NewIoTDBMBean {
     registerManager.register(ContinuousQueryService.getInstance());
     registerManager.register(MetricService.getInstance());
     registerManager.register(CompactionTaskManager.getInstance());
+    // bind predefined metrics
+    DataNodeMetricsHelper.bind();
 
     logger.info("IoTDB configuration: " + config.getConfigMessage());
     logger.info("Congratulation, IoTDB is set up successfully. Now, enjoy yourself!");
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RPCService.java b/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
index 05e68f16bd..2697f99fc9 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
@@ -23,9 +23,9 @@ import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.service.metrics.MetricService;
 import org.apache.iotdb.db.service.thrift.ProcessorWithMetrics;
 import org.apache.iotdb.db.service.thrift.handler.RPCServiceThriftHandler;
 import org.apache.iotdb.db.service.thrift.impl.IClientRPCServiceWithHandler;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RPCServiceMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/RPCServiceMetrics.java
index ef9435a1bf..b6f76636f7 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RPCServiceMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RPCServiceMetrics.java
@@ -20,8 +20,8 @@ package org.apache.iotdb.db.service;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
similarity index 50%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java
rename to server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
index b65b5690d3..f37634e107 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/MetricServiceMBean.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
@@ -16,15 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.service.metrics;
-
-import org.apache.iotdb.commons.exception.StartupException;
 
-public interface MetricServiceMBean {
-
-  void startService() throws StartupException;
+package org.apache.iotdb.db.service.metrics;
 
-  void restartService() throws StartupException;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
+import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
+import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
 
-  void stopService();
+public class DataNodeMetricsHelper {
+  /** Bind predefined metric sets into DataNode */
+  public static void bind() {
+    if (MetricConfigDescriptor.getInstance().getMetricConfig().getEnableMetric()) {
+      // bind predefined metric sets
+      MetricService.getInstance().addMetricSet(new JvmMetrics());
+      MetricService.getInstance().addMetricSet(new LogbackMetrics());
+      MetricService.getInstance().addMetricSet(new FileMetrics());
+      MetricService.getInstance().addMetricSet(new ProcessMetrics());
+      MetricService.getInstance().addMetricSet(new SystemMetrics());
+    }
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java
rename to server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java
index 8ebb8f130c..f5e2779a53 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/FileMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java
@@ -17,14 +17,14 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics.predefined;
+package org.apache.iotdb.db.service.metrics;
 
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
+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.engine.TsFileMetricManager;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.wal.WALManager;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java
rename to server/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
index 1397523d53..2c95c59eae 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/ProcessMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
@@ -17,10 +17,10 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics.predefined;
+package org.apache.iotdb.db.service.metrics;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java
similarity index 98%
rename from server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java
rename to server/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java
index 94fe584f49..8c518ee089 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/predefined/SystemMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.service.metrics.predefined;
+package org.apache.iotdb.db.service.metrics;
 
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
+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.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
index 432f44b3b2..834b63acff 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CacheMetricsRecorder.java
@@ -18,9 +18,9 @@
  */
 package org.apache.iotdb.db.service.metrics.recorder;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+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;
 
 public class CacheMetricsRecorder {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
index 30d5178efd..5403aa8cf6 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/recorder/CompactionMetricsRecorder.java
@@ -18,15 +18,15 @@
  */
 package org.apache.iotdb.db.service.metrics.recorder;
 
+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.engine.compaction.constant.CompactionTaskStatus;
 import org.apache.iotdb.db.engine.compaction.constant.CompactionType;
 import org.apache.iotdb.db.engine.compaction.constant.ProcessChunkType;
 import org.apache.iotdb.db.engine.compaction.cross.CrossSpaceCompactionTask;
 import org.apache.iotdb.db.engine.compaction.inner.InnerSpaceCompactionTask;
 import org.apache.iotdb.db.engine.compaction.task.AbstractCompactionTask;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 
 import java.util.concurrent.TimeUnit;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java
index 3b3e671068..50ccfcdf06 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/ProcessorWithMetrics.java
@@ -19,9 +19,9 @@
 
 package org.apache.iotdb.db.service.thrift;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+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.apache.iotdb.service.rpc.thrift.IClientRPCService.Iface;
 import org.apache.iotdb.service.rpc.thrift.IClientRPCService.Processor;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
index d0e72ed39e..037a1cbc91 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
@@ -19,7 +19,7 @@
 
 package org.apache.iotdb.db.service.thrift.handler;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandlerMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandlerMetrics.java
index c9eef53faf..94dcb0f78a 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandlerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandlerMetrics.java
@@ -19,8 +19,8 @@
 
 package org.apache.iotdb.db.service.thrift.handler;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
index c03045591f..05c185bf59 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
@@ -16,7 +16,7 @@
  */
 package org.apache.iotdb.db.service.thrift.handler;
 
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.service.thrift.impl.IClientRPCServiceWithHandler;
 
 import org.apache.thrift.protocol.TProtocol;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandlerMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandlerMetrics.java
index 863b8e6315..74fc4f4312 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandlerMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandlerMetrics.java
@@ -16,8 +16,8 @@
  */
 package org.apache.iotdb.db.service.thrift.handler;
 
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.commons.service.metric.enums.Metric;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
index 7bc5737345..96ca1fdcf0 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
@@ -23,6 +23,8 @@ import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.IoTDBException;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Operation;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.auth.AuthorizerManager;
@@ -59,8 +61,6 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplat
 import org.apache.iotdb.db.query.control.SessionManager;
 import org.apache.iotdb.db.query.control.SessionTimeoutManager;
 import org.apache.iotdb.db.service.basic.BasicOpenSessionResp;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Operation;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.utils.QueryDataSetUtils;
 import org.apache.iotdb.db.utils.SetThreadName;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
index e79d7d7b61..3afa2ab07c 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -37,6 +37,9 @@ import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.exception.sync.PipeException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
+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.sync.pipe.PipeInfo;
 import org.apache.iotdb.commons.sync.pipe.SyncOperation;
 import org.apache.iotdb.commons.trigger.TriggerInformation;
@@ -84,9 +87,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.DeleteDataNode;
 import org.apache.iotdb.db.mpp.plan.scheduler.load.LoadTsFileScheduler;
 import org.apache.iotdb.db.service.DataNode;
 import org.apache.iotdb.db.service.RegionMigrateService;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Metric;
-import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.trigger.executor.TriggerExecutor;
 import org.apache.iotdb.db.trigger.executor.TriggerFireResult;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index bb696a9b54..aca7664144 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -29,6 +29,8 @@ import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Operation;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.auth.AuthorizerManager;
@@ -74,8 +76,6 @@ import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.StaticResps;
 import org.apache.iotdb.db.service.basic.BasicOpenSessionResp;
 import org.apache.iotdb.db.service.basic.ServiceProvider;
-import org.apache.iotdb.db.service.metrics.MetricService;
-import org.apache.iotdb.db.service.metrics.enums.Operation;
 import org.apache.iotdb.db.sync.SyncService;
 import org.apache.iotdb.db.tools.watermark.GroupedLSBWatermarkEncoder;
 import org.apache.iotdb.db.tools.watermark.WatermarkEncoder;
diff --git a/server/src/test/resources/datanode1conf/iotdb-metric.yml b/server/src/test/resources/datanode1conf/iotdb-metric.yml
index ed4d623d7d..6603ce82f1 100644
--- a/server/src/test/resources/datanode1conf/iotdb-metric.yml
+++ b/server/src/test/resources/datanode1conf/iotdb-metric.yml
@@ -18,7 +18,7 @@
 #
 
 # whether enable the module
-enableMetric: false
+enableMetric: true
 
 # Is stat performance of operation latency
 enablePerformanceStat: false
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9097
 
diff --git a/server/src/test/resources/datanode2conf/iotdb-metric.yml b/server/src/test/resources/datanode2conf/iotdb-metric.yml
index ce73290f9d..d91f17e54c 100644
--- a/server/src/test/resources/datanode2conf/iotdb-metric.yml
+++ b/server/src/test/resources/datanode2conf/iotdb-metric.yml
@@ -18,7 +18,7 @@
 #
 
 # whether enable the module
-enableMetric: false
+enableMetric: true
 
 # Is stat performance of operation latency
 enablePerformanceStat: false
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9099
 
diff --git a/server/src/test/resources/datanode3conf/iotdb-metric.yml b/server/src/test/resources/datanode3conf/iotdb-metric.yml
index 2102c2ce5a..05c9255ad6 100644
--- a/server/src/test/resources/datanode3conf/iotdb-metric.yml
+++ b/server/src/test/resources/datanode3conf/iotdb-metric.yml
@@ -18,7 +18,7 @@
 #
 
 # whether enable the module
-enableMetric: false
+enableMetric: true
 
 # Is stat performance of operation latency
 enablePerformanceStat: false
@@ -34,11 +34,6 @@ monitorType: MICROMETER
 # Level of metric level, options: [CORE, IMPORTANT, NORMAL, ALL]
 metricLevel: IMPORTANT
 
-# Predefined metric, options: [JVM, LOGBACK, FILE, PROCESS, SYSTEM]
-predefinedMetrics:
-  - JVM
-  - FILE
-
 # The http server's port for prometheus exporter to get metric data.
 prometheusExporterPort: 9101
 
diff --git a/server/src/test/resources/logback-test.xml b/server/src/test/resources/logback-test.xml
index 4b03f9ba91..2dfb84a4a8 100644
--- a/server/src/test/resources/logback-test.xml
+++ b/server/src/test/resources/logback-test.xml
@@ -45,7 +45,7 @@
     <logger name="org.apache.iotdb.db.metadata" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.ThriftServiceThread" level="INFO"/>
     <logger name="org.eclipse.jetty.util.thread.QueuedThreadPool" level="INFO"/>
-    <logger name="org.apache.iotdb.db.service.metrics.MetricService" level="INFO"/>
+    <logger name="org.apache.iotdb.commons.service.metric.MetricService" level="INFO"/>
     <logger name="org.apache.iotdb.db.engine.flush.FlushManager" level="INFO"/>
     <logger name="org.apache.iotdb.db.integration.IoTDBCompactionIT" level="INFO"/>
     <logger name="org.apache.iotdb.commons.service.RegisterManager" level="INFO"/>
diff --git a/spark-iotdb-connector/src/test/scala/org/apache/iotdb/spark/db/EnvironmentUtils.java b/spark-iotdb-connector/src/test/scala/org/apache/iotdb/spark/db/EnvironmentUtils.java
index 6b21d77368..ff28000c74 100644
--- a/spark-iotdb-connector/src/test/scala/org/apache/iotdb/spark/db/EnvironmentUtils.java
+++ b/spark-iotdb-connector/src/test/scala/org/apache/iotdb/spark/db/EnvironmentUtils.java
@@ -39,7 +39,7 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.FileReaderManager;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.service.metrics.MetricService;
+import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.db.wal.WALManager;
 import org.apache.iotdb.jdbc.Config;
 import org.junit.Assert;