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

xingtanzjr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 0b130fd462 [IOTDB-3717] Add metrics for thrift connections and worker 
threads (#6581)
0b130fd462 is described below

commit 0b130fd462834d4cb5ff48c2a8041b81943a3059
Author: xinzhongtianxia <[email protected]>
AuthorDate: Wed Jul 6 17:03:24 2022 +0800

    [IOTDB-3717] Add metrics for thrift connections and worker threads (#6581)
---
 .../service/thrift/ConfigNodeRPCService.java       | 14 ++++++++++++
 .../thrift/ConfigNodeRPCServiceHandler.java        | 22 ++++++++++++++++++-
 docs/UserGuide/Maintenance-Tools/Metric-Tool.md    |  8 ++++---
 docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md |  8 ++++---
 .../service/AbstractThriftServiceThread.java       | 25 ++++++++++++++++------
 .../execution/exchange/MPPDataExchangeService.java | 14 ++++++++++++
 .../MPPDataExchangeServiceThriftHandler.java       | 24 ++++++++++++++++++++-
 .../db/service/DataNodeInternalRPCService.java     | 14 ++++++++++++
 .../org/apache/iotdb/db/service/RPCService.java    | 14 ++++++++++++
 .../iotdb/db/service/metrics/enums/Metric.java     |  4 +++-
 .../handler/InternalServiceThriftHandler.java      | 18 +++++++++++++++-
 .../thrift/handler/RPCServiceThriftHandler.java    | 16 +++++++++++++-
 .../transport/server/TransportServerManager.java   | 14 ++++++++++++
 .../server/TransportServerThriftHandler.java       | 21 ++++++++++++++++++
 14 files changed, 199 insertions(+), 17 deletions(-)

diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
index 973f565bac..5a5f4078ad 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCService.java
@@ -21,12 +21,17 @@ package org.apache.iotdb.confignode.service.thrift;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
+import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
 import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
 import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
 import org.apache.iotdb.confignode.rpc.thrift.IConfigNodeRPCService;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 
 /** ConfigNodeRPCServer exposes the interface that interacts with the DataNode 
*/
 public class ConfigNodeRPCService extends ThriftService implements 
ConfigNodeRPCServiceMBean {
@@ -75,6 +80,15 @@ public class ConfigNodeRPCService extends ThriftService 
implements ConfigNodeRPC
       throw new IllegalAccessException(e.getMessage());
     }
     thriftServiceThread.setName(ThreadName.CONFIG_NODE_RPC_SERVER.getName());
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateAutoGauge(
+            Metric.THRIFT_ACTIVE_THREADS.toString(),
+            MetricLevel.CORE,
+            thriftServiceThread,
+            AbstractThriftServiceThread::getActiveThreadCount,
+            Tag.NAME.toString(),
+            ThreadName.CONFIG_NODE_RPC_SERVER.getName());
   }
 
   @Override
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
index ea81ce222f..04640bc9b5 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceHandler.java
@@ -16,6 +16,11 @@
  */
 package org.apache.iotdb.confignode.service.thrift;
 
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
 import org.apache.thrift.server.TServerEventHandler;
@@ -30,7 +35,14 @@ public class ConfigNodeRPCServiceHandler implements 
TServerEventHandler {
 
   @Override
   public ServerContext createContext(TProtocol arg0, TProtocol arg1) {
-    // nothing
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "ConfigNodeRPC")
+        .incr(1L);
     return null;
   }
 
@@ -38,6 +50,14 @@ public class ConfigNodeRPCServiceHandler implements 
TServerEventHandler {
   public void deleteContext(ServerContext arg0, TProtocol arg1, TProtocol 
arg2) {
     // release query resources.
     processor.handleClientExit();
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "ConfigNodeRPC")
+        .decr(1L);
   }
 
   @Override
diff --git a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md 
b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
index 31247c3a35..8019e837b1 100644
--- a/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -80,10 +80,12 @@ Next, we will choose Prometheus format data as samples to 
describe each kind of
 
 | Metric              | Tag                   | level     | Description        
                      | Sample                                       |
 | ------------------- | --------------------- | --------- | 
---------------------------------------- | 
-------------------------------------------- |
-| entry_seconds_count | name="interface name" | important | The total request 
count of the interface | entry_seconds_count{name="openSession",} 1.0 |
-| entry_seconds_sum   | name="interface name" | important | The total cost 
seconds of the interface  | entry_seconds_sum{name="openSession",} 0.024 |
-| entry_seconds_max   | name="interface name" | important | The max latency of 
the interface         | entry_seconds_max{name="openSession",} 0.024 |
+| entry_seconds_count | name="{{interface}}" | important | The total request 
count of the interface | entry_seconds_count{name="openSession",} 1.0 |
+| entry_seconds_sum   | name="{{interface}}" | important | The total cost 
seconds of the interface  | entry_seconds_sum{name="openSession",} 0.024 |
+| entry_seconds_max   | name="{{interface}}" | important | The max latency of 
the interface         | entry_seconds_max{name="openSession",} 0.024 |
 | quantity_total      | name="pointsIn"       | important | The total points 
inserted into IoTDB     | quantity_total{name="pointsIn",} 1.0         |
+| thrift_connections  | name="{{thriftService}}" | core | current number of 
thrift connections | thrift_connections{name="RPC",} 1.0 |
+| thrift_active_threads | name="{{thriftThread}}" | core | current number if 
thrift worker threads | thrift_active_threads{name="RPC",} 1.0 |
 
 #### 4.3.2. Task
 | Metric                  | Tag                                                
                           | level     | Description                            
                  | Sample                                                      
                            |
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md 
b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
index 065e2179fa..9598d73c3d 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Metric-Tool.md
@@ -78,10 +78,12 @@ IoTDB对外提供JMX和Prometheus格式的监控指标,对于JMX,可以通
 
 | Metric              | Tag             | level     | 说明             | 示例      
                                   |
 | ------------------- | --------------- | --------- | ---------------- | 
-------------------------------------------- |
-| entry_seconds_count | name="接口名"   | important | 接口累计访问次数 | 
entry_seconds_count{name="openSession",} 1.0 |
-| entry_seconds_sum   | name="接口名"   | important | 接口累计耗时(s)  | 
entry_seconds_sum{name="openSession",} 0.024 |
-| entry_seconds_max   | name="接口名"   | important | 接口最大耗时(s)  | 
entry_seconds_max{name="openSession",} 0.024 |
+| entry_seconds_count | name="{{interface}}"   | important | 接口累计访问次数 | 
entry_seconds_count{name="openSession",} 1.0 |
+| entry_seconds_sum   | name="{{interface}}"   | important | 接口累计耗时(s)  | 
entry_seconds_sum{name="openSession",} 0.024 |
+| entry_seconds_max   | name="{{interface}}"   | important | 接口最大耗时(s)  | 
entry_seconds_max{name="openSession",} 0.024 |
 | quantity_total      | name="pointsIn" | important | 系统累计写入点数 | 
quantity_total{name="pointsIn",} 1.0         |
+| thrift_connections  | name="{{thriftService}}" | core | thrift当前连接数 | 
thrift_connections{name="RPC",} 1.0 |
+| thrift_active_threads | name="{{thriftThread}}" | core | thrift worker线程数 | 
thrift_active_threads{name="RPC",} 1.0 |
 
 #### 4.3.2. Task
 
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/service/AbstractThriftServiceThread.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/service/AbstractThriftServiceThread.java
index 86e581af91..a9b36b9b36 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/service/AbstractThriftServiceThread.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/service/AbstractThriftServiceThread.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.commons.service;
 
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
+import 
org.apache.iotdb.commons.concurrent.threadpool.WrappedThreadPoolExecutor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
 
@@ -44,6 +45,7 @@ import org.slf4j.LoggerFactory;
 
 import java.net.InetSocketAddress;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
 public abstract class AbstractThriftServiceThread extends Thread {
@@ -53,6 +55,8 @@ public abstract class AbstractThriftServiceThread extends 
Thread {
   private TServer poolServer;
   private CountDownLatch threadStopLatch;
 
+  private ExecutorService executorService;
+
   private String serviceName;
 
   private TProtocolFactory protocolFactory;
@@ -182,8 +186,8 @@ public abstract class AbstractThriftServiceThread extends 
Thread {
         .maxWorkerThreads(maxWorkerThreads)
         .minWorkerThreads(Runtime.getRuntime().availableProcessors())
         .stopTimeoutVal(timeoutSecond);
-    poolArgs.executorService =
-        IoTDBThreadPoolFactory.createThriftRpcClientThreadPool(poolArgs, 
threadsName);
+    executorService = 
IoTDBThreadPoolFactory.createThriftRpcClientThreadPool(poolArgs, threadsName);
+    poolArgs.executorService = executorService;
     poolArgs.processor(processor);
     poolArgs.protocolFactory(protocolFactory);
     poolArgs.transportFactory(getTTransportFactory());
@@ -202,9 +206,10 @@ public abstract class AbstractThriftServiceThread extends 
Thread {
         new TThreadedSelectorServer.Args((TNonblockingServerTransport) 
serverTransport);
     poolArgs.maxReadBufferBytes = maxReadBufferBytes;
     poolArgs.selectorThreads(selectorThreads);
-    poolArgs.executorService(
+    executorService =
         IoTDBThreadPoolFactory.createThriftRpcClientThreadPool(
-            minWorkerThreads, maxWorkerThreads, timeoutSecond, 
TimeUnit.SECONDS, threadsName));
+            minWorkerThreads, maxWorkerThreads, timeoutSecond, 
TimeUnit.SECONDS, threadsName);
+    poolArgs.executorService(executorService);
     poolArgs.processor(processor);
     poolArgs.protocolFactory(protocolFactory);
     poolArgs.transportFactory(getTTransportFactory());
@@ -220,9 +225,10 @@ public abstract class AbstractThriftServiceThread extends 
Thread {
       int maxReadBufferBytes) {
     THsHaServer.Args poolArgs = new 
THsHaServer.Args((TNonblockingServerTransport) serverTransport);
     poolArgs.maxReadBufferBytes = maxReadBufferBytes;
-    poolArgs.executorService(
+    executorService =
         IoTDBThreadPoolFactory.createThriftRpcClientThreadPool(
-            minWorkerThreads, maxWorkerThreads, timeoutSecond, 
TimeUnit.SECONDS, threadsName));
+            minWorkerThreads, maxWorkerThreads, timeoutSecond, 
TimeUnit.SECONDS, threadsName);
+    poolArgs.executorService(executorService);
     poolArgs.processor(processor);
     poolArgs.protocolFactory(protocolFactory);
     poolArgs.transportFactory(getTTransportFactory());
@@ -291,6 +297,13 @@ public abstract class AbstractThriftServiceThread extends 
Thread {
     return false;
   }
 
+  public long getActiveThreadCount() {
+    if (executorService != null) {
+      return ((WrappedThreadPoolExecutor) executorService).getActiveCount();
+    }
+    return -1;
+  }
+
   public enum ServerType {
     SELECTOR,
     HSHA
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
index fc639abcc3..3ccbcbb512 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeService.java
@@ -26,6 +26,7 @@ import 
org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.IoTThreadFactory;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
+import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
@@ -33,6 +34,10 @@ import org.apache.iotdb.db.client.DataNodeClientPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.mpp.execution.memory.LocalMemoryManager;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.mpp.rpc.thrift.MPPDataExchangeService.Processor;
 
 import org.slf4j.Logger;
@@ -105,6 +110,15 @@ public class MPPDataExchangeService extends ThriftService 
implements MPPDataExch
       throw new IllegalAccessException(e.getMessage());
     }
     
thriftServiceThread.setName(ThreadName.MPP_DATA_EXCHANGE_RPC_SERVER.getName());
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateAutoGauge(
+            Metric.THRIFT_ACTIVE_THREADS.toString(),
+            MetricLevel.CORE,
+            thriftServiceThread,
+            AbstractThriftServiceThread::getActiveThreadCount,
+            Tag.NAME.toString(),
+            ThreadName.MPP_DATA_EXCHANGE_RPC_SERVER.getName());
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
index 2ef11faa83..cfe80c687f 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/exchange/MPPDataExchangeServiceThriftHandler.java
@@ -19,6 +19,11 @@
 
 package org.apache.iotdb.db.mpp.execution.exchange;
 
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
 import org.apache.thrift.server.TServerEventHandler;
@@ -31,12 +36,29 @@ public class MPPDataExchangeServiceThriftHandler implements 
TServerEventHandler
 
   @Override
   public ServerContext createContext(TProtocol tProtocol, TProtocol 
tProtocol1) {
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "MPPDataExchange")
+        .incr(1L);
     return null;
   }
 
   @Override
   public void deleteContext(
-      ServerContext serverContext, TProtocol tProtocol, TProtocol tProtocol1) 
{}
+      ServerContext serverContext, TProtocol tProtocol, TProtocol tProtocol1) {
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "MPPDataExchange")
+        .decr(1L);
+  }
 
   @Override
   public void processContext(
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
 
b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
index a93ed66c7c..7ba65031a0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
@@ -21,13 +21,18 @@ package org.apache.iotdb.db.service;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
+import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.service.thrift.handler.InternalServiceThriftHandler;
 import org.apache.iotdb.db.service.thrift.impl.DataNodeInternalRPCServiceImpl;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.mpp.rpc.thrift.IDataNodeRPCService.Processor;
 
 public class DataNodeInternalRPCService extends ThriftService
@@ -71,6 +76,15 @@ public class DataNodeInternalRPCService extends ThriftService
       throw new IllegalAccessException(e.getMessage());
     }
     
thriftServiceThread.setName(ThreadName.INTERNAL_SERVICE_RPC_SERVER.getName());
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateAutoGauge(
+            Metric.THRIFT_ACTIVE_THREADS.toString(),
+            MetricLevel.CORE,
+            thriftServiceThread,
+            AbstractThriftServiceThread::getActiveThreadCount,
+            Tag.NAME.toString(),
+            ThreadName.INTERNAL_SERVICE_RPC_SERVER.getName());
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RPCService.java 
b/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
index e38823a4ed..841dc6c4c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RPCService.java
@@ -20,15 +20,20 @@ package org.apache.iotdb.db.service;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.exception.runtime.RPCServiceException;
+import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.service.thrift.ProcessorWithMetrics;
 import org.apache.iotdb.db.service.thrift.handler.RPCServiceThriftHandler;
 import org.apache.iotdb.db.service.thrift.impl.IClientRPCServiceWithHandler;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.service.rpc.thrift.IClientRPCService.Processor;
 
 import java.lang.reflect.InvocationTargetException;
@@ -78,6 +83,15 @@ public class RPCService extends ThriftService implements 
RPCServiceMBean {
       throw new IllegalAccessException(e.getMessage());
     }
     thriftServiceThread.setName(ThreadName.RPC_SERVICE.getName());
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateAutoGauge(
+            Metric.THRIFT_ACTIVE_THREADS.toString(),
+            MetricLevel.CORE,
+            thriftServiceThread,
+            AbstractThriftServiceThread::getActiveThreadCount,
+            Tag.NAME.toString(),
+            ThreadName.RPC_SERVICE.getName());
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java 
b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
index 18247db4d4..74ac14bd32 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/enums/Metric.java
@@ -59,7 +59,9 @@ public enum Metric {
   DATA_NODE,
   STORAGE_GROUP,
   REGION,
-  SLOT;
+  SLOT,
+  THRIFT_CONNECTIONS,
+  THRIFT_ACTIVE_THREADS;
 
   @Override
   public String toString() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
index 72c81e48d2..09e9d7492f 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/InternalServiceThriftHandler.java
@@ -19,6 +19,11 @@
 
 package org.apache.iotdb.db.service.thrift.handler;
 
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
 import org.apache.thrift.server.TServerEventHandler;
@@ -31,12 +36,23 @@ public class InternalServiceThriftHandler implements 
TServerEventHandler {
 
   @Override
   public ServerContext createContext(TProtocol tProtocol, TProtocol 
tProtocol1) {
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(), MetricLevel.CORE, 
Tag.NAME.toString(), "Internal")
+        .incr(1L);
     return null;
   }
 
   @Override
   public void deleteContext(
-      ServerContext serverContext, TProtocol tProtocol, TProtocol tProtocol1) 
{}
+      ServerContext serverContext, TProtocol tProtocol, TProtocol tProtocol1) {
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(), MetricLevel.CORE, 
Tag.NAME.toString(), "Internal")
+        .decr(1L);
+  }
 
   @Override
   public void processContext(
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
index d6dd456370..4ad2e5b728 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/handler/RPCServiceThriftHandler.java
@@ -16,7 +16,11 @@
  */
 package org.apache.iotdb.db.service.thrift.handler;
 
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
 import org.apache.iotdb.db.service.thrift.impl.IClientRPCServiceWithHandler;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
@@ -33,7 +37,11 @@ public class RPCServiceThriftHandler implements 
TServerEventHandler {
 
   @Override
   public ServerContext createContext(TProtocol arg0, TProtocol arg1) {
-    // nothing
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(), MetricLevel.CORE, 
Tag.NAME.toString(), "RPC")
+        .incr(1L);
     return null;
   }
 
@@ -41,6 +49,12 @@ public class RPCServiceThriftHandler implements 
TServerEventHandler {
   public void deleteContext(ServerContext arg0, TProtocol arg1, TProtocol 
arg2) {
     // release query resources.
     eventHandler.handleClientExit();
+
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(), MetricLevel.CORE, 
Tag.NAME.toString(), "RPC")
+        .decr(1L);
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerManager.java
 
b/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerManager.java
index 91e0d27765..4bf16d20cf 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerManager.java
@@ -21,12 +21,17 @@ package org.apache.iotdb.db.sync.transport.server;
 
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.exception.StartupException;
+import org.apache.iotdb.commons.service.AbstractThriftServiceThread;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.ThriftService;
 import org.apache.iotdb.commons.service.ThriftServiceThread;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.service.transport.thrift.TransportService;
 
 import org.apache.thrift.transport.TTransportException;
@@ -84,6 +89,15 @@ public class TransportServerManager extends ThriftService
             new TransportServerThriftHandler(serviceImpl),
             config.isRpcThriftCompressionEnable());
     thriftServiceThread.setName(ThreadName.SYNC_SERVER.getName());
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateAutoGauge(
+            Metric.THRIFT_ACTIVE_THREADS.toString(),
+            MetricLevel.CORE,
+            thriftServiceThread,
+            AbstractThriftServiceThread::getActiveThreadCount,
+            Tag.NAME.toString(),
+            ThreadName.SYNC_SERVER.getName());
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerThriftHandler.java
 
b/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerThriftHandler.java
index c42924a717..36d325156b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerThriftHandler.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/sync/transport/server/TransportServerThriftHandler.java
@@ -19,6 +19,11 @@
  */
 package org.apache.iotdb.db.sync.transport.server;
 
+import org.apache.iotdb.db.service.metrics.MetricsService;
+import org.apache.iotdb.db.service.metrics.enums.Metric;
+import org.apache.iotdb.db.service.metrics.enums.Tag;
+import org.apache.iotdb.metrics.utils.MetricLevel;
+
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.server.ServerContext;
 import org.apache.thrift.server.TServerEventHandler;
@@ -37,6 +42,14 @@ public class TransportServerThriftHandler implements 
TServerEventHandler {
 
   @Override
   public ServerContext createContext(TProtocol input, TProtocol output) {
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "Transport")
+        .incr(1L);
     return null;
   }
 
@@ -44,6 +57,14 @@ public class TransportServerThriftHandler implements 
TServerEventHandler {
   public void deleteContext(ServerContext serverContext, TProtocol input, 
TProtocol output) {
     // release query resources.
     serviceImpl.handleClientExit();
+    MetricsService.getInstance()
+        .getMetricManager()
+        .getOrCreateGauge(
+            Metric.THRIFT_CONNECTIONS.toString(),
+            MetricLevel.CORE,
+            Tag.NAME.toString(),
+            "Transport")
+        .decr(1L);
   }
 
   @Override

Reply via email to