모니터링
모니터링 (Monitoring)
Cassandra의 메트릭은 Dropwizard Metrics 라이브러리로 관리됩니다. 메트릭은 JMX, 가상 테이블을 통해 조회하거나, 다양한 내장 리포터 또는 서드파티 리포터 플러그인을 사용해 외부 모니터링 시스템으로 밀어낼 수 있어요.
메트릭은 단일 노드에 대해 수집됩니다. 그것들을 집계하는 것은 운영자가 외부 모니터링 시스템을 사용해 처리해야 합니다.
출처: 문서
본문
메트릭 유형 (Metric Types)
Cassandra가 보고하는 모든 메트릭은 다음 유형 중 하나에 속합니다.
Gauge 값의 순간 측정.
Counter AtomicLong 인스턴스에 대한 gauge. 보통 마지막 호출 이후의 변화를 모니터링해 정상에 비해 큰 증가가 있는지 확인하는 데 소비됩니다.
Histogram 데이터 스트림에서 값의 통계적 분포를 측정합니다. 최소, 최대, 평균 등에 더해 중앙값, 75번째, 90번째, 95번째, 98번째, 99번째, 99.9번째 백분위수도 측정합니다.
Timer 특정 코드가 호출되는 비율과 그 지속 시간의 히스토그램을 모두 측정합니다.
Latency 타이머(마이크로초 단위 지연 시간 추적)와 시작 이후 누적된 총 지연 시간을 추적하는 카운터를 갖춘 특수 유형입니다. 전자는 마지막 검사 이후의 총 지연 시간 변화를 추적하는 경우 유용해요. 이 유형의 각 메트릭 이름에는 'Latency'와 'TotalLatency'가 추가됩니다.
Meter 평균 처리량과 1분, 5분, 15분 지수 가중 평균 처리량을 측정하는 미터 메트릭.
테이블 메트릭 (Table Metrics)
Cassandra의 각 테이블은 그 상태와 성능을 추적하는 메트릭을 가집니다.
메트릭 이름은 모두 특정 키스페이스와 테이블 이름으로 끝나요.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Table.<MetricName>.<Keyspace>.<Table>
JMX MBean
org.apache.cassandra.metrics:type=Table keyspace=<Keyspace> scope=<Table> name=<MetricName>
keyspace가 없는 'all'이라는 특수 테이블이 있습니다. 이는 노드의 모든 테이블과 키스페이스에 걸친 메트릭의 집계를 나타냅니다.
| 이름 | 타입 | 설명 |
|---|---|---|
| MemtableOnHeapSize | Gauge |
온힙에 저장된 멤테이블의 총 데이터 양(컬럼 관련 오버헤드와 덮어쓴 파티션 포함) |
| MemtableOffHeapSize | Gauge |
오프힙에 저장된 멤테이블의 총 데이터 양(컬럼 관련 오버헤드와 덮어쓴 파티션 포함) |
| MemtableLiveDataSize | Gauge |
멤테이블에 저장된 총 라이브 데이터 양(데이터 구조 오버헤드 제외) |
| AllMemtablesOnHeapSize | Gauge |
온힙에 저장된 멤테이블(2i와 보류 중인 플러시 멤테이블 포함)의 총 데이터 양 |
| AllMemtablesOffHeapSize | Gauge |
오프힙에 저장된 멤테이블(2i와 보류 중인 플러시 멤테이블 포함)의 총 데이터 양 |
| AllMemtablesLiveDataSize | Gauge |
멤테이블(2i와 보류 중인 플러시 멤테이블 포함)에 저장된 총 라이브 데이터 양, 데이터 구조 오버헤드 제외 |
| MemtableColumnsCount | Gauge |
멤테이블에 존재하는 총 컬럼 수 |
| MemtableSwitchCount | Counter | 플러시로 멤테이블이 전환된 횟수 |
| CompressionRatio | Gauge |
모든 SSTable의 현재 압축 비율 |
| EstimatedPartitionSizeHistogram | Gauge<long[]> | 추정 파티션 크기(바이트)의 히스토그램 |
| EstimatedPartitionCount | Gauge |
테이블의 대략적인 키 수 |
| EstimatedColumnCountHistogram | Gauge<long[]> | 추정 컬럼 수의 히스토그램 |
| SSTablesPerReadHistogram | Histogram | 단일 파티션 읽기당 접근한 sstable 데이터 파일 수의 히스토그램. Bloom Filter, min-max key, 파티션 인덱스 조회로 건너뛴 SSTable은 포함되지 않음 |
| ReadLatency | Latency | 이 테이블의 로컬 읽기 지연 시간 |
| RangeLatency | Latency | 이 테이블의 로컬 범위 스캔 지연 시간 |
| WriteLatency | Latency | 이 테이블의 로컬 쓰기 지연 시간 |
| CoordinatorReadLatency | Timer | 이 테이블의 조정자 읽기 지연 시간 |
| CoordinatorWriteLatency | Timer | 이 테이블의 조정자 쓰기 지연 시간 |
| CoordinatorScanLatency | Timer | 이 테이블의 조정자 범위 스캔 지연 시간 |
| PendingFlushes | Counter | 이 테이블에 대해 보류 중인 플러시 작업의 추정 수 |
| BytesFlushed | Counter | 서버 [재]시작 이후 플러시된 총 바이트 수 |
| CompactionBytesWritten | Counter | 서버 [재]시작 이후 컴팩션이 쓴 총 바이트 수 |
| PendingCompactions | Gauge |
이 테이블의 보류 중인 컴팩션 수 추정치 |
| LiveSSTableCount | Gauge |
이 테이블의 디스크 SSTable 수 |
| LiveDiskSpaceUsed | Counter | 이 테이블에 속한 SSTable이 사용하는 디스크 공간(바이트) |
| TotalDiskSpaceUsed | Counter | GC되기를 기다리는 사용되지 않은 것 포함, 이 테이블에 속한 SSTable이 사용하는 총 디스크 공간 |
| MaxSSTableSize | Gauge |
이 테이블 SSTable의 최대 크기 — 해당 SSTable의 모든 컴포넌트 물리적 디스크 크기(바이트). 디스크에 SSTable이 없으면 0 |
| MaxSSTableDuration | Gauge |
이 테이블 SSTable의 최대 기간(밀리초), maxTimestamp - minTimestamp로 계산. min 또는 max 타임스탬프가 Long.MAX_VALUE이면 0 |
| MinPartitionSize | Gauge |
가장 작은 컴팩션된 파티션의 크기(바이트) |
| MaxPartitionSize | Gauge |
가장 큰 컴팩션된 파티션의 크기(바이트) |
| MeanPartitionSize | Gauge |
평균 컴팩션된 파티션의 크기(바이트) |
| BloomFilterFalsePositives | Gauge |
테이블 bloom filter의 위양성 수 |
| BloomFilterFalseRatio | Gauge |
테이블 bloom filter의 위양성 비율 |
| BloomFilterDiskSpaceUsed | Gauge |
bloom filter가 사용하는 디스크 공간(바이트) |
| BloomFilterOffHeapMemoryUsed | Gauge |
bloom filter가 사용하는 오프힙 메모리 |
| IndexSummaryOffHeapMemoryUsed | Gauge |
인덱스 요약이 사용하는 오프힙 메모리 |
| CompressionMetadataOffHeapMemoryUsed | Gauge |
압축 메타데이터가 사용하는 오프힙 메모리 |
| KeyCacheHitRate | Gauge |
이 테이블의 키 캐시 적중률 |
| TombstoneScannedHistogram | Histogram | 이 테이블의 쿼리에서 스캔된 툼스톤의 히스토그램 |
| TombstoneWarnings | Counter | 툼스톤 읽기 경고 수(tombstone_warn_threshold보다 많은 툼스톤을 스캔한 읽기) |
| TombstoneFailures | Counter | 툼스톤 읽기 실패 수(tombstone_failure_threshold보다 많은 툼스톤을 스캔한 읽기) |
| LiveScannedHistogram | Histogram | 이 테이블의 쿼리에서 스캔된 라이브 셀의 히스토그램 |
| ColUpdateTimeDeltaHistogram | Histogram | 이 테이블의 컬럼 업데이트 시간 델타의 히스토그램 |
| ViewLockAcquireTime | Timer | 이 테이블의 구체화된 뷰 업데이트를 위한 파티션 잠금 획득에 걸린 시간 |
| ViewReadTime | Timer | 구체화된 뷰 업데이트의 로컬 읽기 동안 걸린 시간 |
| TrueSnapshotsSize | Gauge |
모든 SSTable 컴포넌트를 포함한 이 테이블 스냅샷이 사용하는 디스크 공간 |
| RowCacheHitOutOfRange | Counter | 쿼리 필터를 충족하지 않아 디스크로 간 테이블 행 캐시 적중 수 |
| RowCacheHit | Counter | 테이블 행 캐시 적중 수 |
| RowCacheMiss | Counter | 테이블 행 캐시 미스 수 |
| CasPrepare | Latency | paxos prepare 라운드 지연 시간 |
| CasPropose | Latency | paxos propose 라운드 지연 시간 |
| CasCommit | Latency | paxos commit 라운드 지연 시간 |
| PercentRepaired | Gauge |
디스크에서 리페어된 테이블 데이터의 백분율 |
| BytesRepaired | Gauge |
디스크에서 리페어된 테이블 데이터의 크기 |
| BytesUnrepaired | Gauge |
디스크에서 리페어되지 않은 테이블 데이터의 크기 |
| BytesPendingRepair | Gauge |
진행 중인 증분 리페어를 위해 격리된 테이블 데이터의 크기 |
| SpeculativeRetries | Counter | 이 테이블에 대해 추측 재시도가 보내진 횟수 |
| SpeculativeFailedRetries | Counter | 타임아웃을 막지 못한 추측 재시도 수 |
| SpeculativeInsufficientReplicas | Counter | 리플리카 부족으로 시도할 수 없었던 추측 재시도 수 |
| SpeculativeSampleLatencyNanos | Gauge |
추측이 시도되기 전에 기다리는 나노초 수. 값은 정적으로 구성되거나 조정자 지연 시간에 기반해 주기적으로 업데이트될 수 있음 |
| AnticompactionTime | Timer | 일관성 리페어 전에 안티컴팩션에 보낸 시간 |
| ValidationTime | Timer | 리페어 중 검증 컴팩션을 하는 데 보낸 시간 |
| SyncTime | Timer | 리페어 중 스트리밍을 하는 데 보낸 시간 |
| BytesValidated | Histogram | 검증 중 읽은 바이트 양에 대한 히스토그램 |
| PartitionsValidated | Histogram | 검증 중 읽은 파티션 수에 대한 히스토그램 |
| BytesAnticompacted | Counter | 안티컴팩션한 바이트 수 |
| BytesMutatedAnticompaction | Counter | sstable이 리페어된 범위에 완전히 포함되어 안티컴팩션을 피한 바이트 수 |
| MutatedAnticompactionGauge | Gauge |
변형된 바이트와 총 리페어된 바이트의 비율 |
키스페이스 메트릭 (Keyspace Metrics)
Cassandra의 각 키스페이스는 그 상태와 성능을 추적하는 메트릭을 가집니다.
이 메트릭 중 대부분은 위 테이블 메트릭과 같으며, 키스페이스 수준에서 집계된 것입니다. 키스페이스 특정 메트릭은 아래 표에 지정됩니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.keyspace.<MetricName>.<Keyspace>
JMX MBean
org.apache.cassandra.metrics:type=Keyspace scope=<Keyspace> name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| WriteFailedIdeaCL | Counter | 구성된 이상적 일관성 수준을 달성하지 못한 쓰기 수, 구성되지 않았으면 0 |
| IdealCLWriteLatency | Latency | 구성된 이상적 일관성 수준에서의 조정자 쓰기 지연 시간. 이상적 일관성 수준이 구성되지 않으면 값이 기록되지 않음 |
| RepairTime | Timer | 리페어 조정자로 보낸 총 시간 |
| RepairPrepareTime | Timer | 리페어 준비에 보낸 총 시간 |
스레드 풀 메트릭 (ThreadPool Metrics)
Cassandra는 특정 유형의 작업을 자체 스레드 풀로 분할합니다. 이는 노드의 요청에 대한 백프레셔와 비동기를 제공합니다. 이러한 스레드 풀의 상태를 모니터링하는 것은 중요합니다. 노드가 얼마나 포화되었는지 알려줄 수 있기 때문입니다.
메트릭 이름은 모두 특정 스레드 풀 이름으로 끝나요. 스레드 풀은 또한 특정 유형 아래로 분류됩니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.ThreadPools.<MetricName>.<Path>.<ThreadPoolName>
JMX MBean
org.apache.cassandra.metrics:type=ThreadPools path=<Path> scope=<ThreadPoolName> name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| ActiveTasks | Gauge |
이 풀이 적극적으로 처리 중인 작업 수 |
| PendingTasks | Gauge |
이 풀에 큐에 쌓인 작업 수 |
| CompletedTasks | Counter | 완료된 작업 수 |
| TotalBlockedTasks | Counter | 큐 포화로 차단된 작업 수 |
| CurrentlyBlockedTask | Counter | 큐 포화로 현재 차단되었지만 재시도 시 풀릴 작업 수 |
| MaxPoolSize | Gauge |
이 풀의 최대 스레드 수 |
| MaxTasksQueued | Gauge |
작업이 차단되기 전에 큐에 쌓일 수 있는 최대 작업 수 |
다음 스레드 풀을 모니터링할 수 있습니다.
| 이름 | 타입 | 설명 |
|---|---|---|
| Native-Transport-Requests | transport | 클라이언트 CQL 요청 처리 |
| CounterMutationStage | request | 카운터 쓰기 담당 |
| ViewMutationStage | request | 구체화된 뷰 쓰기 담당 |
| MutationStage | request | 다른 모든 쓰기 담당 |
| ReadRepairStage | request | 이 스레드 풀에서 읽기 리페어가 발생 |
| ReadStage | request | 이 스레드 풀에서 로컬 읽기 실행 |
| RequestResponseStage | request | 이 스레드 풀에서 클러스터에 대한 조정자 요청 실행 |
| AntiEntropyStage | internal | 리페어용 merkle tree 구축 |
| CacheCleanupExecutor | internal | 이 스레드 풀에서 캐시 유지보수 수행 |
| CompactionExecutor | internal | 이 스레드에서 컴팩션 실행 |
| GossipStage | internal | gossip 요청 처리 |
| HintsDispatcher | internal | hinted handoff 수행 |
| InternalResponseStage | internal | 클러스터 내 콜백 담당 |
| MemtableFlushWriter | internal | 멤테이블을 디스크에 기록 |
| MemtablePostFlush | internal | 멤테이블이 디스크에 기록된 후 커밋 로그 정리 |
| MemtableReclaimMemory | internal | 멤테이블 재활용 |
| MigrationStage | internal | 스키마 마이그레이션 실행 |
| MiscStage | internal | 기타 작업이 여기서 실행 |
| PendingRangeCalculator | internal | 토큰 범위 계산 |
| PerDiskMemtableFlushWriter_0 | internal | 스펙 쓰기 담당(디스크마다 하나씩, 0-N) |
| Sampler | internal | SSTable의 인덱스 요약 재샘플링 담당 |
| SecondaryIndexManagement | internal | 이차 인덱스 업데이트 수행 |
| ValidationExecutor | internal | 검증 컴팩션 또는 스크러빙 수행 |
| ViewBuildExecutor | internal | 구체화된 뷰 초기 빌드 수행 |
클라이언트 요청 메트릭 (Client Request Metrics)
클라이언트 요청은 조정자 수준에서 발생하는 작업을 캡슐화한 자체 메트릭 집합을 가집니다.
다른 유형의 클라이언트 요청은 RequestType별로 나뉩니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.ClientRequest.<MetricName>.<RequestType>
JMX MBean
org.apache.cassandra.metrics:type=ClientRequest scope=<RequestType> name=<MetricName>
RequestType: CASRead 설명: 트랜잭션 읽기 요청과 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 트랜잭션 실패 수 |
| Latency | Transaction | 트랜잭션 읽기 지연 시간 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
| UnfinishedCommit | Counter | 읽기에서 커밋된 트랜잭션 수 |
| ConditionNotMet | Counter | 트랜잭션 전제 조건이 현재 값과 일치하지 않은 수 |
| ContentionHistogram | Histogram | 마주친 경쟁 읽기 수 |
RequestType: CASWrite 설명: 트랜잭션 쓰기 요청과 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 트랜잭션 실패 수 |
| Latency | Transaction | 트랜잭션 쓰기 지연 시간 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
| UnfinishedCommit | Counter | 쓰기에서 커밋된 트랜잭션 수 |
| ConditionNotMet | Counter | 트랜잭션 전제 조건이 현재 값과 일치하지 않은 수 |
| ContentionHistogram | Histogram | 마주친 경쟁 쓰기 수 |
| MutationSizeHistogram | Histogram | 요청 변경의 총 크기(바이트) |
RequestType: Read 설명: 표준 읽기 요청과 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 읽기 실패 수 |
| Latency | Transaction | 읽기 지연 시간 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
RequestType: RangeSlice 설명: 토큰 범위 읽기 요청과 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 범위 쿼리 실패 수 |
| Latency | Transaction | 범위 쿼리 지연 시간 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
RequestType: Write 설명: 일반 쓰기 요청과 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 쓰기 실패 수 |
| Latency | Transaction | 쓰기 지연 시간 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
| MutationSizeHistogram | Histogram | 요청 변경의 총 크기(바이트) |
RequestType: ViewWrite 설명: 구체화된 뷰 쓰기와 관련된 메트릭. 메트릭:
| 이름 | 타입 | 설명 |
|---|---|---|
| Timeouts | Counter | 마주친 타임아웃 수 |
| Failures | Counter | 마주친 트랜잭션 실패 수 |
| Unavailables | Counter | 마주친 사용 불가 예외 수 |
| ViewReplicasAttempted | Counter | 시도된 뷰 리플리카 쓰기 총 수 |
| ViewReplicasSuccess | Counter | 성공한 뷰 리플리카 쓰기 총 수 |
| ViewPendingMutations | Gauge |
ViewReplicasAttempted - ViewReplicasSuccess |
| ViewWriteLatency | Timer | 변경이 베이스 테이블에 적용된 때부터 뷰에서 CL.ONE이 달성될 때까지의 시간 |
캐시 메트릭 (Cache Metrics)
Cassandra 캐시는 캐시의 효과성을 추적하는 메트릭을 가집니다. 다만 테이블 메트릭이 더 유용할 수 있어요.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Cache.<MetricName>.<CacheName>
JMX MBean
org.apache.cassandra.metrics:type=Cache scope=<CacheName> name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| Capacity | Gauge |
캐시 용량(바이트) |
| Entries | Gauge |
총 캐시 항목 수 |
| FifteenMinuteCacheHitRate | Gauge |
15분 캐시 적중률 |
| FiveMinuteCacheHitRate | Gauge |
5분 캐시 적중률 |
| OneMinuteCacheHitRate | Gauge |
1분 캐시 적중률 |
| HitRate | Gauge |
전체 캐시 적중률 |
| Hits | Meter | 총 캐시 적중 수 |
| Misses | Meter | 총 캐시 미스 수 |
| MissLatency | Timer | 미스의 지연 시간 |
| Requests | Gauge |
총 캐시 요청 수 |
| Size | Gauge |
점유된 캐시의 총 크기(바이트) |
다음 캐시가 다뤄집니다:
| 이름 | 설명 |
|---|---|
| CounterCache | 성능을 위해 뜨거운 카운터를 메모리에 유지 |
| ChunkCache | 프로세스 내 압축되지 않은 페이지 캐시 |
| KeyCache | 파티션에서 sstable 오프셋으로의 캐시 |
| RowCache | 메모리에 유지되는 행 캐시 |
Misses와 MissLatency는 ChunkCache에만 정의됩니다.
CQL 메트릭
CQL prepared statement 캐싱에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.CQL.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=CQL name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| PreparedStatementsCount | Gauge |
캐시된 prepared statement 수 |
| PreparedStatementsEvicted | Counter | prepared statement 캐시에서 축출된 prepared statement 수 |
| PreparedStatementsExecuted | Counter | 실행된 prepared statement 수 |
| RegularStatementsExecuted | Counter | 준비되지 않은 문 실행 수 |
| PreparedStatementsRatio | Gauge |
준비된 문과 준비되지 않은 문의 백분율 |
DroppedMessage 메트릭
다양한 유형의 요청에 대한 버려진 메시지 추적에 특화된 메트릭. 버려진 쓰기는 Hinted Handoff가 저장하고 재시도합니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.DroppedMessage.<MetricName>.<Type>
JMX MBean
org.apache.cassandra.metrics:type=DroppedMessage scope=<Type> name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| CrossNodeDroppedLatency | Timer | 노드 간 버려진 지연 시간 |
| InternalDroppedLatency | Timer | 노드 내 버려진 지연 시간 |
| Dropped | Meter | 버려진 메시지 수 |
추적되는 서로 다른 메시지 유형:
| 이름 | 설명 |
|---|---|
| BATCH_STORE | Batchlog 쓰기 |
| BATCH_REMOVE | Batchlog 정리(성공적으로 적용된 후) |
| COUNTER_MUTATION | 카운터 쓰기 |
| HINT | 힌트 재생 |
| MUTATION | 일반 쓰기 |
| READ | 일반 읽기 |
| READ_REPAIR | 읽기 리페어 |
| PAGED_SLICE | 페이징된 읽기 |
| RANGE_SLICE | 토큰 범위 읽기 |
| REQUEST_RESPONSE | RPC 콜백 |
| _TRACE | 트레이싱 쓰기 |
Streaming 메트릭
리페어, 부트스트랩, 리빌드 같은 Streaming 연산 중 보고되는 메트릭.
이 메트릭은 peer 엔드포인트에 특정하며, 소스 노드가 메트릭을 가져오는 노드입니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Streaming.<MetricName>.<PeerIP>
JMX MBean
org.apache.cassandra.metrics:type=Streaming scope=<PeerIP> name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| IncomingBytes | Counter | peer에서 이 노드로 스트리밍된 바이트 수 |
| OutgoingBytes | Counter | 이 노드에서 peer 엔드포인트로 스트리밍된 바이트 수 |
Compaction 메트릭
컴팩션 작업에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Compaction.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=Compaction name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| BytesCompacted | Counter | 서버 [재]시작 이후 컴팩션된 총 바이트 수 |
| PendingTasks | Gauge |
수행할 남은 컴팩션 수 추정치 |
| CompletedTasks | Gauge |
서버 [재]시작 이후 완료된 컴팩션 수 |
| TotalCompactionsCompleted | Meter | 서버 [재]시작 이후 완료된 컴팩션 처리량 |
| PendingTasksByTableName | Gauge<Map<String, Map<String, Integer>>> | 수행할 남은 컴팩션 수 추정치, 키스페이스 및 테이블 이름별로 그룹화. 이 정보는 테이블 메트릭에도 유지됨 |
CommitLog 메트릭
CommitLog에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.CommitLog.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=CommitLog name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| CompletedTasks | Gauge |
[재]시작 이후 기록된 커밋 로그 메시지 총 수 |
| PendingTasks | Gauge |
기록됐지만 아직 fsync되지 않은 커밋 로그 메시지 수 |
| TotalCommitLogSize | Gauge |
모든 커밋 로그 세그먼트가 사용하는 현재 크기(바이트) |
| WaitingOnSegmentAllocation | Timer | CommitLogSegment가 할당되기를 기다리며 보낸 시간 — 정상 조건에서는 0이어야 함 |
| WaitingOnCommit | Timer | CL fsync를 기다리며 보낸 시간 — Periodic의 경우 동기화가 동기화 간격에 뒤처질 때만 발생 |
Storage 메트릭
스토리지 엔진에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Storage.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=Storage name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| Exceptions | Counter | 잡힌 내부 예외 수. 정상 예외에서는 0이어야 함 |
| Load | Counter | 이 노드가 관리하는 온디스크 데이터 크기(바이트) |
| TotalHints | Counter | [재]시작 이후 이 노드에 기록된 힌트 메시지 수. 힌트당 힌트할 각 호스트에 하나의 항목 포함 |
| TotalHintsInProgress | Counter | 현재 보내려 시도 중인 힌트 수 |
HintedHandOff 메트릭
Hinted Handoff에 특화된 메트릭. Storage 메트릭에서 추적되는 힌트 관련 메트릭도 있습니다.
이 메트릭은 메트릭 이름에 peer 엔드포인트를 포함합니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.HintedHandOffManager.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=HintedHandOffManager name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| Hints_created- |
Counter | 이 peer에 대해 디스크에 있는 힌트 수 |
| Hints_not_stored- |
Counter | 구성된 힌트 윈도우를 지나 다운되어 이 peer에 저장되지 않은 힌트 수 |
HintsService 메트릭
힌트 전달 서비스에 특화된 메트릭. Storage 메트릭에서 추적되는 힌트 관련 메트릭도 있습니다.
이 메트릭은 메트릭 이름에 peer 엔드포인트를 포함합니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.HintsService.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=HintsService name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| HintsSucceeded | Meter | 성공적으로 전달된 힌트의 미터 |
| HintsFailed | Meter | 전달에 실패한 힌트의 미터 |
| HintsTimedOut | Meter | 타임아웃된 힌트의 미터 |
| Hint_delays | Histogram | 힌트 전달 지연 시간의 히스토그램(밀리초) |
| Hint_delays- |
Histogram | peer별 힌트 전달 지연 시간의 히스토그램(밀리초) |
SSTable Index 메트릭
SSTable 인덱스 메타데이터에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Index.<MetricName>.RowIndexEntry
JMX MBean
org.apache.cassandra.metrics:type=Index scope=RowIndexEntry name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| IndexedEntrySize | Histogram | 모든 SSTable에 걸친 인덱스의 온힙 크기(바이트) 히스토그램 |
| IndexInfoCount | Histogram | 모든 SSTable에 걸쳐 관리되는 온힙 인덱스 항목 수의 히스토그램 |
| IndexInfoGets | Histogram | SSTable마다 수행된 인덱스 탐색 수의 히스토그램 |
BufferPool 메트릭
Cassandra가 관리하는 내부 재활용 버퍼 풀에 특화된 메트릭. 이 풀은 온/오프 힙 버퍼를 재활용해 할당과 GC를 낮게 유지하기 위한 것입니다.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.BufferPool.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=BufferPool name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| Size | Gauge |
관리되는 버퍼 풀의 크기(바이트) |
| Misses | Meter | 풀의 미스 비율. 높을수록 더 많은 할당이 발생함 |
Client 메트릭
클라이언트 관리에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Client.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=Client name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| connectedNativeClients | Gauge |
이 노드의 네이티브 프로토콜 서버에 연결된 클라이언트 수 |
| connections | Gauge<List<Map<String, String>>> | 모든 연결과 그 상태 정보 목록 |
| connectedNativeClientsByUser | Gauge<Map<String, Int>> | 사용자 이름별 연결된 네이티브 클라이언트 수 |
Batch 메트릭
배치 문에 특화된 메트릭.
보고된 이름 형식:
Metric Name
org.apache.cassandra.metrics.Batch.<MetricName>
JMX MBean
org.apache.cassandra.metrics:type=Batch name=<MetricName>
| 이름 | 타입 | 설명 |
|---|---|---|
| PartitionsPerCounterBatch | Histogram | 카운터 배치당 처리된 파티션 수의 분포 |
| PartitionsPerLoggedBatch | Histogram | 로그 배치당 처리된 파티션 수의 분포 |
| PartitionsPerUnloggedBatch | Histogram | 언로그 배치당 처리된 파티션 수의 분포 |
JVM 메트릭
메모리와 가비지 컬렉션 통계 같은 JVM 메트릭은 JMX로 JVM에 연결해 접근하거나 Metric Reporters로 내보낼 수 있습니다.
BufferPool
Metric Name
jvm.buffers.<direct|mapped>.<MetricName>
JMX MBean
java.nio:type=BufferPool name=<direct|mapped>
| 이름 | 타입 | 설명 |
|---|---|---|
| Capacity | Gauge |
이 풀의 버퍼 추정 총 용량 |
| Count | Gauge |
풀의 추정 버퍼 수 |
| Used | Gauge |
Java 가상 머신이 이 버퍼 풀에 사용 중인 추정 메모리 |
FileDescriptorRatio
Metric Name
jvm.fd.<MetricName>
JMX MBean
java.lang:type=OperatingSystem name=<OpenFileDescriptorCount|MaxFileDescriptorCount>
| 이름 | 타입 | 설명 |
|---|---|---|
| Usage | Ratio | 총 파일 디스크립터에 대한 사용된 비율 |
GarbageCollector
Metric Name
jvm.gc.<gc_type>.<MetricName>
JMX MBean
java.lang:type=GarbageCollector name=<gc_type>
| 이름 | 타입 | 설명 |
|---|---|---|
| Count | Gauge |
발생한 가비지 컬렉션 총 수 |
| Time | Gauge |
누적 컬렉션 경과 시간의 대략적 값(밀리초) |
Memory
Metric Name
jvm.memory.<heap/non-heap/total>.<MetricName>
JMX MBean
java.lang:type=Memory
| 이름 | 타입 | 설명 |
|---|---|---|
| Committed | Gauge |
JVM이 사용하도록 커밋된 메모리 양(바이트) |
| Init | Gauge |
JVM이 처음 OS에 요청하는 메모리 양(바이트) |
| Max | Gauge |
메모리 관리에 사용할 수 있는 최대 메모리 양(바이트) |
| Usage | Ratio | 최대 메모리에 대한 사용된 비율 |
| Used | Gauge |
사용된 메모리 양(바이트) |
MemoryPool
Metric Name
jvm.memory.pools.<memory_pool>.<MetricName>
JMX MBean
java.lang:type=MemoryPool name=<memory_pool>
| 이름 | 타입 | 설명 |
|---|---|---|
| Committed | Gauge |
JVM이 사용하도록 커밋된 메모리 양(바이트) |
| Init | Gauge |
JVM이 처음 OS에 요청하는 메모리 양(바이트) |
| Max | Gauge |
메모리 관리에 사용할 수 있는 최대 메모리 양(바이트) |
| Usage | Ratio | 최대 메모리에 대한 사용된 비율 |
| Used | Gauge |
사용된 메모리 양(바이트) |
JMX
JMX 기반 클라이언트라면 누구나 cassandra에서 메트릭에 접근할 수 있어요.
JMX 메트릭을 http로 접근하고 싶다면 Mx4jTool을 다운로드하고 mx4j-tools.jar를 클래스패스에 넣는 것이 가능합니다. 시작 시 로그에서 다음을 볼 수 있을 거예요:
HttpAdaptor version 3.0.2 started on port 8081
다른 포트(8081이 기본)나 다른 수신 주소(0.0.0.0이 기본 아님)를 선택하려면 conf/cassandra-env.sh를 편집하고 주석을 해제하세요:
#MX4J_ADDRESS="-Dmx4jaddress=0.0.0.0"
#MX4J_PORT="-Dmx4jport=8081"
Metric Reporters
이 섹션의 상단에서 언급했듯 Cassandra 메트릭은 내장 리포터 또는 서드파티 리포터 플러그인을 사용해 여러 외부 모니터링 시스템으로 내보낼 수 있습니다.
더 알아보기 (Learn more)
- 가상 테이블 — CQL로 메트릭 조회
- nodetool — JMX 기반 모니터링 도구
- cassandra.yaml 설정 — 메트릭 관련 설정