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.classification.InterfaceAudience;
22 import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
23 import org.apache.hadoop.hbase.metrics.Interns;
24 import org.apache.hadoop.metrics2.MetricHistogram;
25 import org.apache.hadoop.metrics2.MetricsCollector;
26 import org.apache.hadoop.metrics2.MetricsRecordBuilder;
27 import org.apache.hadoop.metrics2.lib.MutableCounterLong;
28
29
30
31
32
33
34 @InterfaceAudience.Private
35 public class MetricsRegionServerSourceImpl
36 extends BaseSourceImpl implements MetricsRegionServerSource {
37
38
39 final MetricsRegionServerWrapper rsWrap;
40 private final MetricHistogram putHisto;
41 private final MetricHistogram deleteHisto;
42 private final MetricHistogram getHisto;
43 private final MetricHistogram incrementHisto;
44 private final MetricHistogram appendHisto;
45 private final MetricHistogram replayHisto;
46 private final MetricHistogram scanNextHisto;
47
48 private final MutableCounterLong slowPut;
49 private final MutableCounterLong slowDelete;
50 private final MutableCounterLong slowGet;
51 private final MutableCounterLong slowIncrement;
52 private final MutableCounterLong slowAppend;
53 private final MutableCounterLong splitRequest;
54 private final MutableCounterLong splitSuccess;
55
56 private final MetricHistogram splitTimeHisto;
57 private final MetricHistogram flushTimeHisto;
58
59 public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) {
60 this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap);
61 }
62
63 public MetricsRegionServerSourceImpl(String metricsName,
64 String metricsDescription,
65 String metricsContext,
66 String metricsJmxContext,
67 MetricsRegionServerWrapper rsWrap) {
68 super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
69 this.rsWrap = rsWrap;
70
71 putHisto = getMetricsRegistry().newTimeHistogram(MUTATE_KEY);
72 slowPut = getMetricsRegistry().newCounter(SLOW_MUTATE_KEY, SLOW_MUTATE_DESC, 0L);
73
74 deleteHisto = getMetricsRegistry().newTimeHistogram(DELETE_KEY);
75 slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0L);
76
77 getHisto = getMetricsRegistry().newTimeHistogram(GET_KEY);
78 slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0L);
79
80 incrementHisto = getMetricsRegistry().newTimeHistogram(INCREMENT_KEY);
81 slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0L);
82
83 appendHisto = getMetricsRegistry().newTimeHistogram(APPEND_KEY);
84 slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0L);
85
86 replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY);
87 scanNextHisto = getMetricsRegistry().newTimeHistogram(SCAN_NEXT_KEY);
88
89 splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY);
90 flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_KEY);
91
92 splitRequest = getMetricsRegistry().newCounter(SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0L);
93 splitSuccess = getMetricsRegistry().newCounter(SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0L);
94 }
95
96 @Override
97 public void updatePut(long t) {
98 putHisto.add(t);
99 }
100
101 @Override
102 public void updateDelete(long t) {
103 deleteHisto.add(t);
104 }
105
106 @Override
107 public void updateGet(long t) {
108 getHisto.add(t);
109 }
110
111 @Override
112 public void updateIncrement(long t) {
113 incrementHisto.add(t);
114 }
115
116 @Override
117 public void updateAppend(long t) {
118 appendHisto.add(t);
119 }
120
121 @Override
122 public void updateReplay(long t) {
123 replayHisto.add(t);
124 }
125
126 @Override
127 public void updateScannerNext(long scanSize) {
128 scanNextHisto.add(scanSize);
129 }
130
131 @Override
132 public void incrSlowPut() {
133 slowPut.incr();
134 }
135
136 @Override
137 public void incrSlowDelete() {
138 slowDelete.incr();
139 }
140
141 @Override
142 public void incrSlowGet() {
143 slowGet.incr();
144 }
145
146 @Override
147 public void incrSlowIncrement() {
148 slowIncrement.incr();
149 }
150
151 @Override
152 public void incrSlowAppend() {
153 slowAppend.incr();
154 }
155
156 @Override
157 public void incrSplitRequest() {
158 splitRequest.incr();
159 }
160
161 @Override
162 public void incrSplitSuccess() {
163 splitSuccess.incr();
164 }
165
166 @Override
167 public void updateSplitTime(long t) {
168 splitTimeHisto.add(t);
169 }
170
171 @Override
172 public void updateFlushTime(long t) {
173 flushTimeHisto.add(t);
174 }
175
176
177
178
179
180
181
182
183
184 @Override
185 public void getMetrics(MetricsCollector metricsCollector, boolean all) {
186
187 MetricsRecordBuilder mrb = metricsCollector.addRecord(metricsName);
188
189
190 if (rsWrap != null) {
191 mrb.addGauge(Interns.info(REGION_COUNT, REGION_COUNT_DESC), rsWrap.getNumOnlineRegions())
192 .addGauge(Interns.info(STORE_COUNT, STORE_COUNT_DESC), rsWrap.getNumStores())
193 .addGauge(Interns.info(WALFILE_COUNT, WALFILE_COUNT_DESC), rsWrap.getNumWALFiles())
194 .addGauge(Interns.info(WALFILE_SIZE, WALFILE_SIZE_DESC), rsWrap.getWALFileSize())
195 .addGauge(Interns.info(STOREFILE_COUNT, STOREFILE_COUNT_DESC), rsWrap.getNumStoreFiles())
196 .addGauge(Interns.info(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC), rsWrap.getMemstoreSize())
197 .addGauge(Interns.info(STOREFILE_SIZE, STOREFILE_SIZE_DESC), rsWrap.getStoreFileSize())
198 .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC),
199 rsWrap.getStartCode())
200 .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC),
201 rsWrap.getTotalRequestCount())
202 .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC),
203 rsWrap.getReadRequestsCount())
204 .addCounter(Interns.info(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC),
205 rsWrap.getWriteRequestsCount())
206 .addCounter(Interns.info(CHECK_MUTATE_FAILED_COUNT, CHECK_MUTATE_FAILED_COUNT_DESC),
207 rsWrap.getCheckAndMutateChecksFailed())
208 .addCounter(Interns.info(CHECK_MUTATE_PASSED_COUNT, CHECK_MUTATE_PASSED_COUNT_DESC),
209 rsWrap.getCheckAndMutateChecksPassed())
210 .addGauge(Interns.info(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC),
211 rsWrap.getStoreFileIndexSize())
212 .addGauge(Interns.info(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC),
213 rsWrap.getTotalStaticIndexSize())
214 .addGauge(Interns.info(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC),
215 rsWrap.getTotalStaticBloomSize())
216 .addGauge(
217 Interns.info(NUMBER_OF_MUTATIONS_WITHOUT_WAL, NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC),
218 rsWrap.getNumMutationsWithoutWAL())
219 .addGauge(Interns.info(DATA_SIZE_WITHOUT_WAL, DATA_SIZE_WITHOUT_WAL_DESC),
220 rsWrap.getDataInMemoryWithoutWAL())
221 .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),
222 rsWrap.getPercentFileLocal())
223 .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,
224 PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC),
225 rsWrap.getPercentFileLocalSecondaryRegions())
226 .addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC),
227 rsWrap.getSplitQueueSize())
228 .addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC),
229 rsWrap.getCompactionQueueSize())
230 .addGauge(Interns.info(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC),
231 rsWrap.getFlushQueueSize())
232 .addGauge(Interns.info(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC),
233 rsWrap.getBlockCacheFreeSize())
234 .addGauge(Interns.info(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC),
235 rsWrap.getBlockCacheCount())
236 .addGauge(Interns.info(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC),
237 rsWrap.getBlockCacheSize())
238 .addCounter(Interns.info(BLOCK_CACHE_HIT_COUNT, BLOCK_CACHE_HIT_COUNT_DESC),
239 rsWrap.getBlockCacheHitCount())
240 .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_HIT_COUNT,
241 BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC), rsWrap.getBlockCachePrimaryHitCount())
242 .addCounter(Interns.info(BLOCK_CACHE_MISS_COUNT, BLOCK_COUNT_MISS_COUNT_DESC),
243 rsWrap.getBlockCacheMissCount())
244 .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_MISS_COUNT,
245 BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC), rsWrap.getBlockCachePrimaryMissCount())
246 .addCounter(Interns.info(BLOCK_CACHE_EVICTION_COUNT, BLOCK_CACHE_EVICTION_COUNT_DESC),
247 rsWrap.getBlockCacheEvictedCount())
248 .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_EVICTION_COUNT,
249 BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC), rsWrap.getBlockCachePrimaryEvictedCount())
250 .addGauge(Interns.info(BLOCK_CACHE_HIT_PERCENT, BLOCK_CACHE_HIT_PERCENT_DESC),
251 rsWrap.getBlockCacheHitPercent())
252 .addGauge(Interns.info(BLOCK_CACHE_EXPRESS_HIT_PERCENT,
253 BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC), rsWrap.getBlockCacheHitCachingPercent())
254 .addCounter(Interns.info(BLOCK_CACHE_FAILED_INSERTION_COUNT,
255 BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC),rsWrap.getBlockCacheFailedInsertions())
256 .addCounter(Interns.info(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC),
257 rsWrap.getUpdatesBlockedTime())
258 .addCounter(Interns.info(FLUSHED_CELLS, FLUSHED_CELLS_DESC),
259 rsWrap.getFlushedCellsCount())
260 .addCounter(Interns.info(COMPACTED_CELLS, COMPACTED_CELLS_DESC),
261 rsWrap.getCompactedCellsCount())
262 .addCounter(Interns.info(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC),
263 rsWrap.getMajorCompactedCellsCount())
264 .addCounter(Interns.info(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC),
265 rsWrap.getFlushedCellsSize())
266 .addCounter(Interns.info(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC),
267 rsWrap.getCompactedCellsSize())
268 .addCounter(Interns.info(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC),
269 rsWrap.getMajorCompactedCellsSize())
270
271 .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC),
272 rsWrap.getBlockedRequestsCount())
273
274 .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC),
275 rsWrap.getZookeeperQuorum())
276 .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName())
277 .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), rsWrap.getClusterId());
278 }
279
280 metricsRegistry.snapshot(mrb, all);
281 }
282 }