1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver;
20
21 import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
22 import org.apache.hadoop.metrics2.MetricHistogram;
23 import org.apache.hadoop.metrics2.MetricsBuilder;
24 import org.apache.hadoop.metrics2.MetricsRecordBuilder;
25 import org.apache.hadoop.metrics2.lib.MetricMutableCounterLong;
26
27
28
29
30
31
32 public class MetricsRegionServerSourceImpl
33 extends BaseSourceImpl implements MetricsRegionServerSource {
34
35 final MetricsRegionServerWrapper rsWrap;
36 private final MetricHistogram putHisto;
37 private final MetricHistogram deleteHisto;
38 private final MetricHistogram getHisto;
39 private final MetricHistogram incrementHisto;
40 private final MetricHistogram appendHisto;
41 private final MetricHistogram replayHisto;
42 private final MetricHistogram scanNextHisto;
43
44 private final MetricMutableCounterLong slowPut;
45 private final MetricMutableCounterLong slowDelete;
46 private final MetricMutableCounterLong slowGet;
47 private final MetricMutableCounterLong slowIncrement;
48 private final MetricMutableCounterLong slowAppend;
49 private final MetricMutableCounterLong splitRequest;
50 private final MetricMutableCounterLong splitSuccess;
51
52 private final MetricHistogram splitTimeHisto;
53 private final MetricHistogram flushTimeHisto;
54
55
56 private final MetricMutableCounterLong infoPauseThresholdExceeded;
57 private final MetricMutableCounterLong warnPauseThresholdExceeded;
58 private final MetricHistogram pausesWithGc;
59 private final MetricHistogram pausesWithoutGc;
60
61 public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
62 this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
63 }
64
65 public MetricsRegionServerSourceImpl(String metricsName,
66 String metricsDescription,
67 String metricsContext,
68 String metricsJmxContext,
69 MetricsRegionServerWrapper rsWrap) {
70 super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
71 this.rsWrap = rsWrap;
72
73 putHisto = getMetricsRegistry().newTimeHistogram(MUTATE_KEY);
74 slowPut = getMetricsRegistry().newCounter(SLOW_MUTATE_KEY, SLOW_MUTATE_DESC, 0l);
75
76 deleteHisto = getMetricsRegistry().newTimeHistogram(DELETE_KEY);
77 slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0l);
78
79 getHisto = getMetricsRegistry().newTimeHistogram(GET_KEY);
80 slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0l);
81
82 incrementHisto = getMetricsRegistry().newTimeHistogram(INCREMENT_KEY);
83 slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0l);
84
85 appendHisto = getMetricsRegistry().newTimeHistogram(APPEND_KEY);
86 slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0l);
87
88 replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY);
89 scanNextHisto = getMetricsRegistry().newTimeHistogram(SCAN_NEXT_KEY);
90
91 splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY);
92 flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_KEY);
93
94 splitRequest = getMetricsRegistry().newCounter(SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0l);
95 splitSuccess = getMetricsRegistry().newCounter(SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0l);
96
97
98 infoPauseThresholdExceeded = getMetricsRegistry().newCounter(INFO_THRESHOLD_COUNT_KEY,
99 INFO_THRESHOLD_COUNT_DESC, 0L);
100 warnPauseThresholdExceeded = getMetricsRegistry().newCounter(WARN_THRESHOLD_COUNT_KEY,
101 WARN_THRESHOLD_COUNT_DESC, 0L);
102 pausesWithGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITH_GC_KEY);
103 pausesWithoutGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITHOUT_GC_KEY);
104 }
105
106 @Override
107 public void updatePut(long t) {
108 putHisto.add(t);
109 }
110
111 @Override
112 public void updateDelete(long t) {
113 deleteHisto.add(t);
114 }
115
116 @Override
117 public void updateGet(long t) {
118 getHisto.add(t);
119 }
120
121 @Override
122 public void updateIncrement(long t) {
123 incrementHisto.add(t);
124 }
125
126 @Override
127 public void updateAppend(long t) {
128 appendHisto.add(t);
129 }
130
131 @Override
132 public void updateReplay(long t) {
133 replayHisto.add(t);
134 }
135
136 @Override
137 public void updateScannerNext(long scanSize) {
138 scanNextHisto.add(scanSize);
139 }
140
141 @Override
142 public void incrSlowPut() {
143 slowPut.incr();
144 }
145
146 @Override
147 public void incrSlowDelete() {
148 slowDelete.incr();
149 }
150
151 @Override
152 public void incrSlowGet() {
153 slowGet.incr();
154 }
155
156 @Override
157 public void incrSlowIncrement() {
158 slowIncrement.incr();
159 }
160
161 @Override
162 public void incrSlowAppend() {
163 slowAppend.incr();
164 }
165
166 @Override
167 public void incrSplitRequest() {
168 splitRequest.incr();
169 }
170
171 @Override
172 public void incrSplitSuccess() {
173 splitSuccess.incr();
174 }
175
176 @Override
177 public void updateSplitTime(long t) {
178 splitTimeHisto.add(t);
179 }
180
181 @Override
182 public void updateFlushTime(long t) {
183 flushTimeHisto.add(t);
184 }
185
186
187
188
189
190
191
192
193
194 @Override
195 public void getMetrics(MetricsBuilder metricsBuilder, boolean all) {
196
197 MetricsRecordBuilder mrb = metricsBuilder.addRecord(metricsName);
198
199
200 if (rsWrap != null) {
201 mrb.addGauge(REGION_COUNT, REGION_COUNT_DESC, rsWrap.getNumOnlineRegions())
202 .addGauge(STORE_COUNT, STORE_COUNT_DESC, rsWrap.getNumStores())
203 .addGauge(HLOGFILE_COUNT, HLOGFILE_COUNT_DESC, rsWrap.getNumHLogFiles())
204 .addGauge(HLOGFILE_SIZE, HLOGFILE_SIZE_DESC, rsWrap.getHLogFileSize())
205 .addGauge(STOREFILE_COUNT, STOREFILE_COUNT_DESC, rsWrap.getNumStoreFiles())
206 .addGauge(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC, rsWrap.getMemstoreSize())
207 .addGauge(STOREFILE_SIZE, STOREFILE_SIZE_DESC, rsWrap.getStoreFileSize())
208 .addGauge(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC, rsWrap.getMaxStoreFileAge())
209 .addGauge(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC, rsWrap.getMinStoreFileAge())
210 .addGauge(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC, rsWrap.getAvgStoreFileAge())
211 .addGauge(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC, rsWrap.getNumReferenceFiles())
212 .addGauge(RS_START_TIME_NAME, RS_START_TIME_DESC, rsWrap.getStartCode())
213 .addGauge(AVERAGE_REGION_SIZE, AVERAGE_REGION_SIZE_DESC, rsWrap.getAverageRegionSize())
214 .addCounter(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC, rsWrap.getTotalRequestCount())
215 .addCounter(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC, rsWrap.getReadRequestsCount())
216 .addCounter(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC, rsWrap.getWriteRequestsCount())
217 .addCounter(CHECK_MUTATE_FAILED_COUNT,
218 CHECK_MUTATE_FAILED_COUNT_DESC,
219 rsWrap.getCheckAndMutateChecksFailed())
220 .addCounter(CHECK_MUTATE_PASSED_COUNT,
221 CHECK_MUTATE_PASSED_COUNT_DESC,
222 rsWrap.getCheckAndMutateChecksPassed())
223 .addGauge(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC, rsWrap.getStoreFileIndexSize())
224 .addGauge(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC, rsWrap.getTotalStaticIndexSize())
225 .addGauge(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC, rsWrap.getTotalStaticBloomSize())
226 .addGauge(NUMBER_OF_MUTATIONS_WITHOUT_WAL,
227 NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC,
228 rsWrap.getNumMutationsWithoutWAL())
229 .addGauge(DATA_SIZE_WITHOUT_WAL,
230 DATA_SIZE_WITHOUT_WAL_DESC,
231 rsWrap.getDataInMemoryWithoutWAL())
232 .addGauge(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC, rsWrap.getPercentFileLocal())
233 .addGauge(COMPACTION_QUEUE_LENGTH,
234 COMPACTION_QUEUE_LENGTH_DESC,
235 rsWrap.getCompactionQueueSize())
236 .addGauge(LARGE_COMPACTION_QUEUE_LENGTH,
237 COMPACTION_QUEUE_LENGTH_DESC,
238 rsWrap.getLargeCompactionQueueSize())
239 .addGauge(SMALL_COMPACTION_QUEUE_LENGTH,
240 COMPACTION_QUEUE_LENGTH_DESC,
241 rsWrap.getSmallCompactionQueueSize())
242 .addGauge(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC, rsWrap.getFlushQueueSize())
243 .addGauge(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC, rsWrap.getBlockCacheFreeSize())
244 .addGauge(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC, rsWrap.getBlockCacheCount())
245 .addGauge(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC, rsWrap.getBlockCacheSize())
246 .addCounter(BLOCK_CACHE_HIT_COUNT,
247 BLOCK_CACHE_HIT_COUNT_DESC,
248 rsWrap.getBlockCacheHitCount())
249 .addCounter(BLOCK_CACHE_MISS_COUNT,
250 BLOCK_COUNT_MISS_COUNT_DESC,
251 rsWrap.getBlockCacheMissCount())
252 .addCounter(BLOCK_CACHE_EVICTION_COUNT,
253 BLOCK_CACHE_EVICTION_COUNT_DESC,
254 rsWrap.getBlockCacheEvictedCount())
255 .addGauge(BLOCK_CACHE_HIT_PERCENT,
256 BLOCK_CACHE_HIT_PERCENT_DESC,
257 rsWrap.getBlockCacheHitPercent())
258 .addGauge(BLOCK_CACHE_EXPRESS_HIT_PERCENT,
259 BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC,
260 rsWrap.getBlockCacheHitCachingPercent())
261 .addCounter(BLOCK_CACHE_FAILED_INSERTION_COUNT,
262 BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC,rsWrap.getBlockCacheFailedInsertions())
263 .addCounter(BLOCK_CACHE_DATA_MISS_COUNT, "", rsWrap.getDataMissCount())
264 .addCounter(BLOCK_CACHE_LEAF_INDEX_MISS_COUNT, "", rsWrap.getLeafIndexMissCount())
265 .addCounter(BLOCK_CACHE_BLOOM_CHUNK_MISS_COUNT, "", rsWrap.getBloomChunkMissCount())
266 .addCounter(BLOCK_CACHE_META_MISS_COUNT, "", rsWrap.getMetaMissCount())
267 .addCounter(BLOCK_CACHE_ROOT_INDEX_MISS_COUNT, "", rsWrap.getRootIndexMissCount())
268 .addCounter(BLOCK_CACHE_INTERMEDIATE_INDEX_MISS_COUNT, "",
269 rsWrap.getIntermediateIndexMissCount())
270 .addCounter(BLOCK_CACHE_FILE_INFO_MISS_COUNT, "", rsWrap.getFileInfoMissCount())
271 .addCounter(BLOCK_CACHE_GENERAL_BLOOM_META_MISS_COUNT, "",
272 rsWrap.getGeneralBloomMetaMissCount())
273 .addCounter(BLOCK_CACHE_DELETE_FAMILY_BLOOM_MISS_COUNT, "",
274 rsWrap.getDeleteFamilyBloomMissCount())
275 .addCounter(BLOCK_CACHE_TRAILER_MISS_COUNT, "", rsWrap.getTrailerMissCount())
276 .addCounter(BLOCK_CACHE_DATA_HIT_COUNT, "", rsWrap.getDataHitCount())
277 .addCounter(BLOCK_CACHE_LEAF_INDEX_HIT_COUNT, "", rsWrap.getLeafIndexHitCount())
278 .addCounter(BLOCK_CACHE_BLOOM_CHUNK_HIT_COUNT, "", rsWrap.getBloomChunkHitCount())
279 .addCounter(BLOCK_CACHE_META_HIT_COUNT, "", rsWrap.getMetaHitCount())
280 .addCounter(BLOCK_CACHE_ROOT_INDEX_HIT_COUNT, "", rsWrap.getRootIndexHitCount())
281 .addCounter(BLOCK_CACHE_INTERMEDIATE_INDEX_HIT_COUNT, "",
282 rsWrap.getIntermediateIndexHitCount())
283 .addCounter(BLOCK_CACHE_FILE_INFO_HIT_COUNT, "", rsWrap.getFileInfoHitCount())
284 .addCounter(BLOCK_CACHE_GENERAL_BLOOM_META_HIT_COUNT, "",
285 rsWrap.getGeneralBloomMetaHitCount())
286 .addCounter(BLOCK_CACHE_DELETE_FAMILY_BLOOM_HIT_COUNT, "",
287 rsWrap.getDeleteFamilyBloomHitCount())
288 .addCounter(BLOCK_CACHE_TRAILER_HIT_COUNT, "", rsWrap.getTrailerHitCount())
289 .addCounter(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC, rsWrap.getUpdatesBlockedTime())
290 .addCounter(FLUSHED_CELLS, FLUSHED_CELLS_DESC, rsWrap.getFlushedCellsCount())
291 .addCounter(COMPACTED_CELLS, COMPACTED_CELLS_DESC, rsWrap.getCompactedCellsCount())
292 .addCounter(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC,
293 rsWrap.getMajorCompactedCellsCount())
294 .addCounter(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC, rsWrap.getFlushedCellsSize())
295 .addCounter(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC,
296 rsWrap.getCompactedCellsSize())
297 .addCounter(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC,
298 rsWrap.getMajorCompactedCellsSize())
299
300 .addCounter(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC,
301 rsWrap.getBlockedRequestsCount())
302
303 .tag(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC, rsWrap.getZookeeperQuorum())
304 .tag(SERVER_NAME_NAME, SERVER_NAME_DESC, rsWrap.getServerName())
305 .tag(CLUSTER_ID_NAME, CLUSTER_ID_DESC, rsWrap.getClusterId());
306 }
307
308 metricsRegistry.snapshot(mrb, all);
309 }
310
311 @Override
312 public void incInfoThresholdExceeded(int count) {
313 infoPauseThresholdExceeded.incr(count);
314 }
315
316 @Override
317 public void incWarnThresholdExceeded(int count) {
318 warnPauseThresholdExceeded.incr(count);
319 }
320
321 @Override
322 public void updatePauseTimeWithGc(long t) {
323 pausesWithGc.add(t);
324 }
325
326 @Override
327 public void updatePauseTimeWithoutGc(long t) {
328 pausesWithoutGc.add(t);
329 }
330 }