kafka를 Grafana와 Prometheus로 모니터링 하는법
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의 기본 대쉬보드를 적용하고 나면 아래와 같이 카프카의 기본 정보들을 모니터링 할수 있다.
도커는 헷갈리는 부분이 참많다. 오늘도 교훈을 얻었다.
오늘의 교훈은 입장을 바꿔 생각할줄 알아야한다것이다. 도커를 다룰땐 항상 내 기준이 아니라 도커입장에서 생각하자.