콘텐츠로 이동

TencentCloud CKafka (Prometheus)

텐센트 클라우드 CKafka는 Prometheus Exporter를 통해 Broker, 노드, 클라이언트 지표를 수집하며, 메시지 처리량, 요청 지연, 연결 상태, Topic 읽기/쓰기, 리소스 수위, 리밸런싱 등 여러 측면을 포괄해 CKafka의 성능과 운영 안정성을 평가하는 데 사용됩니다.

설정

사전 조건

텐센트 클라우드 CKafka 프리미엄 인스턴스에 접근할 수 있는 네트워크 환경에 DataKit를 배포해야 합니다. Prometheus 모니터링 대상을 가져올 때 선택한 VPC와 서브넷과 네트워크가 상호 통신 가능한 CVM 또는 자체 구축 호스트에 DataKit를 배포하는 것을 권장합니다. 호스트에 보안 그룹이나 접근 제어 정책이 설정되어 있다면, CKafka 콘솔이 반환한 Exporter IP와 포트를 허용해야 합니다.

텐센트 클라우드 CKafka 프리미엄은 오픈소스 표준 Prometheus Exporter 기반의 연동 방식을 제공하며, 콘솔이 반환하는 모니터링 대상은 일반적으로 다음 두 가지입니다.

  • Broker JMX Exporter: 요청 속도, 요청 소요 시간, Topic 읽기/쓰기 속도, Controller, Log 등의 Broker JMX 지표를 수집합니다.
  • Node Exporter: CPU, 메모리, 디스크, 네트워크 등 Broker가 위치한 노드의 기본 지표를 수집합니다.

Producer, Consumer, Kafka Streams, Kafka Connect 지표는 CKafka Broker의 기본 Exporter 노출 범위에 포함되지 않습니다. 클라이언트 측 지표를 수집하려면 해당 비즈니스 프로세스에 JMX Exporter를 별도로 마운트하고, 그 /metrics 주소를 DataKit Prometheus 수집 설정에 추가해야 합니다.

Prometheus 모니터링 대상 가져오기

  1. CKafka 콘솔에 로그인한 뒤 대상 인스턴스 상세 페이지로 이동합니다.
  2. 인스턴스 상세 페이지에서 Prometheus로 모니터링 모듈을 찾아 모니터링 대상 가져오기를 클릭하고, 연결할 VPC와 서브넷을 선택한 뒤 제출합니다.
  3. 가져오기가 완료되면 콘솔이 반환한 Broker JMX Exporter와 Node Exporter 대상 주소를 기록합니다.

모니터링 대상 예시:

유형 예시 주소 설명
Broker JMX Exporter <jmx-exporter-ip>:60001<jmx-exporter-ip>:60003 Broker JMX 지표를 수집합니다.
Node Exporter <node-exporter-ip>:60002<node-exporter-ip>:60004 Broker 노드의 기본 지표를 수집합니다.

CKafka 인스턴스에 마이그레이션, 사양 변경 또는 가용 영역 변경이 발생하면 하위 Broker가 변경될 수 있으므로, 콘솔에서 최신 Exporter IP와 포트를 다시 가져와야 합니다.

DataKit 설정

  • datakit 설치 디렉터리의 conf.d/samples 디렉터리로 이동해 prom.conf.sample을 복사하고 ckafka.conf로 이름을 변경합니다.

cp prom.conf.sample ckafka.conf

  • ckafka.conf를 조정합니다.
[[inputs.prom]]
  urls = [
    "http://<jmx-exporter-ip>:60001/metrics",
    "http://<jmx-exporter-ip>:60003/metrics",
    "http://<jmx-exporter-ip>:60005/metrics",
    "http://<jmx-exporter-ip>:60007/metrics",
  ]
  source = "kafka_jmx"
  metric_name_filter = ["^kafka_"]
  measurement_prefix = ""
  keep_exist_metric_name = false
  honor_timestamps = true
  election = false
  disable_host_tag = true
  disable_instance_tag = true
  disable_info_tag = false

  [[inputs.prom.measurements]]
    prefix = "kafka_controller_"
    name = "kafka_controller"

  [[inputs.prom.measurements]]
    prefix = "kafka_network_"
    name = "kafka_network"

  [[inputs.prom.measurements]]
    prefix = "kafka_log_"
    name = "kafka_log"

  [[inputs.prom.measurements]]
    prefix = "kafka_server_"
    name = "kafka_server"

  [inputs.prom.tags]
    cloud_provider = "tencentcloud"
    service = "ckafka"
    region_id = "<region-id>"
    cluster_id = "<ckafka-instance-id>"
    cluster_name = "<ckafka-instance-name>"


[[inputs.prom]]
  urls = [
    "http://<node-exporter-ip>:60002/metrics",
    "http://<node-exporter-ip>:60004/metrics",
    "http://<node-exporter-ip>:60006/metrics",
    "http://<node-exporter-ip>:60008/metrics",
  ]
  source = "kafka_node"
  metric_name_filter = ["^node_"]
  measurement_prefix = ""
  keep_exist_metric_name = false
  honor_timestamps = true
  election = false
  disable_host_tag = true
  disable_instance_tag = true
  disable_info_tag = false

  [[inputs.prom.measurements]]
    prefix = "node_"
    name = "kafka_node"

  [inputs.prom.tags]
    cloud_provider = "tencentcloud"
    service = "ckafka"
    region_id = "<region-id>"
    cluster_id = "<ckafka-instance-id>"
    cluster_name = "<ckafka-instance-name>"


# 선택 사항: 비즈니스 Producer, Consumer, Kafka Streams, Kafka Connect 등의 클라이언트 측 JMX Exporter 지표를 수집합니다.
[[inputs.prom]]
  urls = [
    "http://<producer-client-ip>:7072/metrics",
    "http://<consumer-client-ip>:7073/metrics",
    "http://<streams-client-ip>:7074/metrics",
    "http://<connect-worker-ip>:7075/metrics",
  ]
  source = "kafka_client"
  metric_name_filter = ["^kafka_(producer|consumer|stream|connect)_"]
  measurement_prefix = ""
  keep_exist_metric_name = false
  honor_timestamps = true
  election = false
  disable_host_tag = false
  disable_instance_tag = true
  disable_info_tag = false

  [[inputs.prom.measurements]]
    prefix = "kafka_producer_"
    name = "kafka_producer"

  [[inputs.prom.measurements]]
    prefix = "kafka_consumer_"
    name = "kafka_consumer"

  [[inputs.prom.measurements]]
    prefix = "kafka_connect_"
    name = "kafka_connect"

  [[inputs.prom.measurements]]
    prefix = "kafka_stream_"
    name = "kafka_stream"

  [inputs.prom.tags]
    cloud_provider = "tencentcloud"
    service = "ckafka"
    region_id = "<region-id>"
    cluster_id = "<ckafka-instance-id>"
    cluster_name = "<ckafka-instance-name>"
  • DataKit를 재시작합니다.

다음 명령을 실행합니다.

datakit service -R

지표

Prometheus 수집을 구성하면, 권장 지표 범위는 아래 9개 지표 세트와 measurement, field, 고정 의미 태그로 구분되는 111개의 지표 컨텍스트를 포함합니다. 텐센트 클라우드 CKafka 콘솔이 반환하는 모니터링 대상은 주로 Broker JMX와 Node Exporter 지표를 제공합니다. Producer, Consumer, Kafka Streams, Kafka Connect 지표는 해당 클라이언트 프로세스에서 별도로 JMX Exporter를 활성화해야 합니다.

Controller 지표

kafka_controller 지표 세트에는 4개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
KafkaController_Value{name=ActiveControllerCount} 클러스터에서 현재 활성화된 Controller 수이며, 정상 상태에서는 보통 1입니다. cloud_provider, cluster_name, host count
KafkaController_Value{name=GlobalPartitionCount} 클러스터의 현재 전체 파티션 수입니다. 여러 Broker가 같은 전역 값을 노출할 경우 최대값을 사용합니다. host count
KafkaController_Value{name=GlobalTopicCount} 클러스터의 현재 전체 Topic 수입니다. 여러 Broker가 같은 전역 값을 노출할 경우 최대값을 사용합니다. host count
KafkaController_Value{name=OfflinePartitionsCount} 클러스터에서 현재 Leader가 없어서 정상적으로 읽고 쓸 수 없는 파티션 수입니다. cloud_provider, cluster_name, host count

네트워크 요청 지표

kafka_network 지표 세트에는 23개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
RequestChannel_Value{name=RequestQueueSize} Broker 요청 큐에서 현재 처리 대기 중인 항목 수입니다. host count
RequestChannel_Value{name=ResponseQueueSize} Broker 응답 큐에서 현재 처리 대기 중인 항목 수입니다. host count
RequestMetrics_95thPercentile{name=TotalTimeMs;request=FetchConsumer} FetchConsumer 요청의 엔드투엔드 P95 처리 시간입니다. cloud_provider, cluster_name, host ms
RequestMetrics_95thPercentile{name=TotalTimeMs;request=Produce} Produce 요청의 엔드투엔드 P95 처리 시간입니다. cloud_provider, cluster_name, host ms
RequestMetrics_Mean{name=LocalTimeMs;request=FetchConsumer} FetchConsumer 요청의 로컬 처리 평균 시간입니다. host ms
RequestMetrics_Mean{name=LocalTimeMs;request=FetchFollower} FetchFollower 요청의 로컬 처리 평균 시간입니다. host ms
RequestMetrics_Mean{name=MessageConversionsTimeMs;request=Produce} Produce 요청의 메시지 형식 변환 평균 시간입니다. host ms
RequestMetrics_Mean{name=RemoteTimeMs;request=FetchConsumer} FetchConsumer 요청의 원격 처리 평균 시간입니다. host ms
RequestMetrics_Mean{name=RemoteTimeMs;request=FetchFollower} FetchFollower 요청의 원격 처리 평균 시간입니다. host ms
RequestMetrics_Mean{name=RemoteTimeMs;request=Produce} Produce 요청의 원격 처리 평균 시간입니다. host ms
RequestMetrics_Mean{name=RequestQueueTimeMs;request=FetchConsumer} FetchConsumer 요청이 요청 큐에서 대기한 평균 시간입니다. host ms
RequestMetrics_Mean{name=RequestQueueTimeMs;request=Produce} Produce 요청이 요청 큐에서 대기한 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=FetchConsumer} FetchConsumer 요청이 응답 큐에서 대기한 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=FetchFollower} FetchFollower 요청이 응답 큐에서 대기한 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseQueueTimeMs;request=Produce} Produce 요청이 응답 큐에서 대기한 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseSendTimeMs;request=FetchConsumer} FetchConsumer 요청의 응답 전송 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseSendTimeMs;request=FetchFollower} FetchFollower 요청의 응답 전송 평균 시간입니다. host ms
RequestMetrics_Mean{name=ResponseSendTimeMs;request=Produce} Produce 요청의 응답 전송 평균 시간입니다. host ms
RequestMetrics_Mean{name=TotalTimeMs;request=FetchConsumer} FetchConsumer 요청의 엔드투엔드 평균 처리 시간입니다. host ms
RequestMetrics_Mean{name=TotalTimeMs;request=Produce} Produce 요청의 엔드투엔드 평균 처리 시간입니다. host ms
RequestMetrics_OneMinuteRate{name=RequestsPerSec} Broker의 최근 1분 요청 속도입니다. host, request ops
SocketServer_Value{name=MemoryPoolUsed} Broker 네트워크 계층 메모리 풀의 현재 사용량입니다. host B
SocketServer_Value{name=NetworkProcessorAvgIdlePercent} Broker 네트워크 처리 스레드가 유휴 상태인 시간 비율입니다. host percent

로그 지표

kafka_log 지표 세트에는 4개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
LogFlushStats_OneMinuteRate{name=LogFlushRateAndTimeMs} Broker가 초당 수행하는 로그 flush 작업의 평균 횟수입니다. host ops
Log_Value{name=LogEndOffset} 선택한 Topic 파티션의 현재 로그 끝 오프셋입니다. host, partition, topic offset
Log_Value{name=LogStartOffset} 선택한 Topic 파티션에서 현재 가장 이른 시점에 읽을 수 있는 로그 오프셋입니다. host, partition, topic offset
Log_Value{name=Size} 선택한 Topic 파티션 로그가 차지하는 디스크 공간입니다. host, topic B

Broker 서비스 지표

kafka_server 지표 세트에는 9개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
BrokerTopicMetrics_OneMinuteRate{name=BytesInPerSec} Broker 또는 Topic이 초당 수신한 생산 메시지 바이트 수입니다. host, topic B/S
BrokerTopicMetrics_OneMinuteRate{name=BytesOutPerSec} Broker 또는 Topic이 초당 소비자에게 전송한 바이트 수입니다. host, topic B/S
BrokerTopicMetrics_OneMinuteRate{name=FetchMessageConversionsPerSec} Broker가 초당 수행한 Fetch 메시지 형식 변환 횟수입니다. host, topic ops
BrokerTopicMetrics_OneMinuteRate{name=MessagesInPerSec} Broker 또는 Topic이 초당 수신한 메시지 수입니다. host, topic ops
BrokerTopicMetrics_OneMinuteRate{name=TotalFetchRequestsPerSec} Broker 또는 Topic이 초당 받은 Fetch 요청 수입니다. host, topic ops
BrokerTopicMetrics_OneMinuteRate{name=TotalProduceRequestsPerSec} Broker 또는 Topic이 초당 받은 Produce 요청 수입니다. host, topic ops
KafkaRequestHandlerPool_FiveMinuteRate{name=RequestHandlerAvgIdlePercent} Broker 요청 처리 스레드의 최근 5분 평균 유휴 비율입니다. cloud_provider, cluster_name, host percent
ReplicaManager_Value{name=UnderMinIsrPartitionCount} 동기 복제본 수가 min.insync.replicas보다 적은 파티션 수입니다. cloud_provider, cluster_name count
ReplicaManager_Value{name=UnderReplicatedPartitions} 복제본 수가 목표 복제 팩터보다 적은 파티션 수입니다. cloud_provider, cluster_name count

노드 리소스 지표

kafka_node 지표 세트에는 11개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
cpu_seconds_total{mode=idle} idle CPU 시간 증가율을 기반으로 역산한 Broker 노드의 CPU 사용률입니다. host percent
disk_read_bytes_total Broker 노드 디스크에서 초당 읽은 바이트 수입니다. host B/S
disk_reads_completed_total Broker 노드 디스크에서 초당 완료한 읽기 작업 수입니다. host ops
disk_writes_completed_total Broker 노드 디스크에서 초당 완료한 쓰기 작업 수입니다. host ops
disk_written_bytes_total Broker 노드 디스크에 초당 기록한 바이트 수입니다. host B/S
load1 Broker 노드의 최근 1분 시스템 평균 부하입니다. host -
load15 Broker 노드의 최근 15분 시스템 평균 부하입니다. host -
load5 Broker 노드의 최근 5분 시스템 평균 부하입니다. host -
memory_MemTotal_bytes 총 메모리와 사용 가능 메모리를 기반으로 계산한 Broker 노드 메모리 사용률입니다. - percent
network_receive_bytes_total{device!=lo} Broker 노드의 루프백이 아닌 네트워크 카드가 초당 수신한 바이트 수입니다. host B/S
network_transmit_bytes_total{device!=lo} Broker 노드의 루프백이 아닌 네트워크 카드가 초당 전송한 바이트 수입니다. host B/S

Producer 클라이언트 지표

kafka_producer 지표 세트에는 13개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
metrics_buffer_available_bytes Producer의 현재 사용되지 않은 버퍼 메모리 크기입니다. client_id, host B
metrics_buffer_exhausted 버퍼 고갈로 인해 Producer가 누적해서 폐기한 레코드 전송 수입니다. client_id, host count
metrics_buffer_exhausted_rate 버퍼 고갈로 인해 Producer가 초당 폐기한 레코드 전송 수입니다. client_id, host ops
metrics_bufferpool_wait_time_ns Producer가 버퍼 공간 할당을 기다린 누적 시간입니다. client_id, host ns
metrics_connection_count 클라이언트의 현재 활성 연결 수입니다. client_id, host count
metrics_failed_authentication 클라이언트 인증에 실패한 누적 연결 수입니다. client_id, host count
metrics_flush_time_ns Producer가 flush 작업을 수행하는 데 사용한 누적 시간입니다. client_id, host ns
metrics_io_wait_time_ns Producer I/O 스레드가 읽기/쓰기 가능한 소켓을 기다린 누적 시간입니다. client_id, host ns
metrics_request_rate 클라이언트가 초당 전송한 요청 수입니다. client_id, host ops
metrics_requests_in_flight Producer가 보냈지만 아직 응답을 받지 못한 요청 수입니다. client_id, host count
metrics_response_rate 클라이언트가 초당 받은 응답 수입니다. client_id, host ops
metrics_select_rate 클라이언트 I/O 스레드가 초당 select를 실행한 횟수입니다. client_id, host ops
metrics_txn_commit_time_ns Producer가 트랜잭션을 커밋하는 데 소요한 누적 시간입니다. client_id, host ns

Consumer 클라이언트 지표

kafka_consumer 지표 세트에는 14개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
coordinator_metrics_rebalance_latency Consumer Group의 가장 최근 리밸런싱 총 소요 시간입니다. client_id, host ms
coordinator_metrics_rebalance_rate_per_hour Consumer Group에서 시간당 발생한 리밸런싱 평균 횟수입니다. client_id, host 회/시간
metrics_connection_close_rate Consumer가 초당 닫은 연결 수입니다. client_id, host ops
metrics_connection_count 클라이언트의 현재 활성 연결 수입니다. client_id, host count
metrics_failed_authentication 클라이언트 인증에 실패한 누적 연결 수입니다. client_id, host count
metrics_incoming_byte_rate 클라이언트가 네트워크 소켓에서 초당 읽은 바이트 수입니다. client_id, host B/S
metrics_io_time_ns_avg Consumer가 각 select 호출에서 I/O를 수행한 평균 시간입니다. client_id, host ns
metrics_io_wait_time_ns_avg Consumer I/O 스레드가 읽기/쓰기 가능한 소켓을 기다린 평균 시간입니다. client_id, host ns
metrics_outgoing_byte_rate 클라이언트가 Broker로 초당 전송한 바이트 수입니다. client_id, host B/S
metrics_request_rate 클라이언트가 초당 전송한 요청 수입니다. client_id, host ops
metrics_request_size_avg Consumer 요청의 평균 크기입니다. client_id, host B
metrics_response_rate 클라이언트가 초당 받은 응답 수입니다. client_id, host ops
metrics_select_rate 클라이언트 I/O 스레드가 초당 select를 실행한 횟수입니다. client_id, host ops
metrics_time_between_poll_avg Consumer의 연속된 두 poll 호출 사이 평균 간격입니다. client_id, host ms

Kafka Streams 지표

kafka_stream 지표 세트에는 25개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
stream_state_metrics_all_rate Kafka Streams 상태 저장소가 초당 수행한 작업 수입니다. host, rocksdb_state_id, thread_id ops
stream_state_metrics_block_cache_capacity Kafka Streams RocksDB 블록 캐시 용량입니다. host, rocksdb_state_id, thread_id B
stream_state_metrics_block_cache_data_hit_ratio Kafka Streams RocksDB 블록 캐시 데이터 적중률입니다. host, rocksdb_state_id, thread_id percent
stream_state_metrics_block_cache_filter_hit_ratio Kafka Streams RocksDB 블록 캐시 필터 적중률입니다. host, rocksdb_state_id, thread_id percent
stream_state_metrics_block_cache_index_hit_ratio Kafka Streams RocksDB 블록 캐시 인덱스 적중률입니다. host, rocksdb_state_id, thread_id percent
stream_state_metrics_block_cache_usage Kafka Streams RocksDB 블록 캐시의 현재 사용량입니다. host, rocksdb_state_id, thread_id B
stream_state_metrics_bytes_read_compaction_rate Kafka Streams 상태 저장소 압축에서 초당 읽은 바이트 수입니다. host, rocksdb_state_id, thread_id B/S
stream_state_metrics_bytes_read_rate Kafka Streams 상태 저장소가 초당 읽은 바이트 수입니다. host, rocksdb_state_id, thread_id B/S
stream_state_metrics_bytes_written_compaction_rate Kafka Streams 상태 저장소 압축에서 초당 기록한 바이트 수입니다. host, rocksdb_state_id, thread_id B/S
stream_state_metrics_bytes_written_rate Kafka Streams 상태 저장소가 초당 기록한 바이트 수입니다. host, rocksdb_state_id, thread_id B/S
stream_task_metrics_active_process_ratio Kafka Streams 작업 스레드가 레코드 처리에 사용한 시간 비율입니다. host, task_id, thread_id percent
stream_task_metrics_cache_size_bytes Kafka Streams 작업 캐시의 총 크기입니다. host, task_id, thread_id B
stream_task_metrics_enforced_processing_rate Kafka Streams 작업이 초당 강제 처리를 수행한 횟수입니다. host, task_id, thread_id ops
stream_task_metrics_process_rate Kafka Streams 작업이 초당 처리한 레코드 수입니다. host, task_id, thread_id ops
stream_thread_metrics_blocked_time_ns Kafka Streams 스레드가 대기 때문에 차단된 누적 시간입니다. host, thread_id ns
stream_thread_metrics_commit_rate Kafka Streams 스레드가 초당 상태를 커밋한 횟수입니다. host, thread_id ops
stream_thread_metrics_poll_latency_avg Kafka Streams 스레드의 poll 호출 평균 지연입니다. host, thread_id ms
stream_thread_metrics_poll_rate Kafka Streams 스레드가 초당 poll을 실행한 횟수입니다. host, thread_id ops
stream_thread_metrics_task Kafka Streams 스레드가 생성한 누적 작업 수입니다. host, thread_id count
stream_thread_metrics_task_closed Kafka Streams 스레드가 종료한 누적 작업 수입니다. host, thread_id count
stream_thread_metrics_thread_start_time Kafka Streams 스레드 시작 시각입니다. host, thread_id ms
stream_topic_metrics_bytes_consumed Kafka Streams가 Topic에서 누적 소비한 바이트 수입니다. host, topic B
stream_topic_metrics_bytes_produced Kafka Streams가 Topic에 누적 생산한 바이트 수입니다. host, topic B
stream_topic_metrics_records_consumed Kafka Streams 소스 프로세서 노드가 누적 소비한 레코드 수입니다. host, processor_node_id, topic count
stream_topic_metrics_records_produced Kafka Streams 싱크 프로세서 노드가 누적 생성한 레코드 수입니다. host, processor_node_id, topic count

Kafka Connect 지표

kafka_connect 지표 세트에는 8개의 권장 지표 컨텍스트가 포함됩니다.

지표명 지표 설명 차원 단위
worker_connector_count Kafka Connect Worker에서 현재 실행 중인 Connector 수입니다. host count
worker_connector_startup_attempts Kafka Connect Worker가 Connector 시작을 시도한 누적 횟수입니다. host count
worker_connector_startup_failure_percentage Kafka Connect Worker가 Connector 시작에 실패한 비율입니다. host percent
worker_rebalance_completed_rebalances Kafka Connect Worker에서 완료된 리밸런싱 누적 횟수입니다. host count
worker_rebalance_time_since_last_rebalance_ms Kafka Connect Worker의 마지막 리밸런싱 완료 이후 경과 시간입니다. host ms
worker_task_startup_attempts Kafka Connect Worker가 Task 시작을 시도한 누적 횟수입니다. host count
worker_task_startup_failure Kafka Connect Worker가 Task 시작에 실패한 누적 횟수입니다. host count
worker_task_startup_failure_percentage Kafka Connect Worker가 Task 시작에 실패한 비율입니다. host percent

문서 평가

이 페이지가 도움이 되었나요?