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">