You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by av...@apache.org on 2022/03/02 17:21:27 UTC

[ozone] branch master updated: HDDS-6317: Export ReconTaskStatus as Prometheus metrics (#3088)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5f029d0  HDDS-6317: Export ReconTaskStatus as Prometheus metrics (#3088)
5f029d0 is described below

commit 5f029d0619e774f9b7803cc43e89a4eb71bf1cd7
Author: k5342 <k5...@users.noreply.github.com>
AuthorDate: Thu Mar 3 02:21:10 2022 +0900

    HDDS-6317: Export ReconTaskStatus as Prometheus metrics (#3088)
---
 .../org/apache/hadoop/ozone/recon/ReconServer.java |  8 +++
 .../recon/metrics/ReconTaskStatusMetrics.java      | 83 ++++++++++++++++++++++
 2 files changed, 91 insertions(+)

diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
index e129bc5..8b0e9f1 100644
--- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
+++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
@@ -36,6 +36,7 @@ import org.apache.hadoop.hdds.security.x509.certificate.client.ReconCertificateC
 import org.apache.hadoop.hdds.utils.HddsServerUtil;
 import org.apache.hadoop.ozone.OzoneSecurityUtil;
 import org.apache.hadoop.ozone.recon.scm.ReconStorageConfig;
+import org.apache.hadoop.ozone.recon.metrics.ReconTaskStatusMetrics;
 import org.apache.hadoop.ozone.recon.spi.OzoneManagerServiceProvider;
 import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
 import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
@@ -80,6 +81,7 @@ public class ReconServer extends GenericCli {
   private OzoneConfiguration configuration;
   private ReconStorageConfig reconStorage;
   private CertificateClient certClient;
+  private ReconTaskStatusMetrics reconTaskStatusMetrics;
 
   private volatile boolean isStarted = false;
 
@@ -144,6 +146,8 @@ public class ReconServer extends GenericCli {
           injector.getInstance(OzoneManagerServiceProvider.class);
       this.reconStorageContainerManager =
           injector.getInstance(OzoneStorageContainerManager.class);
+      this.reconTaskStatusMetrics =
+          injector.getInstance(ReconTaskStatusMetrics.class);
       LOG.info("Recon server initialized successfully!");
 
     } catch (Exception e) {
@@ -255,6 +259,7 @@ public class ReconServer extends GenericCli {
       isStarted = true;
       // Initialize metrics for Recon
       HddsServerUtil.initializeMetrics(configuration, "Recon");
+      reconTaskStatusMetrics.register();
       if (httpServer != null) {
         httpServer.start();
       }
@@ -282,6 +287,9 @@ public class ReconServer extends GenericCli {
       if (reconDBProvider != null) {
         reconDBProvider.close();
       }
+      if (reconTaskStatusMetrics != null) {
+        reconTaskStatusMetrics.unregister();
+      }
       isStarted = false;
     }
   }
diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/metrics/ReconTaskStatusMetrics.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/metrics/ReconTaskStatusMetrics.java
new file mode 100644
index 0000000..a8db882
--- /dev/null
+++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/metrics/ReconTaskStatusMetrics.java
@@ -0,0 +1,83 @@
+/*
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.hadoop.ozone.recon.metrics;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.hadoop.metrics2.MetricsCollector;
+import org.apache.hadoop.metrics2.MetricsInfo;
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
+import org.apache.hadoop.metrics2.MetricsSource;
+import org.apache.hadoop.metrics2.MetricsTag;
+import org.apache.hadoop.metrics2.annotation.Metrics;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.apache.hadoop.metrics2.lib.Interns;
+import org.apache.hadoop.ozone.OzoneConsts;
+import org.hadoop.ozone.recon.schema.tables.daos.ReconTaskStatusDao;
+import org.hadoop.ozone.recon.schema.tables.pojos.ReconTaskStatus;
+
+import java.util.List;
+
+/**
+ * Ship ReconTaskStatus table on persistent DB as a metrics.
+ */
+@Singleton
+@Metrics(about = "Recon Task Status Metrics", context = OzoneConsts.OZONE)
+public class ReconTaskStatusMetrics implements MetricsSource {
+
+  private static final String SOURCE_NAME =
+      ReconTaskStatusMetrics.class.getSimpleName();
+
+  @Inject
+  private ReconTaskStatusDao reconTaskStatusDao;
+
+  private static final MetricsInfo RECORD_INFO_LAST_UPDATED_TS =
+      Interns.info("lastUpdatedTimestamp",
+          "Last updated timestamp of corresponding Recon Task");
+
+  private static final MetricsInfo RECORD_INFO_LAST_UPDATED_SEQ =
+      Interns.info("lastUpdatedSeqNumber",
+          "Last updated sequence number of corresponding Recon Task");
+
+  public void register() {
+    DefaultMetricsSystem.instance()
+        .register(SOURCE_NAME, "Recon Task Metrics", this);
+  }
+
+  public void unregister() {
+    DefaultMetricsSystem.instance()
+        .unregisterSource(SOURCE_NAME);
+  }
+
+  public void getMetrics(MetricsCollector collector, boolean all) {
+    List<ReconTaskStatus> rows = reconTaskStatusDao.findAll();
+    rows.forEach((rts) -> {
+      MetricsRecordBuilder builder = collector.addRecord(SOURCE_NAME);
+      builder.add(
+          new MetricsTag(
+              Interns.info("type", "Recon Task type"),
+              rts.getTaskName()));
+      builder.addGauge(RECORD_INFO_LAST_UPDATED_TS,
+          rts.getLastUpdatedTimestamp());
+      builder.addCounter(RECORD_INFO_LAST_UPDATED_SEQ,
+          rts.getLastUpdatedSeqNumber());
+      builder.endRecord();
+    });
+  }
+}
\ No newline at end of file

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org