๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

๊ฐœ๋ฐœ ์ผ์ง€/[LOL Data Pipeline ๊ตฌ์ถ•ํ•˜๊ธฐ]

3. kafka์™€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ grafana ์„ธํŒ…

์จ๋ฐ 2023. 10. 25. 22:22

 

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๊ฐ„๋‹จํ•œ API ๊ตฌ์ถ• ํ…Œ์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค.

 

 

0. Kafka ๊ฐœ๋… ๊ณต๋ถ€ํ•˜๊ธฐ

 

 

 

 

 

1. docker-compose๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•ํ•˜๊ธฐ

 

 

 

์ด์ œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก Kafka๋ฅผ docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•ํ•ด๋ณด์•˜๋‹ค.

 

kafka broker 3๊ฐœ, zookeeper 3๊ฐœ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ฌ๋ ค ์ง„ํ–‰ํ–ˆ๋‹ค.

 

 

| docker-compose.yml

version: '2'
services:
  zookeeper-1:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "12181:2181"
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888

  zookeeper-2:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "22181:2181"
    environment:
      ZOOKEEPER_SERVER_ID: 2
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888

  zookeeper-3:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "32181:2181"
    environment:
      ZOOKEEPER_SERVER_ID: 3
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888

  kafka-1:
    image: confluentinc/cp-kafka:latest
    ports:
      - "19092:19092"
      - "19094:19094"
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      KAFKA_LISTENERS: INTERNAL://kafka-1:19092,EXTERNAL://kafka-1:19094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:19092,EXTERNAL://localhost:19094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_JMX_PORT: 9999

  kafka-2:
    image: confluentinc/cp-kafka:latest
    ports:
      - "29092:29092"
      - "29094:29094"
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      KAFKA_LISTENERS: INTERNAL://kafka-2:29092,EXTERNAL://kafka-2:29094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29092,EXTERNAL://localhost:29094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_JMX_PORT: 9999

  kafka-3:
    image: confluentinc/cp-kafka:latest
    ports:
      - "39092:39092"
      - "39094:39094"
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      KAFKA_LISTENERS: INTERNAL://kafka-3:39092,EXTERNAL://kafka-3:39094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:39092,EXTERNAL://localhost:39094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_JMX_PORT: 9999

 

 

 

 

2. Kafka ๋ชจ๋‹ˆํ„ฐ๋ง?

 

 

 

Kafka ๋ธŒ๋กœ์ปค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ํˆด๋“ค์ด ์กด์žฌํ•œ๋‹ค.

 

์–ด๋–ค ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์ถ•ํ•ด๋ณผ๊นŒ?

 

Kafka ๋ชจ๋‹ˆํ„ฐ๋ง์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด Kafka UI Tool์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธ€๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ, Kafka ๋ฉ”ํŠธ๋ฆญ์„ ํ†ตํ•ด ์ข€ ๋” ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ๋‹ค์–‘ํ–ˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ  ๋” ํ˜„์—…์— ์“ฐ์ผ ๊ฒƒ ๊ฐ™์€(?) Prometheus์™€ Grafana๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ๊ป˜ ๊ตฌ์ถ•ํ•ด๋ณด์•˜๋‹ค.

 

(Kafka์™€ ๊ฐ™์ด prometheus์™€ grafana๋ฅผ docker-compose๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์ง„ ๋ชปํ•ด์„œ ๋” ๋„์ „์ ์œผ๋กœ ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ๋„ ์žˆ๋‹ค ใ…Žใ…Ž)

 

 

 

| prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['prometheus:9090']

  - job_name: 'kafka'
    static_configs:
      - targets: ['kafka-exporter:9308']

 

 

 

| docker-compose.yml

 

์œ„์—์„œ ์ž‘์„ฑํ•œ docker-compose.yml์— ์ถ”๊ฐ€๋กœ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๊ตฌ์ถ•ํ•˜๋ฉด ๋œ๋‹ค.

 

  kafka-exporter:
    image: danielqsj/kafka-exporter:latest
    ports:
      - "9308:9308"
    command: ["--kafka.server=kafka-1:19092", "--kafka.server=kafka-2:29092", "--kafka.server=kafka-3:39092"]

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - kafka-1
      - kafka-2
      - kafka-3
      - kafka-exporter

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    depends_on:
      - kafka-1
      - kafka-2
      - kafka-3
      - prometheus
      - kafka-exporter
    volumes:
      - grafana-data:/var/lib/grafana

volumes:
  grafana-data:

 

 

 

prometheus์—์„œ ์‚ฌ์šฉํ•  kafka ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ์—ญํ• ์ธ kafka-exporter, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ์—ญํ• ์ธ prometheus, ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์‹œ๊ฐํ™” ์—ญํ• ์ธ grafana๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค.

 

 

 

ADD: kafka ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์šฉ prometheus, grafana docker-compose ๊ตฌ์ถ• · Lee-SungMin/LOL_Data_Pipeline@4cc6381

Lee-SungMin committed Oct 27, 2023

github.com

 

 

 

๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด kafka ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•œ ๋ฒˆ์— ๋„์›Œ๋ณด์•˜๋‹ค.

 

 

 

 

 

 

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋จ์„ ํ™•์ธํ–ˆ๋‹ค.

 

 

 

3. Prometheus ํ™•์ธํ•˜๊ธฐ

 

 

 

Prometheus ๊ฐ™์€ ๊ฒฝ์šฐ, ํฌํŠธ๋ฅผ 9090์œผ๋กœ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

 

์ƒ์œ„ ํƒญ์—์„œ Status > Targets๋ฅผ ํด๋ฆญํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

4. Kafka ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํ…Œ์ŠคํŒ…

 

 

 

Kafka ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๊ตฌ์„ฑ์ด ์ž˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์นดํ”„์นด ์ปจํ…Œ์ด๋„ˆ 2๊ฐœ์— ์ ‘์†ํ–ˆ๋‹ค.

 

 

 

 

Kafka-1 ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†ํ•˜์—ฌ, test1 ์ด๋ผ๋Š” ํ† ํ”ฝ์„ ์ƒ์„ฑํ–ˆ๋‹ค.

 

 

 

 

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ๊นŒ์ง€ ์ƒ์„ฑ๋œ Kafka ํ† ํ”ฝ ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, test1์ด๋ผ๋Š” ํ† ํ”ฝ์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๋˜ํ•œ ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ ํ† ํ”ฝ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ ๋‹ค์Œ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„ ์ฐฝ์œผ๋กœ Kafka-3 ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†ํ–ˆ๋‹ค.

 

 

 

 

test1 ํ† ํ”ฝ์˜ ๋‚ด์šฉ์„ producer๋ฅผ ์‚ฌ์šฉํ•ด produceํ•œ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Kafka-1 ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋„์šด ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„๊ฐ€ consumer๋ฅผ ์‚ฌ์šฉํ•ด ํ† ํ”ฝ ๋‚ด์šฉ์„ ๋ฐ›์•„์˜ค๋„๋ก ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

beginning ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ data๋ถ€ํ„ฐ ์ฝ์–ด์™”๋‹ค.

 

 

 

์ด๋กœ์„œ Kafka ํ† ํ”ฝ์„ ๋ณด๋‚ด๊ณ  ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์ด ์ž˜ ์ง„ํ–‰๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

(Kafka-1,3 ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋ธŒ๋กœ์ปค๋ผ๋ฆฌ ํ•ด๋‹น ๊ณผ์ •๋“ค์ด ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค.)

 

 

 

 

4. Grafana ๋Œ€์‹œ๋ณด๋“œ ํ™•์ธํ•˜๊ธฐ

 

 

 

grafana์˜ ํฌํŠธ ๋ฒˆํ˜ธ์ธ 3000๋ฒˆ์œผ๋กœ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์›น ํŽ˜์ด์ง€๋ฅผ ์ ‘์†ํ•˜๋ฉด admin ํŽ˜์ด์ง€๋กœ ์—ฐ๊ฒฐ๋˜๊ณ , ์•„์ด๋”” ๋ฐ ๋น„๋ฒˆ์€ admin์œผ๋กœ ๋กœ๊ทธ์ธํ–ˆ๋‹ค.

 

๋Œ€์‹œ๋ณด๋“œ๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์ข‹์€๋ฐ, ์ฒ˜์Œ ์ ‘๊ทผํ•˜๋Š” ๊ฑฐ๋ผ ์•„์ง ๋ฏธ์ˆ™ํ•ด์„œ ๋Œ€์‹œ๋ณด๋“œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

kafka-exporter ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ๊ณณ์—์„œ ๋Œ€์‹œ๋ณด๋“œ๋„ ํ•จ๊ป˜ ๊ณต์œ ํ•˜๊ธธ๋ž˜ ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.

 

GitHub - danielqsj/kafka_exporter: Kafka exporter for Prometheus

Kafka exporter for Prometheus. Contribute to danielqsj/kafka_exporter development by creating an account on GitHub.

github.com

 

Kafka Exporter Overview | Grafana Labs

Thank you! Your message has been received!

grafana.com

 

 

Dashboard > New > Import๋ฅผ ํด๋ฆญํ•˜๊ณ , ํ…œ๋ธ”๋ฆฟ ID์ธ 7589๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Loadํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

 

 

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด, ์œ„์—์„œ ๋งŒ๋“  Kafka ํ† ํ”ฝ์— ๋Œ€ํ•ด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

(๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์—„์ฒญ ์˜›๋‚ ์— ๋งŒ๋“  ๋ฒ„์ „์ด๋ผ ํ•„์š”ํ•œ ์ •๋ณด์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.)

 

 

 

์ด์ œ Kafka๋ฅผ ํ†ตํ•ด ๋” ๋‹ค์–‘ํ•œ ๋™์ž‘๋“ค์ด ์ด๋ฃจ์–ด์ง€๋„๋ก ๊ตฌํ˜„ํ•ด์„œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

 

 

 

 

*์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ ์ž๋ฃŒ๋“ค

 

 

[Kafka] Docker Compose๋กœ ๋ฉ€ํ‹ฐ๋ธŒ๋กœ์ปค Kafka ๊ตฌ์„ฑํ•˜๊ธฐ

 

devocean.sk.com

 

Docker-compose๋กœ Prometheus + Grafana ์„ค์น˜

Docker-compose ๋ฐฐ๊ฒฝ ์„ค๋ช… ์ผ๋ฐ˜์ ์œผ๋กœ prometheus๋‚˜ Grafana๋ฅผ ์„ค์น˜ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, docker full๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋•ก๊ฒจ์™€์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒŒ ์ฃผ๋œ ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•˜์ง€๋งŒ, container๊ฐ€ ๋‹ค์ˆ˜ ๊ฐœ๊ฐ€ ๋  ๊ฒฝ์šฐ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ๊ทธ๋ž˜

countrymouse.tistory.com

 

[Kafka Monitoring] Prometheus & Grafana

๊ฐœ๋ฐœ์„œ๋ฒ„์— ๊ตฌ์ถ•๋œ Kafka 3 Node Cluster์˜ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋Œ€์‹œ๋ณด๋“œ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด Prometheus๋กœ Kafka ์ •๋ณด๋ฅผ ๊ธ์–ด์˜ค๊ณ  ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ Grafana ๋Œ€์‹œ๋ณด๋“œ๋กœ ํ‘œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. Prometheus

mj-sunflower.tistory.com

 

[Kubernetes] Grafana ์—์„œ Kafka ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ #Prometheus #kafka-exporter

[Kubernetes] Grafana์—์„œ Kafka ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ Kubernetes ์—์„œ PLG ์Šคํƒ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ๋ผ๋Š” ์ฃผ์ œ๋กœ ์ž‘๋…„ 10์›”์ฏค์— ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ํŒ€์—์„œ์ง„ํ–‰ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—๋„ ๋งŽ์€ ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ Kafka

ksr930.tistory.com