다중 카프카 모니터링을 위한 kafka_exporter 활용
kafka_exporter 프로젝트 주소: https://github.com/danielqsj/kafka_exporter
- docker-compose를 사용하여 여러 kafka_exporter를 배포하며, 각 exporter는 하나의 카프카 클러스터와 연동됩니다.
- 주의사항: 각 카프카 브로커 주소를 구성하며, kafka3는 버전을 명시해야 합니다.
version: '3.8'
services:
monitoring-service-logs:
image: docker.io/bitnami/kafka-exporter:1.6.0
command:
- '--kafka.server=10.2.19.43:9092'
- '--kafka.server=10.2.24.62:9092'
- '--kafka.server=10.5.98.190:9092'
- '--kafka.version=3.2.1'
restart: unless-stopped
ports:
- "9310:9308"
environment:
- KAFKA_ENABLE_AUTO_COMMIT=false
monitoring-service-production:
image: docker.io/bitnami/kafka-exporter:1.6.0
command:
- '--kafka.server=192.168.53.99:9092'
- '--kafka.server=192.168.53.53:9092'
- '--kafka.server=192.168.53.96:9092'
restart: unless-stopped
ports:
- "9311:9308"
environment:
- KAFKA_ENABLE_AUTO_COMMIT=false
Prometheus 작업 구성으로 kafka_exporter 연동
- 주의: 각 kafka_exporter에
env라벨을 추가해야 하며, 대시보드에서 이 라벨을 사용합니다.
- job_name: 'kafka-metrics'
metrics_path: /metrics
scrape_interval: 30s
scrape_timeout: 15s
static_configs:
- targets:
- 10.0.0.26:9310
labels:
env: opslogs
cluster: monitoring-cluster-1
- targets:
- 10.0.0.26:9311
labels:
env: production
cluster: monitoring-cluster-2
카프카 그라파나 대시보드
[한국어 버전] 2024.05.16 업데이트 - 프로메테우스 기반 kafka_exporter를 활용한 카프카 자원 표시, 문제 해석, 빠른 대기열 분석!
- 대시보드의 모든 패널이 최신 스타일을 지원하며, 표시 성능이 최적화되어 그라파나 10.X 버전과 호환됩니다.
- 카프카 전체 자원 상태 표시
- 생산자와 소비자 관계 시각화
- 메시지 대기열 상세 정보
- 생산 및 소비 속도 모니터링
- 비정상적인 소비자 및 토픽 표시
- 파티션 수준 대기열 및 소비 상세 정보
스크린샷
- 전체 정보, 소비자 및 토픽, 비정상 및 대기열 분석
- 파티션 차원 상세 정보
대시보드 다운로드
- 그라파나 대시보드 ID: 21078
- 그라파나 대시보드 주소: https://grafana.com/grafana/dashboards/21078
- 프로젝트 저장소: https://github.com/starsliao/Prometheus/kafka
프로메테우스 경고 규칙
groups:
- name: kafka-alerts
rules:
- alert: KAFKA_BROKER_DOWN
expr: kafka_broker_info{job="kafka-metrics"} == 0
for: 5m
labels:
severity: critical
category: infrastructure
annotations:
summary: "카프카 브로커 다운 감지"
description: "환경: {{ $labels.env }} | 클러스터: {{ $labels.cluster }} | 주소: {{ $labels.address }}"
- alert: KAFKA_MESSAGE_BACKLOG_CRITICAL
expr: sum(kafka_consumergroup_lag_sum{job="kafka-metrics"}) by (env,cluster,consumergroup,topic) > 10000
for: 10m
labels:
severity: critical
category: application
annotations:
summary: "카프카 메시지 대기열 임계치 초과"
description: "환경: {{ $labels.env }}\n클러스터: {{ $labels.cluster }}\n소비 그룹: {{ $labels.consumergroup }}\n토픽: {{ $labels.topic }}\n대기량: {{ $value | printf \"%.0f\" }}"
- alert: KAFKA_PARTITION_BACKLOG_BUSINESS_HOURS
expr: (sum(kafka_consumergroup_lag{job="kafka-metrics"}) by (env,cluster,consumergroup,topic,partition) > 3000) AND ON() (hour()+8)%24 >= 9 <= 18
for: 15m
labels:
severity: warning
category: application
annotations:
summary: "업무 시간 카프카 파티션 대기량 증가"
description: "환경: {{ $labels.env }}\n클러스터: {{ $labels.cluster }}\n소비 그룹: {{ $labels.consumergroup }}\n토픽: {{ $labels.topic }}\n파티션: {{ $labels.partition }}\n대기량: {{ $value | printf \"%.0f\" }}"
- alert: KAFKA_EXCESSIVE_PARTITIONS
expr: sum by (env,cluster)(kafka_topic_partitions{job="kafka-metrics",topic !~"__.*"}) > 2000
for: 5m
labels:
severity: warning
category: configuration
annotations:
summary: "카프카 파티션 수 과다"
description: "환경: {{ $labels.env }} | 클러스터: {{ $labels.cluster }} | 현재 파티션 수: {{ $value | printf \"%.0f\" }}"
- alert: KAFKA_BROKER_QUORUM_LOSS
expr: kafka_brokers{job="kafka-metrics"} < 2
for: 3m
labels:
severity: critical
category: infrastructure
annotations:
summary: "카프카 브로커 쿼럼 손실"
description: "환경: {{ $labels.env }} | 클러스터: {{ $labels.cluster }} | 현재 브로커 수: {{ $value | printf \"%.0f\" }}"
- alert: KAFKA_REPLICATION_FACTOR_INSUFFICIENT
expr: sum(kafka_topic_partition_in_sync_replica{job="kafka-metrics"}) by (env,cluster,topic) < 2
for: 5m
labels:
severity: critical
category: configuration
annotations:
summary: "카프카 복제 요소 부족"
description: "환경: {{ $labels.env }} | 클러스터: {{ $labels.cluster }} | 토픽: {{ $labels.topic }} | 동기화된 복제 파티션 수: {{ $value | printf \"%.0f\" }}"