You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ta...@apache.org on 2023/07/25 14:17:40 UTC

[iotdb] branch rel/1.2 updated: [IOTDB-6082] Improve disk space metrics (#10667) (#10682)

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

tanxinyu pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.2 by this push:
     new 69eeca8b990 [IOTDB-6082] Improve disk space metrics (#10667) (#10682)
69eeca8b990 is described below

commit 69eeca8b9908acdf206a71159f097bb8ff617a3c
Author: Xiangpeng Hu <65...@users.noreply.github.com>
AuthorDate: Tue Jul 25 22:17:34 2023 +0800

    [IOTDB-6082] Improve disk space metrics (#10667) (#10682)
---
 .../iotdb/confignode/service/ConfigNode.java       |  13 +-
 .../impl/DataNodeInternalRPCServiceImpl.java       |  17 +-
 .../db/service/metrics/DataNodeMetricsHelper.java  |  16 +-
 .../iotdb/db/service/metrics/ProcessMetrics.java   |  83 ++++---
 .../iotdb/metrics/metricsets/UpTimeMetrics.java    |   5 +-
 .../metrics/metricsets/cpu/CpuUsageMetrics.java    |  48 ++--
 .../iotdb/metrics/metricsets/disk/DiskMetrics.java | 269 ++++++++++++++-------
 .../metricsets/jvm/JvmClassLoaderMetrics.java      |  10 +-
 .../metrics/metricsets/jvm/JvmCompileMetrics.java  |  11 +-
 .../iotdb/metrics/metricsets/jvm/JvmGcMetrics.java |  27 ++-
 .../metrics/metricsets/jvm/JvmMemoryMetrics.java   |  65 ++---
 .../metrics/metricsets/jvm/JvmThreadMetrics.java   |  29 ++-
 .../metrics/metricsets/logback/LogbackMetrics.java |  17 +-
 .../iotdb/metrics/metricsets/net/NetMetrics.java   |  76 +++---
 .../metrics/metricsets/system}/SystemMetrics.java  | 163 ++++++-------
 .../apache/iotdb/metrics/utils/SystemMetric.java   | 105 ++++++++
 .../UpTimeMetrics.java => utils/SystemTag.java}    |  38 +--
 .../commons/concurrent/ThreadPoolMetrics.java      |  74 +++---
 .../iotdb/commons/service/metric/enums/Metric.java |  32 +--
 19 files changed, 694 insertions(+), 404 deletions(-)

diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index edc0435ba15..073a95aa034 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.client.ClientManagerMetrics;
 import org.apache.iotdb.commons.concurrent.ThreadModule;
 import org.apache.iotdb.commons.concurrent.ThreadName;
+import org.apache.iotdb.commons.concurrent.ThreadPoolMetrics;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.StartupException;
 import org.apache.iotdb.commons.service.JMXService;
@@ -44,7 +45,6 @@ import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRestartReq;
 import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCService;
 import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCServiceProcessor;
 import org.apache.iotdb.db.service.metrics.ProcessMetrics;
-import org.apache.iotdb.db.service.metrics.SystemMetrics;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.metricsets.UpTimeMetrics;
 import org.apache.iotdb.metrics.metricsets.cpu.CpuUsageMetrics;
@@ -52,6 +52,7 @@ import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics;
 import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
 import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
 import org.apache.iotdb.metrics.metricsets.net.NetMetrics;
+import org.apache.iotdb.metrics.metricsets.system.SystemMetrics;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.slf4j.Logger;
@@ -242,11 +243,19 @@ public class ConfigNode implements ConfigNodeMBean {
     MetricService.getInstance().addMetricSet(new JvmMetrics());
     MetricService.getInstance().addMetricSet(new LogbackMetrics());
     MetricService.getInstance().addMetricSet(new ProcessMetrics());
-    MetricService.getInstance().addMetricSet(new SystemMetrics(false));
     MetricService.getInstance().addMetricSet(new DiskMetrics(IoTDBConstant.CN_ROLE));
     MetricService.getInstance().addMetricSet(new NetMetrics(IoTDBConstant.CN_ROLE));
     MetricService.getInstance().addMetricSet(ClientManagerMetrics.getInstance());
+    MetricService.getInstance().addMetricSet(ThreadPoolMetrics.getInstance());
     initCpuMetrics();
+    initSystemMetrics();
+  }
+
+  private void initSystemMetrics() {
+    ArrayList<String> diskDirs = new ArrayList<>();
+    diskDirs.add(CONF.getSystemDir());
+    diskDirs.add(CONF.getConsensusDir());
+    MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs));
   }
 
   private void initCpuMetrics() {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 2aa7d3496a5..33c6cfcee4d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -45,7 +45,6 @@ import org.apache.iotdb.commons.pipe.plugin.meta.PipePluginMeta;
 import org.apache.iotdb.commons.pipe.task.meta.PipeMeta;
 import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
 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.trigger.TriggerInformation;
 import org.apache.iotdb.commons.udf.UDFInformation;
@@ -129,6 +128,7 @@ import org.apache.iotdb.db.utils.ErrorHandlingUtils;
 import org.apache.iotdb.db.utils.SetThreadName;
 import org.apache.iotdb.metrics.type.AutoGauge;
 import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 import org.apache.iotdb.mpp.rpc.thrift.IDataNodeRPCService;
 import org.apache.iotdb.mpp.rpc.thrift.TActiveTriggerInstanceReq;
 import org.apache.iotdb.mpp.rpc.thrift.TAlterViewReq;
@@ -257,6 +257,8 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
   private final DataNodeThrottleQuotaManager throttleQuotaManager =
       DataNodeThrottleQuotaManager.getInstance();
 
+  private static final String SYSTEM = "system";
+
   public DataNodeInternalRPCServiceImpl() {
     super();
     partitionFetcher = ClusterPartitionFetcher.getInstance();
@@ -1134,7 +1136,10 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
       double cpuLoad =
           MetricService.getInstance()
               .getAutoGauge(
-                  Metric.SYS_CPU_LOAD.toString(), MetricLevel.CORE, Tag.NAME.toString(), "system")
+                  SystemMetric.SYS_CPU_LOAD.toString(),
+                  MetricLevel.CORE,
+                  Tag.NAME.toString(),
+                  SYSTEM)
               .value();
       if (cpuLoad != 0) {
         loadSample.setCpuUsageRate(cpuLoad);
@@ -1244,18 +1249,18 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
     double freeDisk =
         MetricService.getInstance()
             .getAutoGauge(
-                Metric.SYS_DISK_FREE_SPACE.toString(),
+                SystemMetric.SYS_DISK_FREE_SPACE.toString(),
                 MetricLevel.CORE,
                 Tag.NAME.toString(),
-                "system")
+                SYSTEM)
             .value();
     double totalDisk =
         MetricService.getInstance()
             .getAutoGauge(
-                Metric.SYS_DISK_TOTAL_SPACE.toString(),
+                SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
                 MetricLevel.CORE,
                 Tag.NAME.toString(),
-                "system")
+                SYSTEM)
             .value();
 
     if (freeDisk != 0 && totalDisk != 0) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
index 022d3fb2d60..cbcba846174 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
@@ -23,9 +23,11 @@ import org.apache.iotdb.commons.client.ClientManagerMetrics;
 import org.apache.iotdb.commons.concurrent.ThreadModule;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.concurrent.ThreadPoolMetrics;
+import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.queryengine.metric.DataExchangeCostMetricSet;
 import org.apache.iotdb.db.queryengine.metric.DataExchangeCountMetricSet;
 import org.apache.iotdb.db.queryengine.metric.DriverSchedulerMetricSet;
@@ -40,6 +42,7 @@ import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics;
 import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
 import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
 import org.apache.iotdb.metrics.metricsets.net.NetMetrics;
+import org.apache.iotdb.metrics.metricsets.system.SystemMetrics;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -55,11 +58,11 @@ public class DataNodeMetricsHelper {
     MetricService.getInstance().addMetricSet(FileMetrics.getInstance());
     MetricService.getInstance().addMetricSet(CompactionMetrics.getInstance());
     MetricService.getInstance().addMetricSet(new ProcessMetrics());
-    MetricService.getInstance().addMetricSet(new SystemMetrics(true));
     MetricService.getInstance().addMetricSet(new DiskMetrics(IoTDBConstant.DN_ROLE));
     MetricService.getInstance().addMetricSet(new NetMetrics(IoTDBConstant.DN_ROLE));
     MetricService.getInstance().addMetricSet(ClientManagerMetrics.getInstance());
     initCpuMetrics();
+    initSystemMetrics();
     MetricService.getInstance().addMetricSet(WritingMetrics.getInstance());
 
     // bind query related metrics
@@ -76,6 +79,17 @@ public class DataNodeMetricsHelper {
     MetricService.getInstance().addMetricSet(PerformanceOverviewMetrics.getInstance());
   }
 
+  private static void initSystemMetrics() {
+    ArrayList<String> diskDirs = new ArrayList<>();
+    diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSystemDir());
+    diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getConsensusDir());
+    diskDirs.addAll(Arrays.asList(IoTDBDescriptor.getInstance().getConfig().getDataDirs()));
+    diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs()));
+    diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir());
+    diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir());
+    MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs));
+  }
+
   private static void initCpuMetrics() {
     List<String> threadModules = new ArrayList<>();
     Arrays.stream(ThreadModule.values()).forEach(x -> threadModules.add(x.toString()));
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
index 0cef3721bba..52aed7d54a9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/ProcessMetrics.java
@@ -19,13 +19,13 @@
 
 package org.apache.iotdb.db.service.metrics;
 
-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.MetricConstant;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 
 import com.sun.management.OperatingSystemMXBean;
 
@@ -34,6 +34,7 @@ import java.lang.management.ManagementFactory;
 public class ProcessMetrics implements IMetricSet {
   private final OperatingSystemMXBean sunOsMxBean;
   private final Runtime runtime;
+  private static final String PROCESS = "process";
   private long lastUpdateTime = 0L;
   private volatile long processCpuLoad = 0L;
   private volatile long processCpuTime = 0L;
@@ -62,7 +63,7 @@ public class ProcessMetrics implements IMetricSet {
 
   private void collectProcessCpuInfo(AbstractMetricService metricService) {
     metricService.createAutoGauge(
-        Metric.PROCESS_CPU_LOAD.toString(),
+        SystemMetric.PROCESS_CPU_LOAD.toString(),
         MetricLevel.CORE,
         sunOsMxBean,
         a -> {
@@ -74,10 +75,10 @@ public class ProcessMetrics implements IMetricSet {
           return processCpuLoad;
         },
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
 
     metricService.createAutoGauge(
-        Metric.PROCESS_CPU_TIME.toString(),
+        SystemMetric.PROCESS_CPU_TIME.toString(),
         MetricLevel.CORE,
         sunOsMxBean,
         bean -> {
@@ -89,102 +90,126 @@ public class ProcessMetrics implements IMetricSet {
           return processCpuTime;
         },
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
   }
 
   private void removeProcessCpuInfo(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_CPU_LOAD.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_CPU_LOAD.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
 
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_CPU_TIME.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_CPU_TIME.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
   }
 
   private void collectProcessMemInfo(AbstractMetricService metricService) {
     Runtime runtime = Runtime.getRuntime();
     metricService.createAutoGauge(
-        Metric.PROCESS_MAX_MEM.toString(),
+        SystemMetric.PROCESS_MAX_MEM.toString(),
         MetricLevel.CORE,
         runtime,
         a -> runtime.maxMemory(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
     metricService.createAutoGauge(
-        Metric.PROCESS_TOTAL_MEM.toString(),
+        SystemMetric.PROCESS_TOTAL_MEM.toString(),
         MetricLevel.CORE,
         runtime,
         a -> runtime.totalMemory(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
     metricService.createAutoGauge(
-        Metric.PROCESS_FREE_MEM.toString(),
+        SystemMetric.PROCESS_FREE_MEM.toString(),
         MetricLevel.CORE,
         runtime,
         a -> runtime.freeMemory(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
     // TODO maybe following metrics can be removed
     metricService.createAutoGauge(
-        Metric.PROCESS_USED_MEM.toString(),
+        SystemMetric.PROCESS_USED_MEM.toString(),
         MetricLevel.IMPORTANT,
         this,
         a -> getProcessUsedMemory(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
     metricService.createAutoGauge(
-        Metric.PROCESS_MEM_RATIO.toString(),
+        SystemMetric.PROCESS_MEM_RATIO.toString(),
         MetricLevel.IMPORTANT,
         this,
         a -> Math.round(getProcessMemoryRatio()),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
   }
 
   private void removeProcessMemInfo(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_MAX_MEM.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_MAX_MEM.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_TOTAL_MEM.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_TOTAL_MEM.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_FREE_MEM.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_FREE_MEM.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_USED_MEM.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_USED_MEM.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_MEM_RATIO.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_MEM_RATIO.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
   }
 
   private void collectThreadInfo(AbstractMetricService metricService) {
     // TODO maybe duplicated with thread info in jvm related metrics
     metricService.createAutoGauge(
-        Metric.PROCESS_THREADS_COUNT.toString(),
+        SystemMetric.PROCESS_THREADS_COUNT.toString(),
         MetricLevel.IMPORTANT,
         this,
         a -> getThreadsCount(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
   }
 
   private void removeThreadInfo(AbstractMetricService metricService) {
     metricService.remove(
         MetricType.AUTO_GAUGE,
-        Metric.PROCESS_THREADS_COUNT.toString(),
+        SystemMetric.PROCESS_THREADS_COUNT.toString(),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
   }
 
   private void collectProcessStatusInfo(AbstractMetricService metricService) {
     metricService.createAutoGauge(
-        Metric.PROCESS_STATUS.toString(),
+        SystemMetric.PROCESS_STATUS.toString(),
         MetricLevel.IMPORTANT,
         this,
         a -> (getProcessStatus()),
         Tag.NAME.toString(),
-        "process");
+        PROCESS);
   }
 
   private void removeProcessStatusInfo(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.PROCESS_STATUS.toString(), Tag.NAME.toString(), "process");
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_STATUS.toString(),
+        Tag.NAME.toString(),
+        PROCESS);
   }
 
   private long getProcessUsedMemory() {
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
index 0f442100413..bd3748f5291 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.metrics.config.MetricConfig;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 
 public class UpTimeMetrics implements IMetricSet {
   MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig();
@@ -31,7 +32,7 @@ public class UpTimeMetrics implements IMetricSet {
   @Override
   public void bindTo(AbstractMetricService metricService) {
     metricService.createAutoGauge(
-        "up_time",
+        SystemMetric.UP_TIME.toString(),
         MetricLevel.CORE,
         metricConfig,
         config -> System.nanoTime() - config.getUpTimeInNs());
@@ -39,6 +40,6 @@ public class UpTimeMetrics implements IMetricSet {
 
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
-    metricService.remove(MetricType.AUTO_GAUGE, "up_time");
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.UP_TIME.toString());
   }
 }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java
index 04f2e52daf9..81a02714bd6 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java
@@ -25,6 +25,8 @@ import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.type.AutoGauge;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,12 +45,6 @@ import java.util.stream.Collectors;
 
 public class CpuUsageMetrics implements IMetricSet {
   private static final Logger logger = LoggerFactory.getLogger(CpuUsageMetrics.class);
-  private static final String MODULE_CPU_USAGE = "module_cpu_usage";
-  private static final String POOL_CPU_USAGE = "pool_cpu_usage";
-  private static final String POOL = "pool";
-  private static final String MODULE = "module";
-  private static final String MODULE_USER_TIME_PERCENTAGE = "module_user_time_percentage";
-  private static final String POOL_USER_TIME_PERCENTAGE = "user_time_percentage";
   private final List<String> modules;
   private final List<String> pools;
   private static final long UPDATE_INTERVAL = 10_000L;
@@ -84,34 +80,34 @@ public class CpuUsageMetrics implements IMetricSet {
     this.metricService = metricService;
     for (String moduleName : modules) {
       metricService.createAutoGauge(
-          MODULE_CPU_USAGE,
+          SystemMetric.MODULE_CPU_USAGE.toString(),
           MetricLevel.IMPORTANT,
           this,
           x -> x.getModuleCpuUsage().getOrDefault(moduleName, 0.0),
-          MODULE,
+          SystemTag.MODULE.toString(),
           moduleName);
       metricService.createAutoGauge(
-          MODULE_USER_TIME_PERCENTAGE,
+          SystemMetric.MODULE_USER_TIME_PERCENTAGE.toString(),
           MetricLevel.IMPORTANT,
           this,
           x -> x.getModuleUserTimePercentage().getOrDefault(moduleName, 0.0),
-          MODULE,
+          SystemTag.MODULE.toString(),
           moduleName);
     }
     for (String poolName : pools) {
       metricService.createAutoGauge(
-          POOL_CPU_USAGE,
+          SystemMetric.POOL_CPU_USAGE.toString(),
           MetricLevel.IMPORTANT,
           this,
           x -> x.getPoolCpuUsage().getOrDefault(poolName, 0.0),
-          POOL,
+          SystemTag.POOL.toString(),
           poolName);
       metricService.createAutoGauge(
-          POOL_USER_TIME_PERCENTAGE,
+          SystemMetric.POOL_USER_TIME_PERCENTAGE.toString(),
           MetricLevel.IMPORTANT,
           this,
           x -> x.getPoolUserCpuPercentage().getOrDefault(poolName, 0.0),
-          POOL,
+          SystemTag.POOL.toString(),
           poolName);
     }
   }
@@ -119,12 +115,28 @@ public class CpuUsageMetrics implements IMetricSet {
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
     for (String moduleName : modules) {
-      metricService.remove(MetricType.AUTO_GAUGE, MODULE_CPU_USAGE, MODULE, moduleName);
-      metricService.remove(MetricType.AUTO_GAUGE, MODULE_USER_TIME_PERCENTAGE, MODULE, moduleName);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.MODULE_CPU_USAGE.toString(),
+          SystemTag.MODULE.toString(),
+          moduleName);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.MODULE_USER_TIME_PERCENTAGE.toString(),
+          SystemTag.MODULE.toString(),
+          moduleName);
     }
     for (String poolName : pools) {
-      metricService.remove(MetricType.AUTO_GAUGE, POOL_CPU_USAGE, POOL, poolName);
-      metricService.remove(MetricType.AUTO_GAUGE, POOL_USER_TIME_PERCENTAGE, POOL, poolName);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.POOL_CPU_USAGE.toString(),
+          SystemTag.POOL.toString(),
+          poolName);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.POOL_USER_TIME_PERCENTAGE.toString(),
+          SystemTag.POOL.toString(),
+          poolName);
     }
   }
 
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/disk/DiskMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/disk/DiskMetrics.java
index d9ff06f6dd0..c9c2b393cde 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/disk/DiskMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/disk/DiskMetrics.java
@@ -23,6 +23,8 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.util.Set;
 
@@ -41,21 +43,6 @@ public class DiskMetrics implements IMetricSet {
   private static final String ATTEMPT_WRITE = "attempt_write";
   private static final String ACTUAL_WRITE = "actual_write";
   private static final String ACTUAL_READ = "actual_read";
-  private static final String TYPE = "type";
-  private static final String DISK_ID = "disk_id";
-  private static final String NAME = "name";
-  private static final String FROM = "from";
-
-  private static final String DISK_IO_SIZE = "disk_io_size";
-  private static final String DISK_IO_OPS = "disk_io_ops";
-  private static final String DISK_IO_TIME = "disk_io_time";
-  private static final String DISK_IO_AVG_TIME = "disk_io_avg_time";
-  private static final String DISK_IO_AVG_SIZE = "disk_io_avg_size";
-  private static final String DISK_IO_BUSY_PERCENTAGE = "disk_io_busy_percentage";
-  private static final String DISK_IO_QUEUE_SIZE = "disk_io_avg_queue_size";
-
-  private static final String PROCESS_IO_OPS = "process_io_ops";
-  private static final String PROCESS_IO_SIZE = "process_io_size";
 
   public DiskMetrics(String processName) {
     this.processName = processName;
@@ -67,183 +54,183 @@ public class DiskMetrics implements IMetricSet {
     Set<String> diskIDs = diskMetricsManager.getDiskIds();
     for (String diskID : diskIDs) {
       metricService.createAutoGauge(
-          DISK_IO_SIZE,
+          SystemMetric.DISK_IO_SIZE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadDataSizeForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_SIZE,
+          SystemMetric.DISK_IO_SIZE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteDataSizeForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_OPS,
+          SystemMetric.DISK_IO_OPS.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadOperationCountForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_OPS,
+          SystemMetric.DISK_IO_OPS.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteOperationCountForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_OPS,
+          SystemMetric.DISK_IO_OPS.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getMergedReadOperationForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           MERGED_READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_OPS,
+          SystemMetric.DISK_IO_OPS.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getMergedWriteOperationForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           MERGED_WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_TIME,
+          SystemMetric.DISK_IO_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getReadCostTimeForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_TIME,
+          SystemMetric.DISK_IO_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getWriteCostTimeForDisk().getOrDefault(diskID, 0L),
-          TYPE,
+          SystemTag.TYPE.toString(),
           WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_AVG_TIME,
+          SystemMetric.DISK_IO_AVG_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgReadCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_AVG_TIME,
+          SystemMetric.DISK_IO_AVG_TIME.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgWriteCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_AVG_SIZE,
+          SystemMetric.DISK_IO_AVG_SIZE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgSizeOfEachReadForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           READ,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_AVG_SIZE,
+          SystemMetric.DISK_IO_AVG_SIZE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getAvgSizeOfEachWriteForDisk().getOrDefault(diskID, 0.0),
-          TYPE,
+          SystemTag.TYPE.toString(),
           WRITE,
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_BUSY_PERCENTAGE,
+          SystemMetric.DISK_IO_BUSY_PERCENTAGE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getIoUtilsPercentage().getOrDefault(diskID, 0.0),
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
       metricService.createAutoGauge(
-          DISK_IO_QUEUE_SIZE,
+          SystemMetric.DISK_IO_AVG_QUEUE_SIZE.toString(),
           MetricLevel.IMPORTANT,
           diskMetricsManager,
           x -> x.getQueueSizeForDisk().getOrDefault(diskID, 0.0),
-          DISK_ID,
+          SystemTag.DISK.toString(),
           diskID);
     }
 
     // metrics for datanode and config node
     metricService.createAutoGauge(
-        PROCESS_IO_OPS,
+        SystemMetric.PROCESS_IO_OPS.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getReadOpsCountForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         READ);
     metricService.createAutoGauge(
-        PROCESS_IO_OPS,
+        SystemMetric.PROCESS_IO_OPS.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getWriteOpsCountForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         WRITE);
     metricService.createAutoGauge(
-        PROCESS_IO_SIZE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getActualReadDataSizeForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         ACTUAL_READ);
     metricService.createAutoGauge(
-        PROCESS_IO_SIZE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getActualWriteDataSizeForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         ACTUAL_WRITE);
     metricService.createAutoGauge(
-        PROCESS_IO_SIZE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getAttemptReadSizeForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         ATTEMPT_READ);
     metricService.createAutoGauge(
-        PROCESS_IO_SIZE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
         MetricLevel.IMPORTANT,
         diskMetricsManager,
         IDiskMetricsManager::getAttemptWriteSizeForProcess,
-        FROM,
+        SystemTag.FROM.toString(),
         processName,
-        NAME,
+        SystemTag.NAME.toString(),
         ATTEMPT_WRITE);
   }
 
@@ -252,30 +239,130 @@ public class DiskMetrics implements IMetricSet {
     // metrics for disks
     Set<String> diskIDs = diskMetricsManager.getDiskIds();
     for (String diskID : diskIDs) {
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_SIZE, TYPE, READ, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_SIZE, TYPE, WRITE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_OPS, TYPE, READ, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_OPS, TYPE, WRITE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_TIME, TYPE, READ, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_TIME, TYPE, WRITE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_TIME, TYPE, AVG_READ, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_TIME, TYPE, AVG_WRITE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_AVG_SIZE, TYPE, READ, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_AVG_SIZE, TYPE, WRITE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_BUSY_PERCENTAGE, NAME, diskID);
-      metricService.remove(MetricType.AUTO_GAUGE, DISK_IO_QUEUE_SIZE, NAME, diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_SIZE.toString(),
+          SystemTag.TYPE.toString(),
+          READ,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_SIZE.toString(),
+          SystemTag.TYPE.toString(),
+          WRITE,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_OPS.toString(),
+          SystemTag.TYPE.toString(),
+          READ,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_OPS.toString(),
+          SystemTag.TYPE.toString(),
+          WRITE,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_OPS.toString(),
+          SystemTag.TYPE.toString(),
+          AVG_READ,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_OPS.toString(),
+          SystemTag.TYPE.toString(),
+          AVG_WRITE,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_TIME.toString(),
+          SystemTag.TYPE.toString(),
+          READ,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_TIME.toString(),
+          SystemTag.TYPE.toString(),
+          WRITE,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_AVG_SIZE.toString(),
+          SystemTag.TYPE.toString(),
+          READ,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_AVG_SIZE.toString(),
+          SystemTag.TYPE.toString(),
+          WRITE,
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_BUSY_PERCENTAGE.toString(),
+          SystemTag.DISK.toString(),
+          diskID);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.DISK_IO_AVG_QUEUE_SIZE.toString(),
+          SystemTag.DISK.toString(),
+          diskID);
     }
 
     // metrics for datanode and config node
     metricService.remove(
-        MetricType.AUTO_GAUGE, PROCESS_IO_SIZE, FROM, processName, NAME, ACTUAL_READ);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        ACTUAL_READ);
+    metricService.remove(
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        ACTUAL_WRITE);
+    metricService.remove(
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        ATTEMPT_READ);
     metricService.remove(
-        MetricType.AUTO_GAUGE, PROCESS_IO_SIZE, FROM, processName, NAME, ACTUAL_WRITE);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_SIZE.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        ATTEMPT_WRITE);
     metricService.remove(
-        MetricType.AUTO_GAUGE, PROCESS_IO_SIZE, FROM, processName, NAME, ATTEMPT_READ);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_OPS.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        READ);
     metricService.remove(
-        MetricType.AUTO_GAUGE, PROCESS_IO_SIZE, FROM, processName, NAME, ATTEMPT_WRITE);
-    metricService.remove(MetricType.AUTO_GAUGE, PROCESS_IO_OPS, FROM, processName, NAME, READ);
-    metricService.remove(MetricType.AUTO_GAUGE, PROCESS_IO_OPS, FROM, processName, NAME, WRITE);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.PROCESS_IO_OPS.toString(),
+        SystemTag.FROM.toString(),
+        processName,
+        SystemTag.NAME.toString(),
+        WRITE);
   }
 }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
index 32e5a857104..6a45ee4a461 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmClassLoaderMetrics.java
@@ -23,6 +23,7 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
 
 import java.lang.management.ClassLoadingMXBean;
 import java.lang.management.ManagementFactory;
@@ -33,12 +34,12 @@ public class JvmClassLoaderMetrics implements IMetricSet {
   public void bindTo(AbstractMetricService metricService) {
     ClassLoadingMXBean classLoadingBean = ManagementFactory.getClassLoadingMXBean();
     metricService.createAutoGauge(
-        "jvm_classes_loaded_classes",
+        SystemMetric.JVM_CLASSES_LOADED_CLASSES.toString(),
         MetricLevel.IMPORTANT,
         classLoadingBean,
         ClassLoadingMXBean::getLoadedClassCount);
     metricService.createAutoGauge(
-        "jvm_classes_unloaded_classes",
+        SystemMetric.JVM_CLASSES_UNLOADED_CLASSES.toString(),
         MetricLevel.IMPORTANT,
         classLoadingBean,
         ClassLoadingMXBean::getUnloadedClassCount);
@@ -46,7 +47,8 @@ public class JvmClassLoaderMetrics implements IMetricSet {
 
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_classes_loaded_classes");
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_classes_unloaded_classes");
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.JVM_CLASSES_LOADED_CLASSES.toString());
+    metricService.remove(
+        MetricType.AUTO_GAUGE, SystemMetric.JVM_CLASSES_UNLOADED_CLASSES.toString());
   }
 }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
index 69e11ba28de..c36776da886 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmCompileMetrics.java
@@ -23,6 +23,8 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.lang.management.CompilationMXBean;
 import java.lang.management.ManagementFactory;
@@ -34,11 +36,11 @@ public class JvmCompileMetrics implements IMetricSet {
     CompilationMXBean compilationBean = ManagementFactory.getCompilationMXBean();
     if (compilationBean != null && compilationBean.isCompilationTimeMonitoringSupported()) {
       metricService.createAutoGauge(
-          "jvm_compilation_time_ms",
+          SystemMetric.JVM_COMPILATION_TIME_MS.toString(),
           MetricLevel.IMPORTANT,
           compilationBean,
           CompilationMXBean::getTotalCompilationTime,
-          "compiler",
+          SystemTag.COMPILER.toString(),
           compilationBean.getName());
     }
   }
@@ -48,7 +50,10 @@ public class JvmCompileMetrics implements IMetricSet {
     CompilationMXBean compilationBean = ManagementFactory.getCompilationMXBean();
     if (compilationBean != null && compilationBean.isCompilationTimeMonitoringSupported()) {
       metricService.remove(
-          MetricType.AUTO_GAUGE, "jvm_compilation_time_ms", "compiler", compilationBean.getName());
+          MetricType.AUTO_GAUGE,
+          SystemMetric.JVM_COMPILATION_TIME_MS.toString(),
+          SystemTag.COMPILER.toString(),
+          compilationBean.getName());
     }
   }
 }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
index 77264c868a9..b0d175a0cc0 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmGcMetrics.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.metrics.type.Counter;
 import org.apache.iotdb.metrics.type.Timer;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 
 import com.sun.management.GarbageCollectionNotificationInfo;
 import com.sun.management.GcInfo;
@@ -85,19 +86,27 @@ public class JvmGcMetrics implements IMetricSet, AutoCloseable {
 
     AtomicLong maxDataSize = new AtomicLong((long) maxLongLivedPoolBytes);
     metricService.createAutoGauge(
-        "jvm_gc_max_data_size_bytes", MetricLevel.CORE, maxDataSize, AtomicLong::get);
+        SystemMetric.JVM_GC_MAX_DATA_SIZE_BYTES.toString(),
+        MetricLevel.CORE,
+        maxDataSize,
+        AtomicLong::get);
 
     AtomicLong liveDataSize = new AtomicLong();
     metricService.createAutoGauge(
-        "jvm_gc_live_data_size_bytes", MetricLevel.CORE, liveDataSize, AtomicLong::get);
+        SystemMetric.JVM_GC_LIVE_DATA_SIZE_BYTES.toString(),
+        MetricLevel.CORE,
+        liveDataSize,
+        AtomicLong::get);
 
     Counter allocatedBytes =
-        metricService.getOrCreateCounter("jvm_gc_memory_allocated_bytes", MetricLevel.CORE);
+        metricService.getOrCreateCounter(
+            SystemMetric.JVM_GC_MEMORY_ALLOCATED_BYTES.toString(), MetricLevel.CORE);
 
     Counter promotedBytes =
         (oldGenPoolName == null)
             ? null
-            : metricService.getOrCreateCounter("jvm_gc_memory_promoted_bytes", MetricLevel.CORE);
+            : metricService.getOrCreateCounter(
+                SystemMetric.JVM_GC_MEMORY_PROMOTED_BYTES.toString(), MetricLevel.CORE);
 
     // start watching for GC notifications
     final AtomicLong heapPoolSizeAfterGc = new AtomicLong();
@@ -203,12 +212,14 @@ public class JvmGcMetrics implements IMetricSet, AutoCloseable {
       return;
     }
 
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_gc_max_data_size_bytes");
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_gc_live_data_size_bytes");
-    metricService.remove(MetricType.COUNTER, "jvm_gc_memory_allocated_bytes");
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.JVM_GC_MAX_DATA_SIZE_BYTES.toString());
+    metricService.remove(
+        MetricType.AUTO_GAUGE, SystemMetric.JVM_GC_LIVE_DATA_SIZE_BYTES.toString());
+    metricService.remove(MetricType.COUNTER, SystemMetric.JVM_GC_MEMORY_ALLOCATED_BYTES.toString());
 
     if (oldGenPoolName != null) {
-      metricService.remove(MetricType.COUNTER, "jvm_gc_memory_promoted_bytes");
+      metricService.remove(
+          MetricType.COUNTER, SystemMetric.JVM_GC_MEMORY_PROMOTED_BYTES.toString());
     }
 
     // start watching for GC notifications
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
index bf23121dfaa..ab342ad238c 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmMemoryMetrics.java
@@ -23,6 +23,8 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.lang.management.BufferPoolMXBean;
 import java.lang.management.ManagementFactory;
@@ -37,27 +39,27 @@ public class JvmMemoryMetrics implements IMetricSet {
     for (BufferPoolMXBean bufferPoolBean :
         ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) {
       metricService.createAutoGauge(
-          "jvm_buffer_count_buffers",
+          SystemMetric.JVM_BUFFER_COUNT_BUFFERS.toString(),
           MetricLevel.CORE,
           bufferPoolBean,
           BufferPoolMXBean::getCount,
-          "id",
+          SystemTag.ID.toString(),
           bufferPoolBean.getName());
 
       metricService.createAutoGauge(
-          "jvm_buffer_memory_used_bytes",
+          SystemMetric.JVM_BUFFER_MEMORY_USED_BYTES.toString(),
           MetricLevel.CORE,
           bufferPoolBean,
           BufferPoolMXBean::getMemoryUsed,
-          "id",
+          SystemTag.ID.toString(),
           bufferPoolBean.getName());
 
       metricService.createAutoGauge(
-          "jvm_buffer_total_capacity_bytes",
+          SystemMetric.JVM_BUFFER_TOTAL_CAPACITY_BYTES.toString(),
           MetricLevel.CORE,
           bufferPoolBean,
           BufferPoolMXBean::getTotalCapacity,
-          "id",
+          SystemTag.ID.toString(),
           bufferPoolBean.getName());
     }
 
@@ -66,33 +68,33 @@ public class JvmMemoryMetrics implements IMetricSet {
       String area = MemoryType.HEAP.equals(memoryPoolBean.getType()) ? "heap" : "nonheap";
 
       metricService.createAutoGauge(
-          "jvm_memory_used_bytes",
+          SystemMetric.JVM_MEMORY_USED_BYTES.toString(),
           MetricLevel.CORE,
           memoryPoolBean,
           mem -> JvmUtils.getUsageValue(mem, MemoryUsage::getUsed),
-          "id",
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
 
       metricService.createAutoGauge(
-          "jvm_memory_committed_bytes",
+          SystemMetric.JVM_MEMORY_COMMITTED_BYTES.toString(),
           MetricLevel.CORE,
           memoryPoolBean,
           mem -> JvmUtils.getUsageValue(mem, MemoryUsage::getCommitted),
-          "id",
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
 
       metricService.createAutoGauge(
-          "jvm_memory_max_bytes",
+          SystemMetric.JVM_MEMORY_MAX_BYTES.toString(),
           MetricLevel.CORE,
           memoryPoolBean,
           mem -> JvmUtils.getUsageValue(mem, MemoryUsage::getMax),
-          "id",
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
     }
   }
@@ -102,13 +104,22 @@ public class JvmMemoryMetrics implements IMetricSet {
     for (BufferPoolMXBean bufferPoolBean :
         ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) {
       metricService.remove(
-          MetricType.AUTO_GAUGE, "jvm_buffer_count_buffers", "id", bufferPoolBean.getName());
+          MetricType.AUTO_GAUGE,
+          SystemMetric.JVM_BUFFER_COUNT_BUFFERS.toString(),
+          SystemTag.ID.toString(),
+          bufferPoolBean.getName());
 
       metricService.remove(
-          MetricType.AUTO_GAUGE, "jvm_buffer_memory_used_bytes", "id", bufferPoolBean.getName());
+          MetricType.AUTO_GAUGE,
+          SystemMetric.JVM_BUFFER_MEMORY_USED_BYTES.toString(),
+          SystemTag.ID.toString(),
+          bufferPoolBean.getName());
 
       metricService.remove(
-          MetricType.AUTO_GAUGE, "jvm_buffer_total_capacity_bytes", "id", bufferPoolBean.getName());
+          MetricType.AUTO_GAUGE,
+          SystemMetric.JVM_BUFFER_TOTAL_CAPACITY_BYTES.toString(),
+          SystemTag.ID.toString(),
+          bufferPoolBean.getName());
     }
 
     for (MemoryPoolMXBean memoryPoolBean :
@@ -117,26 +128,26 @@ public class JvmMemoryMetrics implements IMetricSet {
 
       metricService.remove(
           MetricType.AUTO_GAUGE,
-          "jvm_memory_used_bytes",
-          "id",
+          SystemMetric.JVM_MEMORY_USED_BYTES.toString(),
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
 
       metricService.remove(
           MetricType.AUTO_GAUGE,
-          "jvm_memory_committed_bytes",
-          "id",
+          SystemMetric.JVM_MEMORY_COMMITTED_BYTES.toString(),
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
 
       metricService.remove(
           MetricType.AUTO_GAUGE,
-          "jvm_memory_max_bytes",
-          "id",
+          SystemMetric.JVM_MEMORY_MAX_BYTES.toString(),
+          SystemTag.ID.toString(),
           memoryPoolBean.getName(),
-          "area",
+          SystemTag.AREA.toString(),
           area);
     }
   }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
index 1dbc5600cc9..cd8fcbd6cd0 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.metrics.MetricConstant;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.lang.management.ManagementFactory;
 import java.lang.management.ThreadInfo;
@@ -44,26 +46,32 @@ public class JvmThreadMetrics implements IMetricSet {
     ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
 
     metricService.createAutoGauge(
-        "jvm_threads_peak_threads", MetricLevel.CORE, threadBean, ThreadMXBean::getPeakThreadCount);
+        SystemMetric.JVM_THREADS_PEAK_THREADS.toString(),
+        MetricLevel.CORE,
+        threadBean,
+        ThreadMXBean::getPeakThreadCount);
 
     metricService.createAutoGauge(
-        "jvm_threads_daemon_threads",
+        SystemMetric.JVM_THREADS_DAEMON_THREADS.toString(),
         MetricLevel.CORE,
         threadBean,
         ThreadMXBean::getDaemonThreadCount);
 
     metricService.createAutoGauge(
-        "jvm_threads_live_threads", MetricLevel.CORE, threadBean, ThreadMXBean::getThreadCount);
+        SystemMetric.JVM_THREADS_LIVE_THREADS.toString(),
+        MetricLevel.CORE,
+        threadBean,
+        ThreadMXBean::getThreadCount);
 
     try {
       threadBean.getAllThreadIds();
       for (Thread.State state : Thread.State.values()) {
         metricService.createAutoGauge(
-            "jvm_threads_states_threads",
+            SystemMetric.JVM_THREADS_STATUS_THREADS.toString(),
             MetricLevel.CORE,
             threadBean,
             bean -> getThreadStateCount(bean, state),
-            "state",
+            SystemTag.STATE.toString(),
             getStateTagValue(state));
       }
     } catch (Exception exception) {
@@ -76,15 +84,18 @@ public class JvmThreadMetrics implements IMetricSet {
   public void unbindFrom(AbstractMetricService metricService) {
     ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
 
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_threads_peak_threads");
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_threads_daemon_threads");
-    metricService.remove(MetricType.AUTO_GAUGE, "jvm_threads_live_threads");
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.JVM_THREADS_PEAK_THREADS.toString());
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.JVM_THREADS_DAEMON_THREADS.toString());
+    metricService.remove(MetricType.AUTO_GAUGE, SystemMetric.JVM_THREADS_LIVE_THREADS.toString());
 
     try {
       threadBean.getAllThreadIds();
       for (Thread.State state : Thread.State.values()) {
         metricService.remove(
-            MetricType.AUTO_GAUGE, "jvm_threads_states_threads", "state", getStateTagValue(state));
+            MetricType.AUTO_GAUGE,
+            SystemMetric.JVM_THREADS_STATUS_THREADS.toString(),
+            SystemTag.STATE.toString(),
+            getStateTagValue(state));
       }
     } catch (Exception exception) {
       // An error will be thrown for unsupported operations
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
index e7766e944f2..0d21790c7fc 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/logback/LogbackMetrics.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.metrics.metricsets.logback;
 import org.apache.iotdb.metrics.AbstractMetricService;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
 
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.Logger;
@@ -36,7 +37,6 @@ import java.util.Map;
 public class LogbackMetrics implements IMetricSet {
   private static final org.slf4j.Logger logger = LoggerFactory.getLogger(LogbackMetrics.class);
   private static final String LEVEL = "level";
-  private static final String METRIC_NAME = "logback_events";
   static ThreadLocal<Boolean> ignoreMetrics = new ThreadLocal<>();
   private final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
   private final Map<AbstractMetricService, MetricsTurboFilter> metricsTurboFilters =
@@ -93,11 +93,16 @@ public class LogbackMetrics implements IMetricSet {
         for (MetricsTurboFilter addMetricsTurboFilter : metricsTurboFilters.values()) {
           loggerContext.getTurboFilterList().remove(addMetricsTurboFilter);
         }
-        metricService.remove(MetricType.COUNTER, METRIC_NAME, LEVEL, "error");
-        metricService.remove(MetricType.COUNTER, METRIC_NAME, LEVEL, "warn");
-        metricService.remove(MetricType.COUNTER, METRIC_NAME, LEVEL, "info");
-        metricService.remove(MetricType.COUNTER, METRIC_NAME, LEVEL, "debug");
-        metricService.remove(MetricType.COUNTER, METRIC_NAME, LEVEL, "trace");
+        metricService.remove(
+            MetricType.COUNTER, SystemMetric.LOGBACK_EVENTS.toString(), LEVEL, "error");
+        metricService.remove(
+            MetricType.COUNTER, SystemMetric.LOGBACK_EVENTS.toString(), LEVEL, "warn");
+        metricService.remove(
+            MetricType.COUNTER, SystemMetric.LOGBACK_EVENTS.toString(), LEVEL, "info");
+        metricService.remove(
+            MetricType.COUNTER, SystemMetric.LOGBACK_EVENTS.toString(), LEVEL, "debug");
+        metricService.remove(
+            MetricType.COUNTER, SystemMetric.LOGBACK_EVENTS.toString(), LEVEL, "trace");
       }
     } catch (Exception e) {
       logger.warn("Failed to remove logBackMetrics, because ", e);
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/net/NetMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/net/NetMetrics.java
index 1cf4d6287e3..3561fd7997c 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/net/NetMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/net/NetMetrics.java
@@ -23,23 +23,15 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.util.Set;
 
 public class NetMetrics implements IMetricSet {
   private final INetMetricManager netMetricManager = INetMetricManager.getNetMetricManager();
-
-  private static final String RECEIVED_BYTES = "received_bytes";
-  private static final String RECEIVED_PACKETS = "received_packets";
-  private static final String TRANSMITTED_BYTES = "transmitted_bytes";
-  private static final String TRANSMITTED_PACKETS = "transmitted_packets";
-  private static final String CONNECTION_NUM = "connection_num";
-
-  private static final String TYPE = "type";
-  private static final String IFACE_NAME = "iface_name";
   private static final String RECEIVE = "receive";
   private static final String TRANSMIT = "transmit";
-  private static final String PROCESS_NAME = "process_num";
 
   private final String processName;
 
@@ -53,48 +45,48 @@ public class NetMetrics implements IMetricSet {
     Set<String> ifaceSet = netMetricManager.getIfaceSet();
     for (String iface : ifaceSet) {
       metricService.createAutoGauge(
-          RECEIVED_BYTES,
+          SystemMetric.RECEIVED_BYTES.toString(),
           MetricLevel.IMPORTANT,
           netMetricManager,
           x -> x.getReceivedByte().getOrDefault(iface, 0L).doubleValue(),
-          TYPE,
+          SystemTag.TYPE.toString(),
           RECEIVE,
-          IFACE_NAME,
+          SystemTag.IFACE_NAME.toString(),
           iface);
       metricService.createAutoGauge(
-          TRANSMITTED_BYTES,
+          SystemMetric.TRANSMITTED_BYTES.toString(),
           MetricLevel.IMPORTANT,
           netMetricManager,
           x -> x.getTransmittedBytes().getOrDefault(iface, 0L).doubleValue(),
-          TYPE,
+          SystemTag.TYPE.toString(),
           TRANSMIT,
-          IFACE_NAME,
+          SystemTag.IFACE_NAME.toString(),
           iface);
       metricService.createAutoGauge(
-          RECEIVED_PACKETS,
+          SystemMetric.RECEIVED_PACKETS.toString(),
           MetricLevel.IMPORTANT,
           netMetricManager,
           x -> x.getReceivedPackets().getOrDefault(iface, 0L).doubleValue(),
-          TYPE,
+          SystemTag.TYPE.toString(),
           RECEIVE,
-          IFACE_NAME,
+          SystemTag.IFACE_NAME.toString(),
           iface);
       metricService.createAutoGauge(
-          TRANSMITTED_PACKETS,
+          SystemMetric.TRANSMITTED_PACKETS.toString(),
           MetricLevel.IMPORTANT,
           netMetricManager,
           x -> x.getTransmittedPackets().getOrDefault(iface, 0L).doubleValue(),
-          TYPE,
+          SystemTag.TYPE.toString(),
           TRANSMIT,
-          IFACE_NAME,
+          SystemTag.IFACE_NAME.toString(),
           iface);
     }
     metricService.createAutoGauge(
-        CONNECTION_NUM,
+        SystemMetric.CONNECTION_NUM.toString(),
         MetricLevel.NORMAL,
         netMetricManager,
         INetMetricManager::getConnectionNum,
-        PROCESS_NAME,
+        SystemTag.PROCESS_NAME.toString(),
         this.processName);
   }
 
@@ -102,13 +94,39 @@ public class NetMetrics implements IMetricSet {
   public void unbindFrom(AbstractMetricService metricService) {
     Set<String> ifaceSet = netMetricManager.getIfaceSet();
     for (String iface : ifaceSet) {
-      metricService.remove(MetricType.AUTO_GAUGE, RECEIVED_BYTES, TYPE, RECEIVE, IFACE_NAME, iface);
-      metricService.remove(MetricType.AUTO_GAUGE, TRANSMIT, TYPE, TRANSMIT, IFACE_NAME, iface);
       metricService.remove(
-          MetricType.AUTO_GAUGE, RECEIVED_PACKETS, TYPE, RECEIVE, IFACE_NAME, iface);
+          MetricType.AUTO_GAUGE,
+          SystemMetric.RECEIVED_BYTES.toString(),
+          SystemTag.TYPE.toString(),
+          RECEIVE,
+          SystemTag.IFACE_NAME.toString(),
+          iface);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          TRANSMIT,
+          SystemTag.TYPE.toString(),
+          TRANSMIT,
+          SystemTag.IFACE_NAME.toString(),
+          iface);
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          SystemMetric.RECEIVED_PACKETS.toString(),
+          SystemTag.TYPE.toString(),
+          RECEIVE,
+          SystemTag.IFACE_NAME.toString(),
+          iface);
       metricService.remove(
-          MetricType.AUTO_GAUGE, TRANSMITTED_PACKETS, TYPE, TRANSMIT, IFACE_NAME, iface);
+          MetricType.AUTO_GAUGE,
+          SystemMetric.TRANSMITTED_PACKETS.toString(),
+          SystemTag.TYPE.toString(),
+          TRANSMIT,
+          SystemTag.IFACE_NAME.toString(),
+          iface);
     }
-    metricService.remove(MetricType.AUTO_GAUGE, CONNECTION_NUM, PROCESS_NAME, this.processName);
+    metricService.remove(
+        MetricType.AUTO_GAUGE,
+        SystemMetric.CONNECTION_NUM.toString(),
+        SystemTag.PROCESS_NAME.toString(),
+        this.processName);
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
similarity index 58%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java
rename to iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
index f85262a12e5..39fd1fe5ad8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/SystemMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/system/SystemMetrics.java
@@ -17,19 +17,15 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.service.metrics;
+package org.apache.iotdb.metrics.metricsets.system;
 
-import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
-import org.apache.iotdb.commons.concurrent.ThreadName;
-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.metrics.AbstractMetricService;
-import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 import org.apache.iotdb.metrics.metricsets.IMetricSet;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
+import org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
+import org.apache.iotdb.tsfile.utils.FSUtils;
 
 import com.sun.management.OperatingSystemMXBean;
 import org.slf4j.Logger;
@@ -41,27 +37,19 @@ import java.nio.file.FileStore;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 public class SystemMetrics implements IMetricSet {
   private static final Logger logger = LoggerFactory.getLogger(SystemMetrics.class);
   private static final String SYSTEM = "system";
   private final com.sun.management.OperatingSystemMXBean osMxBean;
-  private Future<?> currentServiceFuture;
-  private final ScheduledExecutorService service =
-      IoTDBThreadPoolFactory.newSingleThreadScheduledExecutor(
-          ThreadName.SYSTEM_SCHEDULE_METRICS.getName());
   private final Set<FileStore> fileStores = new HashSet<>();
-  private final boolean isDataNode;
-  private long systemDiskTotalSpace = 0L;
-  private long systemDiskFreeSpace = 0L;
+  private final ArrayList<String> diskDirs;
 
-  public SystemMetrics(boolean isDataNode) {
-    this.isDataNode = isDataNode;
+  public SystemMetrics(ArrayList<String> diskDirs) {
+    this.diskDirs = diskDirs;
     this.osMxBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
   }
 
@@ -69,130 +57,117 @@ public class SystemMetrics implements IMetricSet {
   public void bindTo(AbstractMetricService metricService) {
     collectSystemCpuInfo(metricService);
     collectSystemMemInfo(metricService);
-
-    // register disk related metrics and start to collect the value of metrics in async way
-    if (null == currentServiceFuture && isDataNode) {
-      collectSystemDiskInfo(metricService);
-      currentServiceFuture =
-          ScheduledExecutorUtil.safelyScheduleAtFixedRate(
-              service,
-              this::collectDiskMetrics,
-              1,
-              MetricConfigDescriptor.getInstance()
-                  .getMetricConfig()
-                  .getAsyncCollectPeriodInSecond(),
-              TimeUnit.SECONDS);
-    }
+    collectSystemDiskInfo(metricService);
   }
 
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
-    // first stop to update the value of some metrics in async way
-    if (currentServiceFuture != null && isDataNode) {
-      currentServiceFuture.cancel(true);
-      currentServiceFuture = null;
-    }
-
     removeSystemCpuInfo(metricService);
-    if (isDataNode) {
-      removeSystemDiskInfo(metricService);
-    }
+    removeSystemDiskInfo(metricService);
     removeSystemMemInfo(metricService);
   }
 
   private void collectSystemCpuInfo(AbstractMetricService metricService) {
     metricService.createAutoGauge(
-        Metric.SYS_CPU_LOAD.toString(),
+        SystemMetric.SYS_CPU_LOAD.toString(),
         MetricLevel.CORE,
         osMxBean,
         a -> osMxBean.getSystemCpuLoad() * 100,
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
 
     metricService
         .getOrCreateGauge(
-            Metric.SYS_CPU_CORES.toString(), MetricLevel.CORE, Tag.NAME.toString(), SYSTEM)
+            SystemMetric.SYS_CPU_CORES.toString(),
+            MetricLevel.CORE,
+            SystemTag.NAME.toString(),
+            SYSTEM)
         .set(osMxBean.getAvailableProcessors());
   }
 
   private void removeSystemCpuInfo(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.SYS_CPU_LOAD.toString(), Tag.NAME.toString(), SYSTEM);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.SYS_CPU_LOAD.toString(),
+        SystemTag.NAME.toString(),
+        SYSTEM);
 
     metricService.remove(
-        MetricType.GAUGE, Metric.SYS_CPU_CORES.toString(), Tag.NAME.toString(), SYSTEM);
+        MetricType.GAUGE, SystemMetric.SYS_CPU_CORES.toString(), SystemTag.NAME.toString(), SYSTEM);
   }
 
   private void collectSystemMemInfo(AbstractMetricService metricService) {
     metricService
         .getOrCreateGauge(
-            Metric.SYS_TOTAL_PHYSICAL_MEMORY_SIZE.toString(),
+            SystemMetric.SYS_TOTAL_PHYSICAL_MEMORY_SIZE.toString(),
             MetricLevel.CORE,
-            Tag.NAME.toString(),
+            SystemTag.NAME.toString(),
             SYSTEM)
         .set(osMxBean.getTotalPhysicalMemorySize());
     metricService.createAutoGauge(
-        Metric.SYS_FREE_PHYSICAL_MEMORY_SIZE.toString(),
+        SystemMetric.SYS_FREE_PHYSICAL_MEMORY_SIZE.toString(),
         MetricLevel.CORE,
         osMxBean,
         a -> osMxBean.getFreePhysicalMemorySize(),
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.createAutoGauge(
-        Metric.SYS_TOTAL_SWAP_SPACE_SIZE.toString(),
+        SystemMetric.SYS_TOTAL_SWAP_SPACE_SIZE.toString(),
         MetricLevel.CORE,
         osMxBean,
         a -> osMxBean.getTotalSwapSpaceSize(),
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.createAutoGauge(
-        Metric.SYS_FREE_SWAP_SPACE_SIZE.toString(),
+        SystemMetric.SYS_FREE_SWAP_SPACE_SIZE.toString(),
         MetricLevel.CORE,
         osMxBean,
         a -> osMxBean.getFreeSwapSpaceSize(),
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.createAutoGauge(
-        Metric.SYS_COMMITTED_VM_SIZE.toString(),
+        SystemMetric.SYS_COMMITTED_VM_SIZE.toString(),
         MetricLevel.CORE,
         osMxBean,
         a -> osMxBean.getCommittedVirtualMemorySize(),
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
   }
 
   private void removeSystemMemInfo(AbstractMetricService metricService) {
     metricService.remove(
         MetricType.GAUGE,
-        Metric.SYS_TOTAL_PHYSICAL_MEMORY_SIZE.toString(),
-        Tag.NAME.toString(),
+        SystemMetric.SYS_TOTAL_PHYSICAL_MEMORY_SIZE.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.remove(
         MetricType.AUTO_GAUGE,
-        Metric.SYS_FREE_PHYSICAL_MEMORY_SIZE.toString(),
-        Tag.NAME.toString(),
+        SystemMetric.SYS_FREE_PHYSICAL_MEMORY_SIZE.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.remove(
         MetricType.AUTO_GAUGE,
-        Metric.SYS_TOTAL_SWAP_SPACE_SIZE.toString(),
-        Tag.NAME.toString(),
+        SystemMetric.SYS_TOTAL_SWAP_SPACE_SIZE.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.remove(
         MetricType.AUTO_GAUGE,
-        Metric.SYS_FREE_SWAP_SPACE_SIZE.toString(),
-        Tag.NAME.toString(),
+        SystemMetric.SYS_FREE_SWAP_SPACE_SIZE.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.remove(
         MetricType.AUTO_GAUGE,
-        Metric.SYS_COMMITTED_VM_SIZE.toString(),
-        Tag.NAME.toString(),
+        SystemMetric.SYS_COMMITTED_VM_SIZE.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
   }
 
   private void collectSystemDiskInfo(AbstractMetricService metricService) {
-    String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getLocalDataDirs();
-    for (String dataDir : dataDirs) {
-      Path path = Paths.get(dataDir);
+    for (String diskDir : diskDirs) {
+      if (!FSUtils.isLocal(diskDir)) {
+        continue;
+      }
+      Path path = Paths.get(diskDir);
       FileStore fileStore = null;
       try {
         fileStore = Files.getFileStore(path);
@@ -202,7 +177,7 @@ public class SystemMetrics implements IMetricSet {
         try {
           fileStore = Files.getFileStore(path);
         } catch (IOException innerException) {
-          logger.error("Failed to get storage path of {}, because", dataDir, innerException);
+          logger.error("Failed to get storage path of {}, because", diskDir, innerException);
         }
       }
       if (null != fileStore) {
@@ -211,50 +186,58 @@ public class SystemMetrics implements IMetricSet {
     }
 
     metricService.createAutoGauge(
-        Metric.SYS_DISK_TOTAL_SPACE.toString(),
+        SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
         MetricLevel.CORE,
         this,
         SystemMetrics::getSystemDiskTotalSpace,
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
     metricService.createAutoGauge(
-        Metric.SYS_DISK_FREE_SPACE.toString(),
+        SystemMetric.SYS_DISK_FREE_SPACE.toString(),
         MetricLevel.CORE,
         this,
         SystemMetrics::getSystemDiskFreeSpace,
-        Tag.NAME.toString(),
+        SystemTag.NAME.toString(),
         SYSTEM);
   }
 
   private void removeSystemDiskInfo(AbstractMetricService metricService) {
-    fileStores.clear();
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.SYS_DISK_TOTAL_SPACE.toString(), Tag.NAME.toString(), SYSTEM);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
+        SystemTag.NAME.toString(),
+        SYSTEM);
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.SYS_DISK_FREE_SPACE.toString(), Tag.NAME.toString(), SYSTEM);
+        MetricType.AUTO_GAUGE,
+        SystemMetric.SYS_DISK_FREE_SPACE.toString(),
+        SystemTag.NAME.toString(),
+        SYSTEM);
+
+    diskDirs.clear();
+    fileStores.clear();
   }
 
-  private void collectDiskMetrics() {
+  public long getSystemDiskTotalSpace() {
     long sysTotalSpace = 0L;
-    long sysFreeSpace = 0L;
-
     for (FileStore fileStore : fileStores) {
       try {
         sysTotalSpace += fileStore.getTotalSpace();
-        sysFreeSpace += fileStore.getUsableSpace();
       } catch (IOException e) {
         logger.error("Failed to statistic the size of {}, because", fileStore, e);
       }
     }
-    systemDiskTotalSpace = sysTotalSpace;
-    systemDiskFreeSpace = sysFreeSpace;
-  }
-
-  public long getSystemDiskTotalSpace() {
-    return systemDiskTotalSpace;
+    return sysTotalSpace;
   }
 
   public long getSystemDiskFreeSpace() {
-    return systemDiskFreeSpace;
+    long sysFreeSpace = 0L;
+    for (FileStore fileStore : fileStores) {
+      try {
+        sysFreeSpace += fileStore.getUsableSpace();
+      } catch (IOException e) {
+        logger.error("Failed to statistic the size of {}, because", fileStore, e);
+      }
+    }
+    return sysFreeSpace;
   }
 }
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
new file mode 100644
index 00000000000..6898a1dab83
--- /dev/null
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemMetric.java
@@ -0,0 +1,105 @@
+/*
+ * 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.utils;
+
+// universal metric related to system
+public enum SystemMetric {
+  // thread pool related
+  THREAD_POOL_ACTIVE_THREAD_COUNT("thread_pool_active_thread_count"),
+  THREAD_POOL_DONE_TASK_COUNT("thread_pool_done_task_count"),
+  THREAD_POOL_WAITING_TASK_COUNT("thread_pool_waiting_task_count"),
+  THREAD_POOL_CORE_SIZE("thread_pool_core_size"),
+  THREAD_POOL_LARGEST_POOL_SIZE("thread_pool_largest_pool_size"),
+  // disk related
+  DISK_IO_SIZE("disk_io_size"),
+  DISK_IO_OPS("disk_io_ops"),
+  DISK_IO_TIME("disk_io_time"),
+  DISK_IO_AVG_TIME("disk_io_avg_time"),
+  DISK_IO_AVG_SIZE("disk_io_avg_size"),
+  DISK_IO_SECTOR_NUM("disk_io_sector_num"),
+  DISK_IO_BUSY_PERCENTAGE("disk_io_busy_percentage"),
+  DISK_IO_AVG_QUEUE_SIZE("disk_io_avg_queue_size"),
+  // process related
+  PROCESS_IO_SIZE("process_io_size"),
+  PROCESS_IO_OPS("process_io_ops"),
+  PROCESS_CPU_LOAD("process_cpu_load"),
+  PROCESS_CPU_TIME("process_cpu_time"),
+  PROCESS_MAX_MEM("process_max_mem"),
+  PROCESS_USED_MEM("process_used_mem"),
+  PROCESS_TOTAL_MEM("process_total_mem"),
+  PROCESS_FREE_MEM("process_free_mem"),
+  PROCESS_THREADS_COUNT("process_threads_count"),
+  PROCESS_MEM_RATIO("process_mem_ratio"),
+  PROCESS_STATUS("process_status"),
+  // system related
+  SYS_CPU_LOAD("sys_cpu_load"),
+  SYS_CPU_CORES("sys_cpu_cores"),
+  SYS_TOTAL_PHYSICAL_MEMORY_SIZE("sys_total_physical_memory_size"),
+  SYS_FREE_PHYSICAL_MEMORY_SIZE("sys_free_physical_memory_size"),
+  SYS_TOTAL_SWAP_SPACE_SIZE("sys_total_swap_space_size"),
+  SYS_FREE_SWAP_SPACE_SIZE("sys_free_swap_space_size"),
+  SYS_COMMITTED_VM_SIZE("sys_committed_vm_size"),
+  SYS_DISK_TOTAL_SPACE("sys_disk_total_space"),
+  SYS_DISK_FREE_SPACE("sys_disk_free_space"),
+  // cpu related
+  MODULE_CPU_USAGE("module_cpu_usage"),
+  POOL_CPU_USAGE("pool_cpu_usage"),
+  MODULE_USER_TIME_PERCENTAGE("module_user_time_percentage"),
+  POOL_USER_TIME_PERCENTAGE("user_time_percentage"),
+  // jvm related
+  JVM_CLASSES_LOADED_CLASSES("jvm_classes_loaded_classes"),
+  JVM_CLASSES_UNLOADED_CLASSES("jvm_classes_unloaded_classes"),
+  JVM_COMPILATION_TIME_MS("jvm_compilation_time_ms"),
+  JVM_BUFFER_COUNT_BUFFERS("jvm_buffer_count_buffers"),
+  JVM_BUFFER_MEMORY_USED_BYTES("jvm_buffer_memory_used_bytes"),
+  JVM_BUFFER_TOTAL_CAPACITY_BYTES("jvm_buffer_total_capacity_bytes"),
+  JVM_MEMORY_USED_BYTES("jvm_memory_used_bytes"),
+  JVM_MEMORY_COMMITTED_BYTES("jvm_memory_committed_bytes"),
+  JVM_MEMORY_MAX_BYTES("jvm_memory_max_bytes"),
+  JVM_THREADS_PEAK_THREADS("jvm_threads_peak_threads"),
+  JVM_THREADS_DAEMON_THREADS("jvm_threads_daemon_threads"),
+  JVM_THREADS_LIVE_THREADS("jvm_threads_live_threads"),
+  JVM_THREADS_STATUS_THREADS("jvm_threads_states_threads"),
+  JVM_GC_MAX_DATA_SIZE_BYTES("jvm_gc_max_data_size_bytes"),
+  JVM_GC_LIVE_DATA_SIZE_BYTES("jvm_gc_live_data_size_bytes"),
+  JVM_GC_MEMORY_ALLOCATED_BYTES("jvm_gc_memory_allocated_bytes"),
+  JVM_GC_MEMORY_PROMOTED_BYTES("jvm_gc_memory_promoted_bytes"),
+  // net related
+  RECEIVED_BYTES("received_bytes"),
+  RECEIVED_PACKETS("received_packets"),
+  TRANSMITTED_BYTES("transmitted_bytes"),
+  TRANSMITTED_PACKETS("transmitted_packets"),
+  CONNECTION_NUM("connection_num"),
+  // logback related
+  LOGBACK_EVENTS("logback_events"),
+  // uptime related
+  UP_TIME("up_time");
+
+  final String value;
+
+  SystemMetric(String value) {
+    this.value = value;
+  }
+
+  @Override
+  public String toString() {
+    return value;
+  }
+}
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemTag.java
similarity index 50%
copy from iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
copy to iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemTag.java
index 0f442100413..ad909afece0 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
+++ b/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/SystemTag.java
@@ -17,28 +17,32 @@
  * under the License.
  */
 
-package org.apache.iotdb.metrics.metricsets;
+package org.apache.iotdb.metrics.utils;
 
-import org.apache.iotdb.metrics.AbstractMetricService;
-import org.apache.iotdb.metrics.config.MetricConfig;
-import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
-import org.apache.iotdb.metrics.utils.MetricLevel;
-import org.apache.iotdb.metrics.utils.MetricType;
+// universal tag related to system
+public enum SystemTag {
+  TYPE("type"),
+  NAME("name"),
+  FROM("from"),
+  POOL("pool"),
+  POOL_NAME("pool_name"),
+  MODULE("module"),
+  DISK("disk_id"),
+  ID("id"),
+  AREA("area"),
+  COMPILER("compiler"),
+  STATE("state"),
+  IFACE_NAME("iface_name"),
+  PROCESS_NAME("process_num");
 
-public class UpTimeMetrics implements IMetricSet {
-  MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig();
+  final String value;
 
-  @Override
-  public void bindTo(AbstractMetricService metricService) {
-    metricService.createAutoGauge(
-        "up_time",
-        MetricLevel.CORE,
-        metricConfig,
-        config -> System.nanoTime() - config.getUpTimeInNs());
+  SystemTag(String value) {
+    this.value = value;
   }
 
   @Override
-  public void unbindFrom(AbstractMetricService metricService) {
-    metricService.remove(MetricType.AUTO_GAUGE, "up_time");
+  public String toString() {
+    return value;
   }
 }
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
index ee1b32c5129..67bc150664f 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
@@ -24,18 +24,14 @@ 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 org.apache.iotdb.metrics.utils.SystemMetric;
+import org.apache.iotdb.metrics.utils.SystemTag;
 
 import java.util.HashMap;
 import java.util.Map;
 
 @SuppressWarnings("java:S6548")
 public class ThreadPoolMetrics implements IMetricSet {
-  private static final String THREAD_POOL_ACTIVE_THREAD_COUNT = "thread_pool_active_thread_count";
-  private static final String THREAD_POOL_DONE_TASK_COUNT = "thread_pool_done_task_count";
-  private static final String THREAD_POOL_WAITING_TASK_COUNT = "thread_pool_waiting_task_count";
-  private static final String THREAD_POOL_CORE_SIZE = "thread_pool_core_size";
-  private static final String THREAD_POOL_LARGEST_POOL_SIZE = "thread_pool_largest_pool_size";
-  private static final String POOL_NAME = "pool_name";
   private AbstractMetricService metricService;
   private Map<String, IThreadPoolMBean> notRegisteredPoolMap = new HashMap<>();
   private Map<String, IThreadPoolMBean> registeredPoolMap = new HashMap<>();
@@ -53,39 +49,39 @@ public class ThreadPoolMetrics implements IMetricSet {
       } else {
         registeredPoolMap.put(name, pool);
         metricService.createAutoGauge(
-            THREAD_POOL_ACTIVE_THREAD_COUNT,
+            SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> registeredPoolMap.get(name).getActiveCount(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             name);
         metricService.createAutoGauge(
-            THREAD_POOL_CORE_SIZE,
+            SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> registeredPoolMap.get(name).getCorePoolSize(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             name);
         metricService.createAutoGauge(
-            THREAD_POOL_WAITING_TASK_COUNT,
+            SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> registeredPoolMap.get(name).getQueueLength(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             name);
         metricService.createAutoGauge(
-            THREAD_POOL_DONE_TASK_COUNT,
+            SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> registeredPoolMap.get(name).getCompletedTaskCount(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             name);
         metricService.createAutoGauge(
-            THREAD_POOL_LARGEST_POOL_SIZE,
+            SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> registeredPoolMap.get(name).getLargestPoolSize(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             name);
       }
     }
@@ -97,39 +93,39 @@ public class ThreadPoolMetrics implements IMetricSet {
       this.metricService = metricService;
       for (Map.Entry<String, IThreadPoolMBean> entry : notRegisteredPoolMap.entrySet()) {
         metricService.createAutoGauge(
-            THREAD_POOL_ACTIVE_THREAD_COUNT,
+            SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> entry.getValue().getActiveCount(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             entry.getKey());
         metricService.createAutoGauge(
-            THREAD_POOL_CORE_SIZE,
+            SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> entry.getValue().getCorePoolSize(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             entry.getKey());
         metricService.createAutoGauge(
-            THREAD_POOL_WAITING_TASK_COUNT,
+            SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> entry.getValue().getQueue().size(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             entry.getKey());
         metricService.createAutoGauge(
-            THREAD_POOL_DONE_TASK_COUNT,
+            SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> entry.getValue().getCompletedTaskCount(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             entry.getKey());
         metricService.createAutoGauge(
-            THREAD_POOL_LARGEST_POOL_SIZE,
+            SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
             MetricLevel.IMPORTANT,
             registeredPoolMap,
             map -> entry.getValue().getLargestPoolSize(),
-            POOL_NAME,
+            SystemTag.POOL_NAME.toString(),
             entry.getKey());
       }
       registeredPoolMap.putAll(notRegisteredPoolMap);
@@ -141,14 +137,30 @@ public class ThreadPoolMetrics implements IMetricSet {
   public void unbindFrom(AbstractMetricService metricService) {
     for (Map.Entry<String, IThreadPoolMBean> entry : registeredPoolMap.entrySet()) {
       metricService.remove(
-          MetricType.GAUGE, THREAD_POOL_ACTIVE_THREAD_COUNT, POOL_NAME, entry.getKey());
-      metricService.remove(MetricType.GAUGE, THREAD_POOL_CORE_SIZE, POOL_NAME, entry.getKey());
+          MetricType.GAUGE,
+          SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
+          SystemTag.POOL_NAME.toString(),
+          entry.getKey());
       metricService.remove(
-          MetricType.GAUGE, THREAD_POOL_WAITING_TASK_COUNT, POOL_NAME, entry.getKey());
+          MetricType.GAUGE,
+          SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
+          SystemTag.POOL_NAME.toString(),
+          entry.getKey());
       metricService.remove(
-          MetricType.GAUGE, THREAD_POOL_DONE_TASK_COUNT, POOL_NAME, entry.getKey());
+          MetricType.GAUGE,
+          SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
+          SystemTag.POOL_NAME.toString(),
+          entry.getKey());
       metricService.remove(
-          MetricType.GAUGE, THREAD_POOL_LARGEST_POOL_SIZE, POOL_NAME, entry.getKey());
+          MetricType.GAUGE,
+          SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
+          SystemTag.POOL_NAME.toString(),
+          entry.getKey());
+      metricService.remove(
+          MetricType.GAUGE,
+          SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
+          SystemTag.POOL_NAME.toString(),
+          entry.getKey());
     }
   }
 
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index 9a5c092b080..c377ffbbbcd 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -90,37 +90,7 @@ public enum Metric {
   LOCAL_EXECUTION_PLANNER("local_execution_planner"),
   // file related
   FILE_SIZE("file_size"),
-  FILE_COUNT("file_count"),
-  // disk related
-  DISK_IO_SIZE("disk_io_size"),
-  DISK_IO_OPS("disk_io_ops"),
-  DISK_IO_TIME("disk_io_time"),
-  DISK_IO_AVG_TIME("disk_io_avg_time"),
-  DISK_IO_SECTOR_NUM("disk_io_sector_num"),
-  DISK_IO_BUSY_PERCENTAGE("disk_io_busy_percentage"),
-  DISK_IO_QUEUE_SIZE("disk_io_queue_size"),
-  // process related
-  PROCESS_IO_SIZE("process_io_size"),
-  PROCESS_IO_OPS("process_io_ops"),
-  PROCESS_CPU_LOAD("process_cpu_load"),
-  PROCESS_CPU_TIME("process_cpu_time"),
-  PROCESS_MAX_MEM("process_max_mem"),
-  PROCESS_USED_MEM("process_used_mem"),
-  PROCESS_TOTAL_MEM("process_total_mem"),
-  PROCESS_FREE_MEM("process_free_mem"),
-  PROCESS_THREADS_COUNT("process_threads_count"),
-  PROCESS_MEM_RATIO("process_mem_ratio"),
-  PROCESS_STATUS("process_status"),
-  // system related
-  SYS_CPU_LOAD("sys_cpu_load"),
-  SYS_CPU_CORES("sys_cpu_cores"),
-  SYS_TOTAL_PHYSICAL_MEMORY_SIZE("sys_total_physical_memory_size"),
-  SYS_FREE_PHYSICAL_MEMORY_SIZE("sys_free_physical_memory_size"),
-  SYS_TOTAL_SWAP_SPACE_SIZE("sys_total_swap_space_size"),
-  SYS_FREE_SWAP_SPACE_SIZE("sys_free_swap_space_size"),
-  SYS_COMMITTED_VM_SIZE("sys_committed_vm_size"),
-  SYS_DISK_TOTAL_SPACE("sys_disk_total_space"),
-  SYS_DISK_FREE_SPACE("sys_disk_free_space");
+  FILE_COUNT("file_count");
 
   final String value;