카테고리 없음

kafka를 Grafana와 Prometheus로 모니터링 하는법

YoshiaLee 2024. 8. 26. 05:36

docker-compose 를 활용해서 카프카를 모니터링 할수 있다.

지금 내 상황은 마치 실전 처럼 카프카 서버가 따로있고 다른 서버에서 모니터링을 하는 방법이다.

(즉, localhost에서 모든것을 하는것이 아니라 카프카 서버가 분리돼있다.)

 

이때 필요한것은 Grafana (웹 시각화 도구), Prometheus (메트릭을 수집), kafka-exporter (Kafka 클러스터에서 운영 상태와 성능에 대한 메트릭을 Prometheus로 보냄) 이다.

 

docker-compose.yml

 

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
    ports:
      - "2181:2181"

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://192.168.219.109:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
    healthcheck:
      test: ["CMD", "kafka-broker-api-versions", "--bootstrap-server=kafka:9092"]
      interval: 10s
      timeout: 5s
      retries: 5


  kafka-exporter:
    image: danielqsj/kafka-exporter:latest
    ports:
      - "9308:9308"
    environment:
      KAFKA_URI: "kafka:9092"
      KAFKA_GROUP_REGEX: ".*"
      KAFKA_TOPIC_REGEX: ".*"
      KAFKA_OFFSET: true
    depends_on:
      kafka:
        condition: service_healthy

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin

 

prometheus에 볼륨 매핑이 되어있으므로 (./prometheus.yml:/etc/prometheus/prometheus.yml)

prometheus.yml도 만들어 주어야 한다.

 

prometheus.yml

 

global:
  scrape_interval: 10s
  scrape_timeout: 10s
  evaluation_interval: 1m

scrape_configs:
  - job_name: kafka-exporter
    metrics_path: /metrics
    honor_labels: false
    honor_timestamps: true
    sample_limit: 0
    static_configs:
      - targets: ['kafka-exporter:9308']

 

이제 그라파나 host_IP:3000 로 접근을 하고 그라파나에 로그인을 해보자

 

 

Data-source를 추가해줘야 하는데 수집한 매트릭 즉 prometheus 의 url를 써준면 된다.

이때 Grafana와 Prometheus는 도커 컴포즈로 같은 네트워크 상에 존재한다는것을 유의해야한다.

즉 IP로 접근하는것이 아니라 별칭으로 (도커 네트워크는 이름으로 구분한다) http://prometheus:9090 이렇게 접근해야한다.

이 문제때문에 꽤나 골치를 썩였다. 항상 도커를 사용할때는 네트워크 문제가 발목을 잡는다.

 

 

이제 kafka-exporter의 기본 대쉬보드를 적용하고 나면 아래와 같이 카프카의 기본 정보들을 모니터링 할수 있다.

 

 

도커는 헷갈리는 부분이 참많다. 오늘도 교훈을 얻었다.

오늘의 교훈은 입장을 바꿔 생각할줄 알아야한다것이다. 도커를 다룰땐 항상 내 기준이 아니라 도커입장에서 생각하자.