You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/07/10 07:12:30 UTC

[hbase] 02/02: HBASE-24663 Add procedure process time statistics UI (#2035)

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

zghao pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit ff2951e6724ccd8d89b4ad75f26549cd7889c6f8
Author: Joseph295 <51...@qq.com>
AuthorDate: Fri Jul 10 15:03:52 2020 +0800

    HBASE-24663 Add procedure process time statistics UI (#2035)
    
    Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
 .../hadoop/hbase/metrics/impl/HistogramImpl.java   |  8 +++
 .../resources/hbase-webapps/master/procedures.jsp  | 64 ++++++++++++++++++++++
 2 files changed, 72 insertions(+)

diff --git a/hbase-metrics/src/main/java/org/apache/hadoop/hbase/metrics/impl/HistogramImpl.java b/hbase-metrics/src/main/java/org/apache/hadoop/hbase/metrics/impl/HistogramImpl.java
index fd6a2b3..2e0aa55 100644
--- a/hbase-metrics/src/main/java/org/apache/hadoop/hbase/metrics/impl/HistogramImpl.java
+++ b/hbase-metrics/src/main/java/org/apache/hadoop/hbase/metrics/impl/HistogramImpl.java
@@ -74,8 +74,16 @@ public class HistogramImpl implements Histogram {
     return this.histogram.getMax();
   }
 
+  public long getMin() {
+    return this.histogram.getMin();
+  }
+
   @Override
   public Snapshot snapshot() {
     return histogram.snapshotAndReset();
   }
+
+  public long[] getQuantiles(double[] quantiles) {
+    return histogram.getQuantiles(quantiles);
+  }
 }
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp b/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp
index fd1971b..8e1e238 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp
@@ -33,6 +33,20 @@
   import="org.apache.hadoop.hbase.procedure2.util.StringUtils"
   import="org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix"
 %>
+<%@ page import="org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure" %>
+<%@ page import="org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure" %>
+<%@ page import="org.apache.hadoop.hbase.master.assignment.OpenRegionProcedure" %>
+<%@ page import="org.apache.hadoop.hbase.master.assignment.CloseRegionProcedure" %>
+<%@ page import="org.apache.hadoop.hbase.metrics.OperationMetrics" %>
+<%@ page import="java.util.Map" %>
+<%@ page import="java.util.HashMap" %>
+<%@ page import="org.apache.hadoop.hbase.master.MetricsAssignmentManagerSource" %>
+<%@ page import="org.apache.hadoop.hbase.master.MetricsAssignmentManager" %>
+<%@ page import="org.apache.hadoop.hbase.procedure2.ProcedureMetrics" %>
+<%@ page import="org.apache.hadoop.hbase.metrics.Snapshot" %>
+<%@ page import="org.apache.hadoop.hbase.metrics.Histogram" %>
+<%@ page import="java.util.TreeMap" %>
+<%@ page import="org.apache.hadoop.hbase.metrics.impl.HistogramImpl" %>
 <%
   HMaster master = (HMaster) getServletContext().getAttribute(HMaster.MASTER);
   ProcedureExecutor<MasterProcedureEnv> procExecutor = master.getMasterProcedureExecutor();
@@ -55,6 +69,55 @@
 
 <div class="container-fluid content">
   <div class="row">
+    <div class="page-header">
+      <h1>Procedure Time Statistics</h1>
+    </div>
+  </div>
+  <p>We list proceduces completed successfully of the following types only: ServerCrashProcedure, TransitRegionStateProcedure,
+    OpenRegionProcedure, CloseRegionProcedure.</p>
+  <table class="table table-striped" width="90%" >
+    <tr>
+      <th>Type</th>
+      <th>min(ms)</th>
+      <th>50-percentile(ms)</th>
+      <th>90-percentile(ms)</th>
+      <th>max(ms)</th>
+    </tr>
+    <%
+      Map<String, ProcedureMetrics> latencyMetrics = new TreeMap<>();
+      MetricsAssignmentManager metricsAssignmentManagerSource =
+        procExecutor.getEnvironment().getAssignmentManager().getAssignmentManagerMetrics();
+      latencyMetrics.put("OpenRegionProcedure", metricsAssignmentManagerSource.getOpenProcMetrics());
+      latencyMetrics.put("CloseRegionProcedure", metricsAssignmentManagerSource.getCloseProcMetrics());
+      latencyMetrics.put("TransitionRegionProcedure#assignRegion", metricsAssignmentManagerSource.getAssignProcMetrics());
+      latencyMetrics.put("TransitionRegionProcedure#unassignRegion", metricsAssignmentManagerSource.getUnassignProcMetrics());
+      latencyMetrics.put("TransitionRegionProcedure#moveRegion", metricsAssignmentManagerSource.getMoveProcMetrics());
+      latencyMetrics.put("TransitionRegionProcedure#reopenRegion", metricsAssignmentManagerSource.getReopenProcMetrics());
+      latencyMetrics.put("ServerCrashProcedure", master.getMasterMetrics().getServerCrashProcMetrics());
+
+      double[] percentiles = new double[] { 0.5, 0.9};
+      for (Map.Entry<String, ProcedureMetrics> e : latencyMetrics.entrySet()) {
+        Histogram histogram = e.getValue().getTimeHisto();
+        if (histogram.getCount() == 0 || !(histogram instanceof HistogramImpl)) {
+          continue;
+        }
+        HistogramImpl histogramImpl = (HistogramImpl)histogram;
+        long[] percentileLatencies = histogramImpl.getQuantiles(percentiles);
+
+    %>
+    <tr>
+      <td><%= e.getKey() %></td>
+      <td><%= histogramImpl.getMin() %></td>
+      <td><%= percentileLatencies[0] %></td>
+      <td><%= percentileLatencies[1] %></td>
+      <td><%= histogramImpl.getMax() %></td>
+    </tr>
+    <% } %>
+  </table>
+</div>
+<br />
+<div class="container-fluid content">
+  <div class="row">
       <div class="page-header">
           <h1>Procedures</h1>
       </div>
@@ -103,6 +166,7 @@
   </table>
 </div>
 <br />
+
 <div class="container-fluid content">
   <div class="row">
       <div class="page-header">