1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.replication.regionserver;
21 import org.apache.hadoop.hbase.metrics.MetricsRate;
22 import org.apache.hadoop.metrics.MetricsContext;
23 import org.apache.hadoop.metrics.MetricsRecord;
24 import org.apache.hadoop.metrics.MetricsUtil;
25 import org.apache.hadoop.metrics.Updater;
26 import org.apache.hadoop.metrics.jvm.JvmMetrics;
27 import org.apache.hadoop.metrics.util.MetricsIntValue;
28 import org.apache.hadoop.metrics.util.MetricsLongValue;
29 import org.apache.hadoop.metrics.util.MetricsRegistry;
30
31
32
33
34
35 public class ReplicationSinkMetrics implements Updater {
36 private final MetricsRecord metricsRecord;
37 private MetricsRegistry registry = new MetricsRegistry();
38 private static ReplicationSinkMetrics instance;
39
40
41 public final MetricsRate appliedOpsRate =
42 new MetricsRate("appliedOpsRate", registry);
43
44
45 public final MetricsRate appliedBatchesRate =
46 new MetricsRate("appliedBatchesRate", registry);
47
48
49 private final MetricsLongValue ageOfLastAppliedOp =
50 new MetricsLongValue("ageOfLastAppliedOp", registry);
51
52
53
54
55 public ReplicationSinkMetrics() {
56 MetricsContext context = MetricsUtil.getContext("hbase");
57 String name = Thread.currentThread().getName();
58 metricsRecord = MetricsUtil.createRecord(context, "replication");
59 metricsRecord.setTag("RegionServer", name);
60 context.registerUpdater(this);
61
62 new ReplicationStatistics(this.registry, "ReplicationSink");
63 }
64
65
66
67
68
69 public void setAgeOfLastAppliedOp(long timestamp) {
70 ageOfLastAppliedOp.set(System.currentTimeMillis() - timestamp);
71 }
72 @Override
73 public void doUpdates(MetricsContext metricsContext) {
74 synchronized (this) {
75 this.appliedOpsRate.pushMetric(this.metricsRecord);
76 this.appliedBatchesRate.pushMetric(this.metricsRecord);
77 this.ageOfLastAppliedOp.pushMetric(this.metricsRecord);
78 }
79 this.metricsRecord.update();
80 }
81 }