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 java.io.UnsupportedEncodingException;
22 import java.net.URLEncoder;
23
24 import org.apache.hadoop.hbase.metrics.MetricsRate;
25 import org.apache.hadoop.metrics.MetricsContext;
26 import org.apache.hadoop.metrics.MetricsRecord;
27 import org.apache.hadoop.metrics.MetricsUtil;
28 import org.apache.hadoop.metrics.Updater;
29 import org.apache.hadoop.metrics.jvm.JvmMetrics;
30 import org.apache.hadoop.metrics.util.MetricsIntValue;
31 import org.apache.hadoop.metrics.util.MetricsLongValue;
32 import org.apache.hadoop.metrics.util.MetricsRegistry;
33
34
35
36
37
38 public class ReplicationSourceMetrics implements Updater {
39 private final MetricsRecord metricsRecord;
40 private MetricsRegistry registry = new MetricsRegistry();
41
42
43 public final MetricsRate shippedOpsRate =
44 new MetricsRate("shippedOpsRate", registry);
45
46
47 public final MetricsRate shippedBatchesRate =
48 new MetricsRate("shippedBatchesRate", registry);
49
50
51 public final MetricsRate logEditsReadRate =
52 new MetricsRate("logEditsReadRate", registry);
53
54
55 public final MetricsRate logEditsFilteredRate =
56 new MetricsRate("logEditsFilteredRate", registry);
57
58
59 private final MetricsLongValue ageOfLastShippedOp =
60 new MetricsLongValue("ageOfLastShippedOp", registry);
61
62
63
64
65
66 public final MetricsIntValue sizeOfLogQueue =
67 new MetricsIntValue("sizeOfLogQueue", registry);
68
69
70
71
72
73 public ReplicationSourceMetrics(String id) {
74 MetricsContext context = MetricsUtil.getContext("hbase");
75 String name = Thread.currentThread().getName();
76 metricsRecord = MetricsUtil.createRecord(context, "replication");
77 metricsRecord.setTag("RegionServer", name);
78 context.registerUpdater(this);
79 try {
80 id = URLEncoder.encode(id, "UTF8");
81 } catch (UnsupportedEncodingException e) {
82 id = "CAN'T ENCODE UTF8";
83 }
84
85 new ReplicationStatistics(this.registry, "ReplicationSource for " + id);
86 }
87
88
89
90
91
92 public void setAgeOfLastShippedOp(long timestamp) {
93 ageOfLastShippedOp.set(System.currentTimeMillis() - timestamp);
94 }
95
96 @Override
97 public void doUpdates(MetricsContext metricsContext) {
98 synchronized (this) {
99 this.shippedOpsRate.pushMetric(this.metricsRecord);
100 this.shippedBatchesRate.pushMetric(this.metricsRecord);
101 this.logEditsReadRate.pushMetric(this.metricsRecord);
102 this.logEditsFilteredRate.pushMetric(this.metricsRecord);
103 this.ageOfLastShippedOp.pushMetric(this.metricsRecord);
104 this.sizeOfLogQueue.pushMetric(this.metricsRecord);
105 }
106 this.metricsRecord.update();
107 }
108 }