001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.regionserver; 019 020import org.apache.hadoop.hbase.metrics.BaseSourceImpl; 021import org.apache.hadoop.hbase.metrics.Interns; 022import org.apache.hadoop.metrics2.MetricHistogram; 023import org.apache.hadoop.metrics2.MetricsCollector; 024import org.apache.hadoop.metrics2.MetricsRecordBuilder; 025import org.apache.hadoop.metrics2.lib.MutableFastCounter; 026import org.apache.yetus.audience.InterfaceAudience; 027 028/** 029 * Hadoop2 implementation of MetricsRegionServerSource. Implements BaseSource through 030 * BaseSourceImpl, following the pattern 031 */ 032@InterfaceAudience.Private 033public class MetricsRegionServerSourceImpl extends BaseSourceImpl 034 implements MetricsRegionServerSource { 035 036 final MetricsRegionServerWrapper rsWrap; 037 private final MetricHistogram putHisto; 038 private final MetricHistogram putBatchHisto; 039 private final MetricHistogram deleteHisto; 040 private final MetricHistogram deleteBatchHisto; 041 private final MetricHistogram checkAndDeleteHisto; 042 private final MetricHistogram checkAndPutHisto; 043 private final MetricHistogram checkAndMutateHisto; 044 private final MetricHistogram getHisto; 045 private final MetricHistogram incrementHisto; 046 private final MetricHistogram appendHisto; 047 private final MetricHistogram replayHisto; 048 private final MetricHistogram scanSizeHisto; 049 private final MetricHistogram scanTimeHisto; 050 051 private final MutableFastCounter blockBytesScannedCount; 052 private final MetricHistogram checkAndMutateBlockBytesScanned; 053 private final MetricHistogram getBlockBytesScanned; 054 private final MetricHistogram incrementBlockBytesScanned; 055 private final MetricHistogram appendBlockBytesScanned; 056 private final MetricHistogram scanBlockBytesScanned; 057 058 private final MutableFastCounter slowPut; 059 private final MutableFastCounter slowDelete; 060 private final MutableFastCounter slowGet; 061 private final MutableFastCounter slowIncrement; 062 private final MutableFastCounter slowAppend; 063 064 // split related metrics 065 private final MutableFastCounter splitRequest; 066 private final MutableFastCounter splitSuccess; 067 private final MetricHistogram splitTimeHisto; 068 069 // flush related metrics 070 private final MetricHistogram flushTimeHisto; 071 private final MetricHistogram flushMemstoreSizeHisto; 072 private final MetricHistogram flushOutputSizeHisto; 073 private final MutableFastCounter flushedMemstoreBytes; 074 private final MutableFastCounter flushedOutputBytes; 075 076 // compaction related metrics 077 private final MetricHistogram compactionTimeHisto; 078 private final MetricHistogram compactionInputFileCountHisto; 079 private final MetricHistogram compactionInputSizeHisto; 080 private final MetricHistogram compactionOutputFileCountHisto; 081 private final MetricHistogram compactionOutputSizeHisto; 082 private final MutableFastCounter compactedInputBytes; 083 private final MutableFastCounter compactedOutputBytes; 084 085 private final MetricHistogram majorCompactionTimeHisto; 086 private final MetricHistogram majorCompactionInputFileCountHisto; 087 private final MetricHistogram majorCompactionInputSizeHisto; 088 private final MetricHistogram majorCompactionOutputFileCountHisto; 089 private final MetricHistogram majorCompactionOutputSizeHisto; 090 private final MutableFastCounter majorCompactedInputBytes; 091 private final MutableFastCounter majorCompactedOutputBytes; 092 093 // pause monitor metrics 094 private final MutableFastCounter infoPauseThresholdExceeded; 095 private final MutableFastCounter warnPauseThresholdExceeded; 096 private final MetricHistogram pausesWithGc; 097 private final MetricHistogram pausesWithoutGc; 098 099 private final MutableFastCounter scannerLeaseExpiredCount; 100 101 public MetricsRegionServerSourceImpl(MetricsRegionServerWrapper rsWrap) { 102 this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT, rsWrap); 103 } 104 105 public MetricsRegionServerSourceImpl(String metricsName, String metricsDescription, 106 String metricsContext, String metricsJmxContext, MetricsRegionServerWrapper rsWrap) { 107 super(metricsName, metricsDescription, metricsContext, metricsJmxContext); 108 this.rsWrap = rsWrap; 109 110 putHisto = getMetricsRegistry().newTimeHistogram(PUT_KEY); 111 putBatchHisto = getMetricsRegistry().newTimeHistogram(PUT_BATCH_KEY); 112 slowPut = getMetricsRegistry().newCounter(SLOW_PUT_KEY, SLOW_PUT_DESC, 0L); 113 114 deleteHisto = getMetricsRegistry().newTimeHistogram(DELETE_KEY); 115 slowDelete = getMetricsRegistry().newCounter(SLOW_DELETE_KEY, SLOW_DELETE_DESC, 0L); 116 117 deleteBatchHisto = getMetricsRegistry().newTimeHistogram(DELETE_BATCH_KEY); 118 checkAndDeleteHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_DELETE_KEY); 119 checkAndPutHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_PUT_KEY); 120 checkAndMutateHisto = getMetricsRegistry().newTimeHistogram(CHECK_AND_MUTATE_KEY); 121 122 getHisto = getMetricsRegistry().newTimeHistogram(GET_KEY); 123 slowGet = getMetricsRegistry().newCounter(SLOW_GET_KEY, SLOW_GET_DESC, 0L); 124 125 incrementHisto = getMetricsRegistry().newTimeHistogram(INCREMENT_KEY); 126 slowIncrement = getMetricsRegistry().newCounter(SLOW_INCREMENT_KEY, SLOW_INCREMENT_DESC, 0L); 127 128 appendHisto = getMetricsRegistry().newTimeHistogram(APPEND_KEY); 129 slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0L); 130 131 replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY); 132 scanSizeHisto = getMetricsRegistry().newSizeHistogram(SCAN_SIZE_KEY); 133 scanTimeHisto = getMetricsRegistry().newTimeHistogram(SCAN_TIME_KEY); 134 135 blockBytesScannedCount = 136 getMetricsRegistry().newCounter(BLOCK_BYTES_SCANNED_KEY, BLOCK_BYTES_SCANNED_DESC, 0L); 137 checkAndMutateBlockBytesScanned = 138 getMetricsRegistry().newSizeHistogram(CHECK_AND_MUTATE_BLOCK_BYTES_SCANNED_KEY); 139 getBlockBytesScanned = getMetricsRegistry().newSizeHistogram(GET_BLOCK_BYTES_SCANNED_KEY); 140 incrementBlockBytesScanned = 141 getMetricsRegistry().newSizeHistogram(INCREMENT_BLOCK_BYTES_SCANNED_KEY); 142 appendBlockBytesScanned = getMetricsRegistry().newSizeHistogram(APPEND_BLOCK_BYTES_SCANNED_KEY); 143 scanBlockBytesScanned = getMetricsRegistry().newSizeHistogram(SCAN_BLOCK_BYTES_SCANNED_KEY); 144 145 flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_TIME, FLUSH_TIME_DESC); 146 flushMemstoreSizeHisto = 147 getMetricsRegistry().newSizeHistogram(FLUSH_MEMSTORE_SIZE, FLUSH_MEMSTORE_SIZE_DESC); 148 flushOutputSizeHisto = 149 getMetricsRegistry().newSizeHistogram(FLUSH_OUTPUT_SIZE, FLUSH_OUTPUT_SIZE_DESC); 150 flushedOutputBytes = 151 getMetricsRegistry().newCounter(FLUSHED_OUTPUT_BYTES, FLUSHED_OUTPUT_BYTES_DESC, 0L); 152 flushedMemstoreBytes = 153 getMetricsRegistry().newCounter(FLUSHED_MEMSTORE_BYTES, FLUSHED_MEMSTORE_BYTES_DESC, 0L); 154 155 compactionTimeHisto = 156 getMetricsRegistry().newTimeHistogram(COMPACTION_TIME, COMPACTION_TIME_DESC); 157 compactionInputFileCountHisto = getMetricsRegistry().newHistogram(COMPACTION_INPUT_FILE_COUNT, 158 COMPACTION_INPUT_FILE_COUNT_DESC); 159 compactionInputSizeHisto = 160 getMetricsRegistry().newSizeHistogram(COMPACTION_INPUT_SIZE, COMPACTION_INPUT_SIZE_DESC); 161 compactionOutputFileCountHisto = getMetricsRegistry().newHistogram(COMPACTION_OUTPUT_FILE_COUNT, 162 COMPACTION_OUTPUT_FILE_COUNT_DESC); 163 compactionOutputSizeHisto = 164 getMetricsRegistry().newSizeHistogram(COMPACTION_OUTPUT_SIZE, COMPACTION_OUTPUT_SIZE_DESC); 165 compactedInputBytes = 166 getMetricsRegistry().newCounter(COMPACTED_INPUT_BYTES, COMPACTED_INPUT_BYTES_DESC, 0L); 167 compactedOutputBytes = 168 getMetricsRegistry().newCounter(COMPACTED_OUTPUT_BYTES, COMPACTED_OUTPUT_BYTES_DESC, 0L); 169 170 majorCompactionTimeHisto = 171 getMetricsRegistry().newTimeHistogram(MAJOR_COMPACTION_TIME, MAJOR_COMPACTION_TIME_DESC); 172 majorCompactionInputFileCountHisto = getMetricsRegistry() 173 .newHistogram(MAJOR_COMPACTION_INPUT_FILE_COUNT, MAJOR_COMPACTION_INPUT_FILE_COUNT_DESC); 174 majorCompactionInputSizeHisto = getMetricsRegistry() 175 .newSizeHistogram(MAJOR_COMPACTION_INPUT_SIZE, MAJOR_COMPACTION_INPUT_SIZE_DESC); 176 majorCompactionOutputFileCountHisto = getMetricsRegistry() 177 .newHistogram(MAJOR_COMPACTION_OUTPUT_FILE_COUNT, MAJOR_COMPACTION_OUTPUT_FILE_COUNT_DESC); 178 majorCompactionOutputSizeHisto = getMetricsRegistry() 179 .newSizeHistogram(MAJOR_COMPACTION_OUTPUT_SIZE, MAJOR_COMPACTION_OUTPUT_SIZE_DESC); 180 majorCompactedInputBytes = getMetricsRegistry().newCounter(MAJOR_COMPACTED_INPUT_BYTES, 181 MAJOR_COMPACTED_INPUT_BYTES_DESC, 0L); 182 majorCompactedOutputBytes = getMetricsRegistry().newCounter(MAJOR_COMPACTED_OUTPUT_BYTES, 183 MAJOR_COMPACTED_OUTPUT_BYTES_DESC, 0L); 184 185 splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY); 186 splitRequest = getMetricsRegistry().newCounter(SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0L); 187 splitSuccess = getMetricsRegistry().newCounter(SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0L); 188 189 // pause monitor metrics 190 infoPauseThresholdExceeded = 191 getMetricsRegistry().newCounter(INFO_THRESHOLD_COUNT_KEY, INFO_THRESHOLD_COUNT_DESC, 0L); 192 warnPauseThresholdExceeded = 193 getMetricsRegistry().newCounter(WARN_THRESHOLD_COUNT_KEY, WARN_THRESHOLD_COUNT_DESC, 0L); 194 pausesWithGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITH_GC_KEY); 195 pausesWithoutGc = getMetricsRegistry().newTimeHistogram(PAUSE_TIME_WITHOUT_GC_KEY); 196 197 scannerLeaseExpiredCount = getMetricsRegistry().newCounter(SCANNER_LEASE_EXPIRED_COUNT, 198 SCANNER_LEASE_EXPIRED_COUNT_DESC, 0L); 199 } 200 201 @Override 202 public void updatePut(long t) { 203 putHisto.add(t); 204 } 205 206 @Override 207 public void updateDelete(long t) { 208 deleteHisto.add(t); 209 } 210 211 @Override 212 public void updateGet(long t, long blockBytesScanned) { 213 getHisto.add(t); 214 if (blockBytesScanned > 0) { 215 blockBytesScannedCount.incr(blockBytesScanned); 216 getBlockBytesScanned.add(blockBytesScanned); 217 } 218 } 219 220 @Override 221 public void updateIncrement(long t, long blockBytesScanned) { 222 incrementHisto.add(t); 223 if (blockBytesScanned > 0) { 224 blockBytesScannedCount.incr(blockBytesScanned); 225 incrementBlockBytesScanned.add(blockBytesScanned); 226 } 227 } 228 229 @Override 230 public void updateAppend(long t, long blockBytesScanned) { 231 appendHisto.add(t); 232 if (blockBytesScanned > 0) { 233 blockBytesScannedCount.incr(blockBytesScanned); 234 appendBlockBytesScanned.add(blockBytesScanned); 235 } 236 } 237 238 @Override 239 public void updateReplay(long t) { 240 replayHisto.add(t); 241 } 242 243 @Override 244 public void updateScan(long time, long responseSize, long blockBytesScanned) { 245 scanTimeHisto.add(time); 246 scanSizeHisto.add(responseSize); 247 if (blockBytesScanned > 0) { 248 blockBytesScannedCount.incr(blockBytesScanned); 249 scanBlockBytesScanned.add(blockBytesScanned); 250 } 251 } 252 253 @Override 254 public void incrSlowPut() { 255 slowPut.incr(); 256 } 257 258 @Override 259 public void incrSlowDelete() { 260 slowDelete.incr(); 261 } 262 263 @Override 264 public void incrSlowGet() { 265 slowGet.incr(); 266 } 267 268 @Override 269 public void incrSlowIncrement() { 270 slowIncrement.incr(); 271 } 272 273 @Override 274 public void incrSlowAppend() { 275 slowAppend.incr(); 276 } 277 278 @Override 279 public void incrSplitRequest() { 280 splitRequest.incr(); 281 } 282 283 @Override 284 public void incrSplitSuccess() { 285 splitSuccess.incr(); 286 } 287 288 @Override 289 public void updateSplitTime(long t) { 290 splitTimeHisto.add(t); 291 } 292 293 @Override 294 public void updateFlushTime(long t) { 295 flushTimeHisto.add(t); 296 } 297 298 @Override 299 public void updateFlushMemStoreSize(long bytes) { 300 flushMemstoreSizeHisto.add(bytes); 301 flushedMemstoreBytes.incr(bytes); 302 } 303 304 @Override 305 public void updateFlushOutputSize(long bytes) { 306 flushOutputSizeHisto.add(bytes); 307 flushedOutputBytes.incr(bytes); 308 } 309 310 @Override 311 public void updateCompactionTime(boolean isMajor, long t) { 312 compactionTimeHisto.add(t); 313 if (isMajor) { 314 majorCompactionTimeHisto.add(t); 315 } 316 } 317 318 @Override 319 public void updateCompactionInputFileCount(boolean isMajor, long c) { 320 compactionInputFileCountHisto.add(c); 321 if (isMajor) { 322 majorCompactionInputFileCountHisto.add(c); 323 } 324 } 325 326 @Override 327 public void updateCompactionInputSize(boolean isMajor, long bytes) { 328 compactionInputSizeHisto.add(bytes); 329 compactedInputBytes.incr(bytes); 330 if (isMajor) { 331 majorCompactionInputSizeHisto.add(bytes); 332 majorCompactedInputBytes.incr(bytes); 333 } 334 } 335 336 @Override 337 public void updateCompactionOutputFileCount(boolean isMajor, long c) { 338 compactionOutputFileCountHisto.add(c); 339 if (isMajor) { 340 majorCompactionOutputFileCountHisto.add(c); 341 } 342 } 343 344 @Override 345 public void updateCompactionOutputSize(boolean isMajor, long bytes) { 346 compactionOutputSizeHisto.add(bytes); 347 compactedOutputBytes.incr(bytes); 348 if (isMajor) { 349 majorCompactionOutputSizeHisto.add(bytes); 350 majorCompactedOutputBytes.incr(bytes); 351 } 352 } 353 354 @Override 355 public void incrScannerLeaseExpired() { 356 scannerLeaseExpiredCount.incr(); 357 } 358 359 /** 360 * Yes this is a get function that doesn't return anything. Thanks Hadoop for breaking all 361 * expectations of java programmers. Instead of returning anything Hadoop metrics expects 362 * getMetrics to push the metrics into the collector. 363 * @param metricsCollector Collector to accept metrics 364 * @param all push all or only changed? 365 */ 366 @Override 367 public void getMetrics(MetricsCollector metricsCollector, boolean all) { 368 MetricsRecordBuilder mrb = metricsCollector.addRecord(metricsName); 369 370 // rsWrap can be null because this function is called inside of init. 371 if (rsWrap != null) { 372 MetricsRecordBuilder metricsRecordBuilder = addGaugesToMetricsRecordBuilder(mrb); 373 metricsRecordBuilder 374 .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC), 375 rsWrap.getTotalRequestCount()) 376 .addCounter( 377 Interns.info(TOTAL_ROW_ACTION_REQUEST_COUNT, TOTAL_ROW_ACTION_REQUEST_COUNT_DESC), 378 rsWrap.getTotalRowActionRequestCount()) 379 .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC), 380 rsWrap.getReadRequestsCount()) 381 .addCounter(Interns.info(CP_REQUEST_COUNT, CP_REQUEST_COUNT_DESC), 382 rsWrap.getCpRequestsCount()) 383 .addCounter(Interns.info(FILTERED_READ_REQUEST_COUNT, FILTERED_READ_REQUEST_COUNT_DESC), 384 rsWrap.getFilteredReadRequestsCount()) 385 .addCounter(Interns.info(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC), 386 rsWrap.getWriteRequestsCount()) 387 .addCounter(Interns.info(RPC_GET_REQUEST_COUNT, RPC_GET_REQUEST_COUNT_DESC), 388 rsWrap.getRpcGetRequestsCount()) 389 .addCounter(Interns.info(RPC_FULL_SCAN_REQUEST_COUNT, RPC_FULL_SCAN_REQUEST_COUNT_DESC), 390 rsWrap.getRpcFullScanRequestsCount()) 391 .addCounter(Interns.info(RPC_SCAN_REQUEST_COUNT, RPC_SCAN_REQUEST_COUNT_DESC), 392 rsWrap.getRpcScanRequestsCount()) 393 .addCounter(Interns.info(RPC_MULTI_REQUEST_COUNT, RPC_MULTI_REQUEST_COUNT_DESC), 394 rsWrap.getRpcMultiRequestsCount()) 395 .addCounter(Interns.info(RPC_MUTATE_REQUEST_COUNT, RPC_MUTATE_REQUEST_COUNT_DESC), 396 rsWrap.getRpcMutateRequestsCount()) 397 .addCounter(Interns.info(CHECK_MUTATE_FAILED_COUNT, CHECK_MUTATE_FAILED_COUNT_DESC), 398 rsWrap.getCheckAndMutateChecksFailed()) 399 .addCounter(Interns.info(CHECK_MUTATE_PASSED_COUNT, CHECK_MUTATE_PASSED_COUNT_DESC), 400 rsWrap.getCheckAndMutateChecksPassed()) 401 .addCounter(Interns.info(BLOCK_CACHE_HIT_COUNT, BLOCK_CACHE_HIT_COUNT_DESC), 402 rsWrap.getBlockCacheHitCount()) 403 .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_HIT_COUNT, BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC), 404 rsWrap.getBlockCachePrimaryHitCount()) 405 .addCounter(Interns.info(BLOCK_CACHE_HIT_CACHING_COUNT, BLOCK_CACHE_HIT_CACHING_COUNT_DESC), 406 rsWrap.getBlockCacheHitCachingCount()) 407 .addCounter(Interns.info(BLOCK_CACHE_MISS_COUNT, BLOCK_COUNT_MISS_COUNT_DESC), 408 rsWrap.getBlockCacheMissCount()) 409 .addCounter( 410 Interns.info(BLOCK_CACHE_PRIMARY_MISS_COUNT, BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC), 411 rsWrap.getBlockCachePrimaryMissCount()) 412 .addCounter( 413 Interns.info(BLOCK_CACHE_MISS_CACHING_COUNT, BLOCK_COUNT_MISS_CACHING_COUNT_DESC), 414 rsWrap.getBlockCacheMissCachingCount()) 415 .addCounter(Interns.info(BLOCK_CACHE_EVICTION_COUNT, BLOCK_CACHE_EVICTION_COUNT_DESC), 416 rsWrap.getBlockCacheEvictedCount()) 417 .addCounter( 418 Interns.info(BLOCK_CACHE_PRIMARY_EVICTION_COUNT, BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC), 419 rsWrap.getBlockCachePrimaryEvictedCount()) 420 .addCounter( 421 Interns.info(BLOCK_CACHE_FAILED_INSERTION_COUNT, BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC), 422 rsWrap.getBlockCacheFailedInsertions()) 423 .addCounter(Interns.info(BLOCK_CACHE_DATA_MISS_COUNT, ""), rsWrap.getDataMissCount()) 424 .addCounter(Interns.info(BLOCK_CACHE_LEAF_INDEX_MISS_COUNT, ""), 425 rsWrap.getLeafIndexMissCount()) 426 .addCounter(Interns.info(BLOCK_CACHE_BLOOM_CHUNK_MISS_COUNT, ""), 427 rsWrap.getBloomChunkMissCount()) 428 .addCounter(Interns.info(BLOCK_CACHE_META_MISS_COUNT, ""), rsWrap.getMetaMissCount()) 429 .addCounter(Interns.info(BLOCK_CACHE_ROOT_INDEX_MISS_COUNT, ""), 430 rsWrap.getRootIndexMissCount()) 431 .addCounter(Interns.info(BLOCK_CACHE_INTERMEDIATE_INDEX_MISS_COUNT, ""), 432 rsWrap.getIntermediateIndexMissCount()) 433 .addCounter(Interns.info(BLOCK_CACHE_FILE_INFO_MISS_COUNT, ""), 434 rsWrap.getFileInfoMissCount()) 435 .addCounter(Interns.info(BLOCK_CACHE_GENERAL_BLOOM_META_MISS_COUNT, ""), 436 rsWrap.getGeneralBloomMetaMissCount()) 437 .addCounter(Interns.info(BLOCK_CACHE_DELETE_FAMILY_BLOOM_MISS_COUNT, ""), 438 rsWrap.getDeleteFamilyBloomMissCount()) 439 .addCounter(Interns.info(BLOCK_CACHE_TRAILER_MISS_COUNT, ""), rsWrap.getTrailerMissCount()) 440 .addCounter(Interns.info(BLOCK_CACHE_DATA_HIT_COUNT, ""), rsWrap.getDataHitCount()) 441 .addCounter(Interns.info(BLOCK_CACHE_LEAF_INDEX_HIT_COUNT, ""), 442 rsWrap.getLeafIndexHitCount()) 443 .addCounter(Interns.info(BLOCK_CACHE_BLOOM_CHUNK_HIT_COUNT, ""), 444 rsWrap.getBloomChunkHitCount()) 445 .addCounter(Interns.info(BLOCK_CACHE_META_HIT_COUNT, ""), rsWrap.getMetaHitCount()) 446 .addCounter(Interns.info(BLOCK_CACHE_ROOT_INDEX_HIT_COUNT, ""), 447 rsWrap.getRootIndexHitCount()) 448 .addCounter(Interns.info(BLOCK_CACHE_INTERMEDIATE_INDEX_HIT_COUNT, ""), 449 rsWrap.getIntermediateIndexHitCount()) 450 .addCounter(Interns.info(BLOCK_CACHE_FILE_INFO_HIT_COUNT, ""), rsWrap.getFileInfoHitCount()) 451 .addCounter(Interns.info(BLOCK_CACHE_GENERAL_BLOOM_META_HIT_COUNT, ""), 452 rsWrap.getGeneralBloomMetaHitCount()) 453 .addCounter(Interns.info(BLOCK_CACHE_DELETE_FAMILY_BLOOM_HIT_COUNT, ""), 454 rsWrap.getDeleteFamilyBloomHitCount()) 455 .addCounter(Interns.info(BLOCK_CACHE_TRAILER_HIT_COUNT, ""), rsWrap.getTrailerHitCount()) 456 .addCounter(Interns.info(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC), 457 rsWrap.getUpdatesBlockedTime()) 458 .addCounter(Interns.info(FLUSHED_CELLS, FLUSHED_CELLS_DESC), rsWrap.getFlushedCellsCount()) 459 .addCounter(Interns.info(COMPACTED_CELLS, COMPACTED_CELLS_DESC), 460 rsWrap.getCompactedCellsCount()) 461 .addCounter(Interns.info(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC), 462 rsWrap.getMajorCompactedCellsCount()) 463 .addCounter(Interns.info(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC), 464 rsWrap.getFlushedCellsSize()) 465 .addCounter(Interns.info(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC), 466 rsWrap.getCompactedCellsSize()) 467 .addCounter(Interns.info(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC), 468 rsWrap.getMajorCompactedCellsSize()) 469 .addCounter( 470 Interns.info(CELLS_COUNT_COMPACTED_FROM_MOB, CELLS_COUNT_COMPACTED_FROM_MOB_DESC), 471 rsWrap.getCellsCountCompactedFromMob()) 472 .addCounter(Interns.info(CELLS_COUNT_COMPACTED_TO_MOB, CELLS_COUNT_COMPACTED_TO_MOB_DESC), 473 rsWrap.getCellsCountCompactedToMob()) 474 .addCounter(Interns.info(CELLS_SIZE_COMPACTED_FROM_MOB, CELLS_SIZE_COMPACTED_FROM_MOB_DESC), 475 rsWrap.getCellsSizeCompactedFromMob()) 476 .addCounter(Interns.info(CELLS_SIZE_COMPACTED_TO_MOB, CELLS_SIZE_COMPACTED_TO_MOB_DESC), 477 rsWrap.getCellsSizeCompactedToMob()) 478 .addCounter(Interns.info(MOB_FLUSH_COUNT, MOB_FLUSH_COUNT_DESC), rsWrap.getMobFlushCount()) 479 .addCounter(Interns.info(MOB_FLUSHED_CELLS_COUNT, MOB_FLUSHED_CELLS_COUNT_DESC), 480 rsWrap.getMobFlushedCellsCount()) 481 .addCounter(Interns.info(MOB_FLUSHED_CELLS_SIZE, MOB_FLUSHED_CELLS_SIZE_DESC), 482 rsWrap.getMobFlushedCellsSize()) 483 .addCounter(Interns.info(MOB_SCAN_CELLS_COUNT, MOB_SCAN_CELLS_COUNT_DESC), 484 rsWrap.getMobScanCellsCount()) 485 .addCounter(Interns.info(MOB_SCAN_CELLS_SIZE, MOB_SCAN_CELLS_SIZE_DESC), 486 rsWrap.getMobScanCellsSize()) 487 .addCounter(Interns.info(MOB_FILE_CACHE_ACCESS_COUNT, MOB_FILE_CACHE_ACCESS_COUNT_DESC), 488 rsWrap.getMobFileCacheAccessCount()) 489 .addCounter(Interns.info(MOB_FILE_CACHE_MISS_COUNT, MOB_FILE_CACHE_MISS_COUNT_DESC), 490 rsWrap.getMobFileCacheMissCount()) 491 .addCounter(Interns.info(MOB_FILE_CACHE_EVICTED_COUNT, MOB_FILE_CACHE_EVICTED_COUNT_DESC), 492 rsWrap.getMobFileCacheEvictedCount()) 493 .addCounter(Interns.info(HEDGED_READS, HEDGED_READS_DESC), rsWrap.getHedgedReadOps()) 494 .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC), 495 rsWrap.getHedgedReadWins()) 496 .addCounter(Interns.info(HEDGED_READ_IN_CUR_THREAD, HEDGED_READ_IN_CUR_THREAD_DESC), 497 rsWrap.getHedgedReadOpsInCurThread()) 498 .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC), 499 rsWrap.getBlockedRequestsCount()) 500 .addCounter(Interns.info(EXCLUDE_DATA_NODES_COUNT, EXCLUDE_DATA_NODES_COUNT_DESC), 501 rsWrap.getWALExcludeDNs().size()) 502 .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC), 503 rsWrap.getZookeeperQuorum()) 504 .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName()) 505 .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), rsWrap.getClusterId()); 506 if (!rsWrap.getWALExcludeDNs().isEmpty()) { 507 metricsRecordBuilder.tag( 508 Interns.info(EXCLUDE_DATA_NODES_DETAILS, EXCLUDE_DATA_NODES_DETAILS_DESC), 509 rsWrap.getWALExcludeDNs().toString()); 510 } 511 } 512 513 metricsRegistry.snapshot(mrb, all); 514 515 // source is registered in supers constructor, sometimes called before the whole initialization. 516 if (metricsAdapter != null) { 517 // snapshot MetricRegistry as well 518 metricsAdapter.snapshotAllMetrics(registry, mrb); 519 } 520 } 521 522 private MetricsRecordBuilder addGaugesToMetricsRecordBuilder(MetricsRecordBuilder mrb) { 523 return mrb.addGauge(Interns.info(REGION_COUNT, REGION_COUNT_DESC), rsWrap.getNumOnlineRegions()) 524 .addGauge(Interns.info(STORE_COUNT, STORE_COUNT_DESC), rsWrap.getNumStores()) 525 .addGauge(Interns.info(WALFILE_COUNT, WALFILE_COUNT_DESC), rsWrap.getNumWALFiles()) 526 .addGauge(Interns.info(WALFILE_SIZE, WALFILE_SIZE_DESC), rsWrap.getWALFileSize()) 527 .addGauge(Interns.info(STOREFILE_COUNT, STOREFILE_COUNT_DESC), rsWrap.getNumStoreFiles()) 528 .addGauge(Interns.info(MAX_STOREFILE_COUNT, MAX_STOREFILE_COUNT_DESC), 529 rsWrap.getMaxStoreFiles()) 530 .addGauge(Interns.info(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC), rsWrap.getMemStoreSize()) 531 .addGauge(Interns.info(MEMSTORE_HEAP_SIZE, MEMSTORE_HEAP_SIZE_DESC), 532 rsWrap.getOnHeapMemStoreSize()) 533 .addGauge(Interns.info(MEMSTORE_OFFHEAP_SIZE, MEMSTORE_OFFHEAP_SIZE_DESC), 534 rsWrap.getOffHeapMemStoreSize()) 535 .addGauge(Interns.info(STOREFILE_SIZE, STOREFILE_SIZE_DESC), rsWrap.getStoreFileSize()) 536 .addGauge(Interns.info(STOREFILE_SIZE_GROWTH_RATE, STOREFILE_SIZE_GROWTH_RATE_DESC), 537 rsWrap.getStoreFileSizeGrowthRate()) 538 .addGauge(Interns.info(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC), 539 rsWrap.getMaxStoreFileAge()) 540 .addGauge(Interns.info(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC), 541 rsWrap.getMinStoreFileAge()) 542 .addGauge(Interns.info(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC), 543 rsWrap.getAvgStoreFileAge()) 544 .addGauge(Interns.info(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC), 545 rsWrap.getNumReferenceFiles()) 546 .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC), rsWrap.getStartCode()) 547 .addGauge(Interns.info(AVERAGE_REGION_SIZE, AVERAGE_REGION_SIZE_DESC), 548 rsWrap.getAverageRegionSize()) 549 .addGauge(Interns.info(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC), 550 rsWrap.getStoreFileIndexSize()) 551 .addGauge(Interns.info(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC), 552 rsWrap.getTotalStaticIndexSize()) 553 .addGauge(Interns.info(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC), 554 rsWrap.getTotalStaticBloomSize()) 555 .addCounter(Interns.info(BLOOM_FILTER_REQUESTS_COUNT, BLOOM_FILTER_REQUESTS_COUNT_DESC), 556 rsWrap.getBloomFilterRequestsCount()) 557 .addCounter( 558 Interns.info(BLOOM_FILTER_NEGATIVE_RESULTS_COUNT, BLOOM_FILTER_NEGATIVE_RESULTS_COUNT_DESC), 559 rsWrap.getBloomFilterNegativeResultsCount()) 560 .addCounter(Interns.info(BLOOM_FILTER_ELIGIBLE_REQUESTS_COUNT, 561 BLOOM_FILTER_ELIGIBLE_REQUESTS_COUNT_DESC), rsWrap.getBloomFilterEligibleRequestsCount()) 562 .addGauge(Interns.info(NUMBER_OF_MUTATIONS_WITHOUT_WAL, NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC), 563 rsWrap.getNumMutationsWithoutWAL()) 564 .addGauge(Interns.info(DATA_SIZE_WITHOUT_WAL, DATA_SIZE_WITHOUT_WAL_DESC), 565 rsWrap.getDataInMemoryWithoutWAL()) 566 .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC), 567 rsWrap.getPercentFileLocal()) 568 .addGauge( 569 Interns.info(PERCENT_FILES_LOCAL_PRIMARY_REGIONS, PERCENT_FILES_LOCAL_PRIMARY_REGIONS_DESC), 570 rsWrap.getPercentFileLocalPrimaryRegions()) 571 .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS, 572 PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC), rsWrap.getPercentFileLocalSecondaryRegions()) 573 .addGauge(Interns.info(TOTAL_BYTES_READ, TOTAL_BYTES_READ_DESC), rsWrap.getTotalBytesRead()) 574 .addGauge(Interns.info(LOCAL_BYTES_READ, LOCAL_BYTES_READ_DESC), rsWrap.getLocalBytesRead()) 575 .addGauge(Interns.info(SHORTCIRCUIT_BYTES_READ, SHORTCIRCUIT_BYTES_READ_DESC), 576 rsWrap.getShortCircuitBytesRead()) 577 .addGauge(Interns.info(ZEROCOPY_BYTES_READ, ZEROCOPY_BYTES_READ_DESC), 578 rsWrap.getZeroCopyBytesRead()) 579 .addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC), 580 rsWrap.getSplitQueueSize()) 581 .addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC), 582 rsWrap.getCompactionQueueSize()) 583 .addGauge(Interns.info(SMALL_COMPACTION_QUEUE_LENGTH, SMALL_COMPACTION_QUEUE_LENGTH_DESC), 584 rsWrap.getSmallCompactionQueueSize()) 585 .addGauge(Interns.info(LARGE_COMPACTION_QUEUE_LENGTH, LARGE_COMPACTION_QUEUE_LENGTH_DESC), 586 rsWrap.getLargeCompactionQueueSize()) 587 .addGauge(Interns.info(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC), 588 rsWrap.getFlushQueueSize()) 589 .addGauge(Interns.info(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC), 590 rsWrap.getBlockCacheFreeSize()) 591 .addGauge(Interns.info(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC), 592 rsWrap.getBlockCacheCount()) 593 .addGauge(Interns.info(BLOCK_CACHE_DATA_BLOCK_COUNT, BLOCK_CACHE_DATA_BLOCK_COUNT_DESC), 594 rsWrap.getBlockCacheDataBlockCount()) 595 .addGauge(Interns.info(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC), rsWrap.getBlockCacheSize()) 596 .addGauge(Interns.info(BLOCK_CACHE_HIT_PERCENT, BLOCK_CACHE_HIT_PERCENT_DESC), 597 rsWrap.getBlockCacheHitPercent()) 598 .addGauge(Interns.info(BLOCK_CACHE_EXPRESS_HIT_PERCENT, BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC), 599 rsWrap.getBlockCacheHitCachingPercent()) 600 .addGauge(Interns.info(L1_CACHE_SIZE, L1_CACHE_SIZE_DESC), rsWrap.getL1CacheSize()) 601 .addGauge(Interns.info(L1_CACHE_FREE_SIZE, L1_CACHE_FREE_SIZE_DESC), 602 rsWrap.getL1CacheFreeSize()) 603 .addGauge(Interns.info(L1_CACHE_COUNT, L1_CACHE_COUNT_DESC), rsWrap.getL1CacheCount()) 604 .addCounter(Interns.info(L1_CACHE_EVICTION_COUNT, L1_CACHE_EVICTION_COUNT_DESC), 605 rsWrap.getL1CacheEvictedCount()) 606 .addGauge(Interns.info(L1_CACHE_HIT_COUNT, L1_CACHE_HIT_COUNT_DESC), 607 rsWrap.getL1CacheHitCount()) 608 .addGauge(Interns.info(L1_CACHE_HIT_CAGHING_COUNT, L1_CACHE_HIT_CAGHING_COUNT_DESC), 609 rsWrap.getL1CacheHitCachingCount()) 610 .addGauge(Interns.info(L1_CACHE_MISS_COUNT, L1_CACHE_MISS_COUNT_DESC), 611 rsWrap.getL1CacheMissCount()) 612 .addGauge(Interns.info(L1_CACHE_MISS_CACHING_COUNT, L1_CACHE_MISS_CACHING_COUNT_DESC), 613 rsWrap.getL1CacheMissCachingCount()) 614 .addGauge(Interns.info(L1_CACHE_HIT_RATIO, L1_CACHE_HIT_RATIO_DESC), 615 rsWrap.getL1CacheHitRatio()) 616 .addGauge(Interns.info(L1_CACHE_HIT_CACHING_RATIO, L1_CACHE_HIT_CACHING_RATIO_DESC), 617 rsWrap.getL1CacheHitCachingRatio()) 618 .addGauge(Interns.info(L1_CACHE_MISS_RATIO, L1_CACHE_MISS_RATIO_DESC), 619 rsWrap.getL1CacheMissRatio()) 620 .addGauge(Interns.info(L1_CACHE_MISS_CACHING_RATIO, L1_CACHE_MISS_CACHING_RATIO_DESC), 621 rsWrap.getL1CacheMissCachingRatio()) 622 .addGauge(Interns.info(L2_CACHE_SIZE, L2_CACHE_SIZE_DESC), rsWrap.getL2CacheSize()) 623 .addGauge(Interns.info(L2_CACHE_FREE_SIZE, L2_CACHE_FREE_SIZE_DESC), 624 rsWrap.getL2CacheFreeSize()) 625 .addGauge(Interns.info(L2_CACHE_COUNT, L2_CACHE_COUNT_DESC), rsWrap.getL2CacheCount()) 626 .addCounter(Interns.info(L2_CACHE_EVICTION_COUNT, L2_CACHE_EVICTION_COUNT_DESC), 627 rsWrap.getL2CacheEvictedCount()) 628 .addGauge(Interns.info(L2_CACHE_HIT_COUNT, L2_CACHE_HIT_COUNT_DESC), 629 rsWrap.getL2CacheHitCount()) 630 .addGauge(Interns.info(L2_CACHE_HIT_CACHING_COUNT, L2_CACHE_HIT_CACHING_COUNT_DESC), 631 rsWrap.getL2CacheHitCachingCount()) 632 .addGauge(Interns.info(L2_CACHE_MISS_COUNT, L2_CACHE_MISS_COUNT_DESC), 633 rsWrap.getL2CacheMissCount()) 634 .addGauge(Interns.info(L2_CACHE_MISS_CACHING_COUNT, L2_CACHE_MISS_CACHING_COUNT_DESC), 635 rsWrap.getL2CacheMissCachingCount()) 636 .addGauge(Interns.info(L2_CACHE_HIT_RATIO, L2_CACHE_HIT_RATIO_DESC), 637 rsWrap.getL2CacheHitRatio()) 638 .addGauge(Interns.info(L2_CACHE_HIT_CACHING_RATIO, L2_CACHE_HIT_CACHING_RATIO_DESC), 639 rsWrap.getL2CacheHitCachingRatio()) 640 .addGauge(Interns.info(L2_CACHE_MISS_RATIO, L2_CACHE_MISS_RATIO_DESC), 641 rsWrap.getL2CacheMissRatio()) 642 .addGauge(Interns.info(L2_CACHE_MISS_CACHING_RATIO, L2_CACHE_MISS_CACHING_RATIO_DESC), 643 rsWrap.getL2CacheMissCachingRatio()) 644 .addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC), 645 rsWrap.getMobFileCacheCount()) 646 .addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC), 647 rsWrap.getMobFileCacheHitPercent()) 648 .addGauge(Interns.info(READ_REQUEST_RATE_PER_SECOND, READ_REQUEST_RATE_DESC), 649 rsWrap.getReadRequestsRatePerSecond()) 650 .addGauge(Interns.info(WRITE_REQUEST_RATE_PER_SECOND, WRITE_REQUEST_RATE_DESC), 651 rsWrap.getWriteRequestsRatePerSecond()) 652 .addGauge( 653 Interns.info(BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_BYTES, 654 BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_BYTES_DESC), 655 rsWrap.getByteBuffAllocatorHeapAllocationBytes()) 656 .addGauge( 657 Interns.info(BYTE_BUFF_ALLOCATOR_POOL_ALLOCATION_BYTES, 658 BYTE_BUFF_ALLOCATOR_POOL_ALLOCATION_BYTES_DESC), 659 rsWrap.getByteBuffAllocatorPoolAllocationBytes()) 660 .addGauge( 661 Interns.info(BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_RATIO, 662 BYTE_BUFF_ALLOCATOR_HEAP_ALLOCATION_RATIO_DESC), 663 rsWrap.getByteBuffAllocatorHeapAllocRatio()) 664 .addGauge( 665 Interns.info(BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT, 666 BYTE_BUFF_ALLOCATOR_TOTAL_BUFFER_COUNT_DESC), 667 rsWrap.getByteBuffAllocatorTotalBufferCount()) 668 .addGauge(Interns.info(BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT, 669 BYTE_BUFF_ALLOCATOR_USED_BUFFER_COUNT_DESC), rsWrap.getByteBuffAllocatorUsedBufferCount()) 670 .addGauge(Interns.info(ACTIVE_SCANNERS, ACTIVE_SCANNERS_DESC), rsWrap.getActiveScanners()); 671 } 672 673 @Override 674 public void incInfoThresholdExceeded(int count) { 675 infoPauseThresholdExceeded.incr(count); 676 } 677 678 @Override 679 public void incWarnThresholdExceeded(int count) { 680 warnPauseThresholdExceeded.incr(count); 681 } 682 683 @Override 684 public void updatePauseTimeWithGc(long t) { 685 pausesWithGc.add(t); 686 } 687 688 @Override 689 public void updatePauseTimeWithoutGc(long t) { 690 pausesWithoutGc.add(t); 691 } 692 693 @Override 694 public void updateDeleteBatch(long t) { 695 deleteBatchHisto.add(t); 696 } 697 698 @Override 699 public void updateCheckAndDelete(long t) { 700 checkAndDeleteHisto.add(t); 701 } 702 703 @Override 704 public void updateCheckAndPut(long t) { 705 checkAndPutHisto.add(t); 706 } 707 708 @Override 709 public void updateCheckAndMutate(long time, long blockBytesScanned) { 710 checkAndMutateHisto.add(time); 711 if (blockBytesScanned > 0) { 712 blockBytesScannedCount.incr(blockBytesScanned); 713 checkAndMutateBlockBytesScanned.add(blockBytesScanned); 714 } 715 } 716 717 @Override 718 public void updatePutBatch(long t) { 719 putBatchHisto.add(t); 720 } 721}