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 ReplicationSourceMetrics implements Updater {
36 private final MetricsRecord metricsRecord;
37 private MetricsRegistry registry = new MetricsRegistry();
38
39
40 public final MetricsRate shippedOpsRate =
41 new MetricsRate("shippedOpsRate", registry);
42
43
44 public final MetricsRate shippedBatchesRate =
45 new MetricsRate("shippedBatchesRate", registry);
46
47
48 public final MetricsRate logEditsReadRate =
49 new MetricsRate("logEditsReadRate", registry);
50
51
52 public final MetricsRate logEditsFilteredRate =
53 new MetricsRate("logEditsFilteredRate", registry);
54
55
56 private final MetricsLongValue ageOfLastShippedOp =
57 new MetricsLongValue("ageOfLastShippedOp", registry);
58
59
60
61
62
63 public final MetricsIntValue sizeOfLogQueue =
64 new MetricsIntValue("sizeOfLogQueue", registry);
65
66
67
68
69
70 public ReplicationSourceMetrics(String id) {
71 MetricsContext context = MetricsUtil.getContext("hbase");
72 String name = Thread.currentThread().getName();
73 metricsRecord = MetricsUtil.createRecord(context, "replication");
74 metricsRecord.setTag("RegionServer", name);
75 context.registerUpdater(this);
76
77 JvmMetrics.init("RegionServer", name);
78
79 new ReplicationStatistics(this.registry, "ReplicationSource for " + id);
80 }
81
82
83
84
85
86 public void setAgeOfLastShippedOp(long timestamp) {
87 ageOfLastShippedOp.set(System.currentTimeMillis() - timestamp);
88 }
89
90 @Override
91 public void doUpdates(MetricsContext metricsContext) {
92 synchronized (this) {
93 this.shippedOpsRate.pushMetric(this.metricsRecord);
94 this.shippedBatchesRate.pushMetric(this.metricsRecord);
95 this.logEditsReadRate.pushMetric(this.metricsRecord);
96 this.logEditsFilteredRate.pushMetric(this.metricsRecord);
97 this.ageOfLastShippedOp.pushMetric(this.metricsRecord);
98 this.sizeOfLogQueue.pushMetric(this.metricsRecord);
99 }
100 }
101 }