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 public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
56 this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
57 }
58
59 public MetricsRegionServerSourceImpl(String metricsName,
60 String metricsDescription,
61 String metricsContext,
62 String metricsJmxContext,
63 MetricsRegionServerWrapper rsWrap) {
64 super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
65 this.rsWrap = rsWrap;
66
67 putHisto = getMetricsRegistry().newTimeHistogram(MUTATE_KEY);
68 slowPut = getMetricsRegistry().newCounter(SLOW_MUTATE_KEY, SLOW_MUTATE_DESC, 0l);
69
70 deleteHisto = getMetricsRegistry().newTimeHistogram(DELETE_KEY);
71 slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0l);
72
73 getHisto = getMetricsRegistry().newTimeHistogram(GET_KEY);
74 slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0l);
75
76 incrementHisto = getMetricsRegistry().newTimeHistogram(INCREMENT_KEY);
77 slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0l);
78
79 appendHisto = getMetricsRegistry().newTimeHistogram(APPEND_KEY);
80 slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0l);
81
82 replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY);
83 scanNextHisto = getMetricsRegistry().newTimeHistogram(SCAN_NEXT_KEY);
84
85 splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY);
86 flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_KEY);
87
88 splitRequest = getMetricsRegistry().newCounter(SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0l);
89 splitSuccess = getMetricsRegistry().newCounter(SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0l);
90 }
91
92 @Override
93 public void updatePut(long t) {
94 putHisto.add(t);
95 }
96
97 @Override
98 public void updateDelete(long t) {
99 deleteHisto.add(t);
100 }
101
102 @Override
103 public void updateGet(long t) {
104 getHisto.add(t);
105 }
106
107 @Override
108 public void updateIncrement(long t) {
109 incrementHisto.add(t);
110 }
111
112 @Override
113 public void updateAppend(long t) {
114 appendHisto.add(t);
115 }
116
117 @Override
118 public void updateReplay(long t) {
119 replayHisto.add(t);
120 }
121
122 @Override
123 public void updateScannerNext(long scanSize) {
124 scanNextHisto.add(scanSize);
125 }
126
127 @Override
128 public void incrSlowPut() {
129 slowPut.incr();
130 }
131
132 @Override
133 public void incrSlowDelete() {
134 slowDelete.incr();
135 }
136
137 @Override
138 public void incrSlowGet() {
139 slowGet.incr();
140 }
141
142 @Override
143 public void incrSlowIncrement() {
144 slowIncrement.incr();
145 }
146
147 @Override
148 public void incrSlowAppend() {
149 slowAppend.incr();
150 }
151
152 @Override
153 public void incrSplitRequest() {
154 splitRequest.incr();
155 }
156
157 @Override
158 public void incrSplitSuccess() {
159 splitSuccess.incr();
160 }
161
162 @Override
163 public void updateSplitTime(long t) {
164 splitTimeHisto.add(t);
165 }
166
167 @Override
168 public void updateFlushTime(long t) {
169 flushTimeHisto.add(t);
170 }
171
172
173
174
175
176
177
178
179
180 @Override
181 public void getMetrics(MetricsBuilder metricsBuilder, boolean all) {
182
183 MetricsRecordBuilder mrb = metricsBuilder.addRecord(metricsName);
184
185
186 if (rsWrap != null) {
187 mrb.addGauge(REGION_COUNT, REGION_COUNT_DESC, rsWrap.getNumOnlineRegions())
188 .addGauge(STORE_COUNT, STORE_COUNT_DESC, rsWrap.getNumStores())
189 .addGauge(HLOGFILE_COUNT, HLOGFILE_COUNT_DESC, rsWrap.getNumHLogFiles())
190 .addGauge(HLOGFILE_SIZE, HLOGFILE_SIZE_DESC, rsWrap.getHLogFileSize())
191 .addGauge(STOREFILE_COUNT, STOREFILE_COUNT_DESC, rsWrap.getNumStoreFiles())
192 .addGauge(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC, rsWrap.getMemstoreSize())
193 .addGauge(STOREFILE_SIZE, STOREFILE_SIZE_DESC, rsWrap.getStoreFileSize())
194 .addGauge(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC, rsWrap.getMaxStoreFileAge())
195 .addGauge(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC, rsWrap.getMinStoreFileAge())
196 .addGauge(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC, rsWrap.getAvgStoreFileAge())
197 .addGauge(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC, rsWrap.getNumReferenceFiles())
198 .addGauge(RS_START_TIME_NAME, RS_START_TIME_DESC, rsWrap.getStartCode())
199 .addCounter(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC, rsWrap.getTotalRequestCount())
200 .addCounter(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC, rsWrap.getReadRequestsCount())
201 .addCounter(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC, rsWrap.getWriteRequestsCount())
202 .addCounter(CHECK_MUTATE_FAILED_COUNT,
203 CHECK_MUTATE_FAILED_COUNT_DESC,
204 rsWrap.getCheckAndMutateChecksFailed())
205 .addCounter(CHECK_MUTATE_PASSED_COUNT,
206 CHECK_MUTATE_PASSED_COUNT_DESC,
207 rsWrap.getCheckAndMutateChecksPassed())
208 .addGauge(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC, rsWrap.getStoreFileIndexSize())
209 .addGauge(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC, rsWrap.getTotalStaticIndexSize())
210 .addGauge(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC, rsWrap.getTotalStaticBloomSize())
211 .addGauge(NUMBER_OF_MUTATIONS_WITHOUT_WAL,
212 NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC,
213 rsWrap.getNumMutationsWithoutWAL())
214 .addGauge(DATA_SIZE_WITHOUT_WAL,
215 DATA_SIZE_WITHOUT_WAL_DESC,
216 rsWrap.getDataInMemoryWithoutWAL())
217 .addGauge(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC, rsWrap.getPercentFileLocal())
218 .addGauge(COMPACTION_QUEUE_LENGTH,
219 COMPACTION_QUEUE_LENGTH_DESC,
220 rsWrap.getCompactionQueueSize())
221 .addGauge(LARGE_COMPACTION_QUEUE_LENGTH,
222 COMPACTION_QUEUE_LENGTH_DESC,
223 rsWrap.getLargeCompactionQueueSize())
224 .addGauge(SMALL_COMPACTION_QUEUE_LENGTH,
225 COMPACTION_QUEUE_LENGTH_DESC,
226 rsWrap.getSmallCompactionQueueSize())
227 .addGauge(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC, rsWrap.getFlushQueueSize())
228 .addGauge(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC, rsWrap.getBlockCacheFreeSize())
229 .addGauge(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC, rsWrap.getBlockCacheCount())
230 .addGauge(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC, rsWrap.getBlockCacheSize())
231 .addCounter(BLOCK_CACHE_HIT_COUNT,
232 BLOCK_CACHE_HIT_COUNT_DESC,
233 rsWrap.getBlockCacheHitCount())
234 .addCounter(BLOCK_CACHE_MISS_COUNT,
235 BLOCK_COUNT_MISS_COUNT_DESC,
236 rsWrap.getBlockCacheMissCount())
237 .addCounter(BLOCK_CACHE_EVICTION_COUNT,
238 BLOCK_CACHE_EVICTION_COUNT_DESC,
239 rsWrap.getBlockCacheEvictedCount())
240 .addGauge(BLOCK_CACHE_HIT_PERCENT,
241 BLOCK_CACHE_HIT_PERCENT_DESC,
242 rsWrap.getBlockCacheHitPercent())
243 .addGauge(BLOCK_CACHE_EXPRESS_HIT_PERCENT,
244 BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC,
245 rsWrap.getBlockCacheHitCachingPercent())
246 .addCounter(BLOCK_CACHE_FAILED_INSERTION_COUNT,
247 BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC,rsWrap.getBlockCacheFailedInsertions())
248 .addCounter(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC, rsWrap.getUpdatesBlockedTime())
249 .addCounter(FLUSHED_CELLS, FLUSHED_CELLS_DESC, rsWrap.getFlushedCellsCount())
250 .addCounter(COMPACTED_CELLS, COMPACTED_CELLS_DESC, rsWrap.getCompactedCellsCount())
251 .addCounter(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC,
252 rsWrap.getMajorCompactedCellsCount())
253 .addCounter(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC, rsWrap.getFlushedCellsSize())
254 .addCounter(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC,
255 rsWrap.getCompactedCellsSize())
256 .addCounter(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC,
257 rsWrap.getMajorCompactedCellsSize())
258
259 .addCounter(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC,
260 rsWrap.getBlockedRequestsCount())
261
262 .tag(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC, rsWrap.getZookeeperQuorum())
263 .tag(SERVER_NAME_NAME, SERVER_NAME_DESC, rsWrap.getServerName())
264 .tag(CLUSTER_ID_NAME, CLUSTER_ID_DESC, rsWrap.getClusterId());
265 }
266
267 metricsRegistry.snapshot(mrb, all);
268 }
269
270
271 }