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

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


The following commit(s) were added to refs/heads/rel/1.1 by this push:
     new 270f460166a [IOTDB-5927] Add up time metric (#9960) (#9989)
270f460166a is described below

commit 270f460166a56bcfb0911971ed6530975dee8cd9
Author: ZhangHongYin <[email protected]>
AuthorDate: Tue May 30 20:06:02 2023 +0800

    [IOTDB-5927] Add up time metric (#9960) (#9989)
    
    * Add up_time Metrics
    
    (cherry picked from commit 634f0395421314a03505d286b73ae3938a7baa7b)
---
 .../iotdb/confignode/service/ConfigNode.java       |  2 +
 docs/UserGuide/Monitor-Alert/Metric-Tool.md        |  3 +-
 docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md     | 13 ++++---
 .../apache/iotdb/metrics/config/MetricConfig.java  |  7 ++++
 .../iotdb/metrics/metricsets/UpTimeMetrics.java    | 44 ++++++++++++++++++++++
 .../db/service/metrics/DataNodeMetricsHelper.java  |  2 +
 6 files changed, 64 insertions(+), 7 deletions(-)

diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index f69e2c13ebc..920247956a3 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -43,6 +43,7 @@ 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.disk.DiskMetrics;
 import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
 import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
@@ -225,6 +226,7 @@ public class ConfigNode implements ConfigNodeMBean {
     
MetricConfigDescriptor.getInstance().getMetricConfig().setNodeId(CONF.getConfigNodeId());
     registerManager.register(MetricService.getInstance());
     // bind predefined metric sets
+    MetricService.getInstance().addMetricSet(new UpTimeMetrics());
     MetricService.getInstance().addMetricSet(new JvmMetrics());
     MetricService.getInstance().addMetricSet(new LogbackMetrics());
     MetricService.getInstance().addMetricSet(new ProcessMetrics());
diff --git a/docs/UserGuide/Monitor-Alert/Metric-Tool.md 
b/docs/UserGuide/Monitor-Alert/Metric-Tool.md
index 063ee10aae0..b1ab29d7d7c 100644
--- a/docs/UserGuide/Monitor-Alert/Metric-Tool.md
+++ b/docs/UserGuide/Monitor-Alert/Metric-Tool.md
@@ -113,7 +113,8 @@ carefully evaluated. The current Core-level metrics are as 
follows:
 #### 4.1.1. Cluster
 
 | Metric                    | Tags                                            
| Type      | Description                                         |
-| ------------------------- | ----------------------------------------------- 
| --------- | --------------------------------------------------- |
+|---------------------------|-------------------------------------------------|
 --------- |-----------------------------------------------------|
+| up_time                   | -                                               
| AutoGauge | The time IoTDB has been running                     |
 | config_node               | name="total",status="Registered/Online/Unknown" 
| AutoGauge | The number of registered/online/unknown confignodes |
 | data_node                 | name="total",status="Registered/Online/Unknown" 
| AutoGauge | The number of registered/online/unknown datanodes   |
 | cluster_node_leader_count | name="{ip}:{port}"                              
| Gauge     | The count of consensus group leader on each node    |
diff --git a/docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md 
b/docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md
index a817656d235..f4f7bbe60f3 100644
--- a/docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md
+++ b/docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md
@@ -91,14 +91,15 @@ Core 级别的监控指标在系统运行中默认开启,每一个 Core 级别
 
 #### 4.1.1. 集群运行状态
 
-| Metric                    | Tags                                            
| Type      | Description                            |
-| ------------------------- | ----------------------------------------------- 
| --------- | -------------------------------------- |
+| Metric                    | Tags                                            
| Type      | Description                |
+| ------------------------- | ----------------------------------------------- 
| --------- |----------------------------|
+| up_time                   | -                                               
| AutoGauge | IoTDB 启动的运行时间              |
 | config_node               | name="total",status="Registered/Online/Unknown" 
| AutoGauge | 已注册/在线/离线 confignode 的节点数量 |
 | data_node                 | name="total",status="Registered/Online/Unknown" 
| AutoGauge | 已注册/在线/离线 datanode 的节点数量   |
-| cluster_node_leader_count | name="{ip}:{port}"                              
| Gauge     | 节点上共识组Leader的数量               |
-| cluster_node_status       | name="{ip}:{port}",type="ConfigNode/DataNode"   
| Gauge     | 节点的状态,0=Unkonwn 1=online         |
-| entry                     | name="{interface}"                              
| Timer     | Client 建立的 Thrift 的耗时情况        |
-| mem                       | name="IoTConsensus"                             
| AutoGauge | IoT共识协议的内存占用,单位为byte      |
+| cluster_node_leader_count | name="{ip}:{port}"                              
| Gauge     | 节点上共识组Leader的数量            |
+| cluster_node_status       | name="{ip}:{port}",type="ConfigNode/DataNode"   
| Gauge     | 节点的状态,0=Unkonwn 1=online   |
+| entry                     | name="{interface}"                              
| Timer     | Client 建立的 Thrift 的耗时情况    |
+| mem                       | name="IoTConsensus"                             
| AutoGauge | IoT共识协议的内存占用,单位为byte       |
 
 #### 4.1.2. 接口层统计
 
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
index 2d551495d28..4989cfbdacf 100644
--- 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
@@ -69,6 +69,8 @@ public class MetricConfig {
   /** The id of iotdb node. */
   private int nodeId = 0;
 
+  private long upTimeInNs = 0;
+
   public MetricConfig() {
     // try to get pid of iotdb instance
     try {
@@ -155,6 +157,10 @@ public class MetricConfig {
     return nodeId;
   }
 
+  public long getUpTimeInNs() {
+    return upTimeInNs;
+  }
+
   /** Update rpc address and rpc port of monitored node. */
   public void updateRpcInstance(String clusterName, NodeType nodeType) {
     this.clusterName = clusterName;
@@ -163,6 +169,7 @@ public class MetricConfig {
 
   public void setNodeId(int nodeId) {
     this.nodeId = nodeId;
+    this.upTimeInNs = System.nanoTime();
   }
 
   /** Copy properties from another metric config. */
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
new file mode 100644
index 00000000000..2955723250e
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/UpTimeMetrics.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.metrics.metricsets;
+
+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;
+
+public class UpTimeMetrics implements IMetricSet {
+  MetricConfig metricConfig = 
MetricConfigDescriptor.getInstance().getMetricConfig();
+
+  @Override
+  public void bindTo(AbstractMetricService metricService) {
+    metricService.createAutoGauge(
+        "up_time",
+        MetricLevel.CORE,
+        metricConfig,
+        (config) -> System.nanoTime() - config.getUpTimeInNs());
+  }
+
+  @Override
+  public void unbindFrom(AbstractMetricService metricService) {
+    metricService.remove(MetricType.AUTO_GAUGE, "up_time");
+  }
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
 
b/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
index 110d4cfa4ca..02f25fcdaf0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.mpp.metric.QueryExecutionMetricSet;
 import org.apache.iotdb.db.mpp.metric.QueryPlanCostMetricSet;
 import org.apache.iotdb.db.mpp.metric.QueryResourceMetricSet;
 import org.apache.iotdb.db.mpp.metric.SeriesScanCostMetricSet;
+import org.apache.iotdb.metrics.metricsets.UpTimeMetrics;
 import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics;
 import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
 import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
@@ -37,6 +38,7 @@ import org.apache.iotdb.metrics.metricsets.net.NetMetrics;
 public class DataNodeMetricsHelper {
   /** Bind predefined metric sets into DataNode. */
   public static void bind() {
+    MetricService.getInstance().addMetricSet(new UpTimeMetrics());
     MetricService.getInstance().addMetricSet(new JvmMetrics());
     MetricService.getInstance().addMetricSet(new LogbackMetrics());
     MetricService.getInstance().addMetricSet(new FileMetrics());

Reply via email to