카프카 모니터링 종합 가이드: 최상의 카프카 대시보드 및 모니터링 설정과 경고 규칙

다중 카프카 모니터링을 위한 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 버전과 호환됩니다.
  • 카프카 전체 자원 상태 표시
  • 생산자와 소비자 관계 시각화
  • 메시지 대기열 상세 정보
  • 생산 및 소비 속도 모니터링
  • 비정상적인 소비자 및 토픽 표시
  • 파티션 수준 대기열 및 소비 상세 정보

스크린샷

  • 전체 정보, 소비자 및 토픽, 비정상 및 대기열 분석
  • 파티션 차원 상세 정보

대시보드 다운로드

프로메테우스 경고 규칙

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\" }}"

태그: kafka Monitoring prometheus Grafana docker-compose

7월 10일 02:35에 게시됨