1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver;
19
20 import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
21 import org.apache.hadoop.hbase.TableName;
22 import org.apache.hadoop.hbase.classification.InterfaceAudience;
23 import org.apache.hadoop.hbase.classification.InterfaceStability;
24 import org.apache.hadoop.hbase.metrics.Meter;
25 import org.apache.hadoop.hbase.metrics.MetricRegistries;
26 import org.apache.hadoop.hbase.metrics.MetricRegistry;
27 import org.apache.hadoop.hbase.metrics.Timer;
28 import org.apache.hadoop.conf.Configuration;
29
30
31
32
33
34
35
36
37 @InterfaceStability.Evolving
38 @InterfaceAudience.Private
39 public class MetricsRegionServer {
40 public static final String RS_ENABLE_TABLE_METRICS_KEY =
41 "hbase.regionserver.enable.table.latencies";
42 public static final boolean RS_ENABLE_TABLE_METRICS_DEFAULT = true;
43 public static final String RS_ENABLE_SERVER_QUERY_METER_METRICS_KEY =
44 "hbase.regionserver.enable.server.query.meter";
45 public static final boolean RS_ENABLE_SERVER_QUERY_METER_METRICS_KEY_DEFAULT = true;
46 public static final String RS_ENABLE_TABLE_QUERY_METER_METRICS_KEY =
47 "hbase.regionserver.enable.table.query.meter";
48 public static final boolean RS_ENABLE_TABLE_QUERY_METER_METRICS_KEY_DEFAULT = true;
49
50 private final MetricsRegionServerSource serverSource;
51 private final MetricsRegionServerWrapper regionServerWrapper;
52 private final RegionServerTableMetrics tableMetrics;
53 private final MetricsUserAggregate userAggregate;
54
55 private MetricRegistry metricRegistry;
56 private Timer bulkLoadTimer;
57
58 private Meter serverReadQueryMeter;
59
60 private Meter serverWriteQueryMeter;
61
62 public MetricsRegionServer(MetricsRegionServerWrapper regionServerWrapper, Configuration conf) {
63 this(regionServerWrapper,
64 CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
65 .createServer(regionServerWrapper), createTableMetrics(conf),
66 MetricsUserAggregateFactory.getMetricsUserAggregate(conf));
67
68
69
70 metricRegistry = MetricRegistries.global().get(serverSource.getMetricRegistryInfo()).get();
71
72
73 bulkLoadTimer = metricRegistry.timer("Bulkload");
74 if (conf.getBoolean(RS_ENABLE_SERVER_QUERY_METER_METRICS_KEY,
75 RS_ENABLE_SERVER_QUERY_METER_METRICS_KEY_DEFAULT)) {
76 serverReadQueryMeter = metricRegistry.meter("ServerReadQueryPerSecond");
77 serverWriteQueryMeter = metricRegistry.meter("ServerWriteQueryPerSecond");
78 }
79 }
80
81 MetricsRegionServer(MetricsRegionServerWrapper regionServerWrapper,
82 MetricsRegionServerSource serverSource, RegionServerTableMetrics tableMetrics,
83 MetricsUserAggregate userAggregate) {
84 this.regionServerWrapper = regionServerWrapper;
85 this.serverSource = serverSource;
86 this.tableMetrics = tableMetrics;
87 this.userAggregate = userAggregate;
88 }
89
90
91
92
93 static RegionServerTableMetrics createTableMetrics(Configuration conf) {
94 if (conf.getBoolean(RS_ENABLE_TABLE_METRICS_KEY, RS_ENABLE_TABLE_METRICS_DEFAULT)) {
95 return new RegionServerTableMetrics(
96 conf.getBoolean(RS_ENABLE_TABLE_QUERY_METER_METRICS_KEY,
97 RS_ENABLE_TABLE_QUERY_METER_METRICS_KEY_DEFAULT));
98 }
99 return null;
100 }
101
102 public MetricsRegionServerSource getMetricsSource() {
103 return serverSource;
104 }
105
106 public org.apache.hadoop.hbase.regionserver.MetricsUserAggregate getMetricsUserAggregate() {
107 return userAggregate;
108 }
109
110 public MetricsRegionServerWrapper getRegionServerWrapper() {
111 return regionServerWrapper;
112 }
113
114 public void updatePutBatch(TableName tn, long t) {
115 if (tableMetrics != null && tn != null) {
116 tableMetrics.updatePutBatch(tn, t);
117 }
118 if (t > 1000) {
119 serverSource.incrSlowPut();
120 }
121 serverSource.updatePutBatch(t);
122 }
123
124 public void updatePut(TableName tn, long t) {
125 if (tableMetrics != null && tn != null) {
126 tableMetrics.updatePut(tn, t);
127 }
128 serverSource.updatePut(t);
129 userAggregate.updatePut(t);
130 }
131
132 public void updateDelete(TableName tn, long t) {
133 if (tableMetrics != null && tn != null) {
134 tableMetrics.updateDelete(tn, t);
135 }
136 serverSource.updateDelete(t);
137 userAggregate.updateDelete(t);
138 }
139
140 public void updateDeleteBatch(TableName tn, long t) {
141 if (tableMetrics != null && tn != null) {
142 tableMetrics.updateDeleteBatch(tn, t);
143 }
144 if (t > 1000) {
145 serverSource.incrSlowDelete();
146 }
147 serverSource.updateDeleteBatch(t);
148 }
149
150 public void updateCheckAndDelete(TableName tn, long t) {
151 if (tableMetrics != null && tn != null) {
152 tableMetrics.updateCheckAndDelete(tn, t);
153 }
154 serverSource.updateCheckAndDelete(t);
155 }
156
157 public void updateCheckAndPut(TableName tn, long t) {
158 if (tableMetrics != null && tn != null) {
159 tableMetrics.updateCheckAndPut(tn, t);
160 }
161 serverSource.updateCheckAndPut(t);
162 }
163
164 public void updateGet(TableName tn, long t) {
165 if (tableMetrics != null && tn != null) {
166 tableMetrics.updateGet(tn, t);
167 }
168 if (t > 1000) {
169 serverSource.incrSlowGet();
170 }
171 serverSource.updateGet(t);
172 userAggregate.updateGet(t);
173 }
174
175 public void updateIncrement(TableName tn, long t) {
176 if (tableMetrics != null && tn != null) {
177 tableMetrics.updateIncrement(tn, t);
178 }
179 if (t > 1000) {
180 serverSource.incrSlowIncrement();
181 }
182 serverSource.updateIncrement(t);
183 userAggregate.updateIncrement(t);
184 }
185
186 public void updateAppend(TableName tn, long t) {
187 if (tableMetrics != null && tn != null) {
188 tableMetrics.updateAppend(tn, t);
189 }
190 if (t > 1000) {
191 serverSource.incrSlowAppend();
192 }
193 serverSource.updateAppend(t);
194 userAggregate.updateAppend(t);
195 }
196
197 public void updateReplay(long t){
198 serverSource.updateReplay(t);
199 userAggregate.updateReplay(t);
200 }
201
202 public void updateScanSize(TableName tn, long scanSize){
203 if (tableMetrics != null && tn != null) {
204 tableMetrics.updateScanSize(tn, scanSize);
205 }
206 serverSource.updateScanSize(scanSize);
207 }
208
209 public void updateScanTime(TableName tn, long t) {
210 if (tableMetrics != null && tn != null) {
211 tableMetrics.updateScanTime(tn, t);
212 }
213 serverSource.updateScanTime(t);
214 userAggregate.updateScanTime(t);
215 }
216
217 public void updateSplitTime(long t) {
218 serverSource.updateSplitTime(t);
219 }
220
221 public void incrSplitRequest() {
222 serverSource.incrSplitRequest();
223 }
224
225 public void incrSplitSuccess() {
226 serverSource.incrSplitSuccess();
227 }
228
229 public void updateFlush(long t, long memstoreSize, long fileSize) {
230 serverSource.updateFlushTime(t);
231 serverSource.updateFlushMemstoreSize(memstoreSize);
232 serverSource.updateFlushOutputSize(fileSize);
233 }
234
235 public void updateCompaction(boolean isMajor, long t, int inputFileCount, int outputFileCount,
236 long inputBytes, long outputBytes) {
237 serverSource.updateCompactionTime(isMajor, t);
238 serverSource.updateCompactionInputFileCount(isMajor, inputFileCount);
239 serverSource.updateCompactionOutputFileCount(isMajor, outputFileCount);
240 serverSource.updateCompactionInputSize(isMajor, inputBytes);
241 serverSource.updateCompactionOutputSize(isMajor, outputBytes);
242 }
243
244 public void updateBulkLoad(long millis) {
245 this.bulkLoadTimer.updateMillis(millis);
246 }
247
248
249 public void updateReadQueryMeter(TableName tn, long count) {
250 if (tableMetrics != null && tn != null) {
251 tableMetrics.updateTableReadQueryMeter(tn, count);
252 }
253 if (serverReadQueryMeter != null) {
254 serverReadQueryMeter.mark(count);
255 }
256 }
257
258 public void updateWriteQueryMeter(TableName tn, long count) {
259 if (tableMetrics != null && tn != null) {
260 tableMetrics.updateTableWriteQueryMeter(tn, count);
261 }
262 if (serverWriteQueryMeter != null) {
263 serverWriteQueryMeter.mark(count);
264 }
265 }
266
267 public void updateWriteQueryMeter(TableName tn) {
268 if (tableMetrics != null && tn != null) {
269 tableMetrics.updateTableWriteQueryMeter(tn);
270 }
271 if (serverWriteQueryMeter != null) {
272 serverWriteQueryMeter.mark();
273 }
274 }
275 }