설치하기
Kafka Agent(exem-kafka-agent)는 Kafka 클러스터의 Broker, Topic, Consumer Group 메트릭 데이터를 수집해 엑셈원 수집 서버(Receiver)로 전송하는 모니터링 에이전트입니다. Kafka Agent는 On-Premise와 Docker 두 가지 방식으로 설치할 수 있습니다.
| 설치 방식 | 적합 환경 | 실행 방법 |
|---|---|---|
| On-Premise | 물리 서버, VM | java -jar로 직접 실행 |
| Docker | Docker(exemONE 도커 패키지) | docker-compose로 실행 |
지원 환경
| 항목 | 요구 사항 |
|---|---|
| Java | 17 이상 |
| OS | Linux |
메트릭 수집 방식
Kafka Agent는 두 가지 방식으로 메트릭을 수집합니다. 방식에 따라 수집 가능한 데이터가 다릅니다.
JMX 방식 — Kafka 프로세스에 JMX를 활성화하여 실시간 모니터링 및 세밀한 메트릭을 수집합니다. Kafka Server 또는 Java로 서비스되는 Kafka Consumer/Producer에 아래 옵션을 적용합니다.
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true \
-Djava.rmi.server.hostname={jmx_ip} \
-Dcom.sun.management.jmxremote.port={jmx_port} \
-Dcom.sun.management.jmxremote.rmi.port={jmx_port} \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"
Admin Client 방식 — Kafka 라이브러리의 Admin Client API를 사용해 토픽, 파티션, 브로커 등 클러스터 메타데이터와 상태 메트릭을 수집합니다. bootstrap server 주소가 필요합니다.
On-Premise로 설치하기
Java 17 이상이 설치되어 있어야 합니다.
EXEM-KAFKA-AGENT-{VERSION}.tar.gz설치 파일을 준비합니다.패키지를 압축 해제합니다.
tar -zxvf EXEM-KAFKA-AGENT-{VERSION}.tar.gzexem/kafka/cfg/kafka.conf파일을 열어 수집 서버 주소를 입력합니다.RECEIVER_ADDR=<Receiver IP>:9009에이전트를 실행합니다.
java -jar {패키지_경로}/exem/kafka/lib/exem-kafka-agent.jar
Docker로 설치하기
EXEM-KAFKA-AGENT~.tar.gz파일을 압축 해제합니다.$EXEMONE_HOME/containers에exemone-kafka-agent폴더를 생성하고, 하위에cfg,log폴더를 만듭니다.cfg폴더에kafka.conf와cfg.reload파일을 배치합니다.kafka.conf에 Receiver 주소를 입력합니다.RECEIVER_ADDR=<Receiver IP>:9009노트IP로 설정 시 Receiver와 연결되지 않으면
exemone-receiver:9009로 입력하세요.$EXEMONE_HOME/dockerfile/kafka-agent폴더를 생성하고 Dockerfile을 배치합니다.kafka-agent 이미지를 로드합니다.
docker load -i <kafka-agent-이미지>.tar.gz.env파일에 kafka-agent 이미지 정보를 추가합니다.KAFKA_AGENT_IMAGE=maxgauge/exemone-kafka-agent
KAFKA_AGENT_VERSION=3.0.12docker-compose.yml에 kafka-agent 서비스를 추가합니다.kafka-agent:
labels:
io.exem: true
io.exem.prod: exemone
io.exem.one.type: application
io.exem.one.app: kafka-agent
container_name: exemone-kafka-agent
build:
context: ${EXEMONE_HOME}/dockerfile/kafka-agent
args:
KAFKA_AGENT_IMAGE: ${KAFKA_AGENT_IMAGE}
KAFKA_AGENT_VERSION: ${KAFKA_AGENT_VERSION}
EXEMONE_USER_UID: ${EXEMONE_USER_UID}
EXEMONE_USER_GID: ${EXEMONE_USER_GID}
volumes:
- /etc/localhost:/etc/localhost:ro
- $EXEMONE_HOME/containers/exemone-kafka-agent/cfg:/home/exemone/kafka/cfg
- $EXEMONE_HOME/containers/exemone-kafka-agent/log:/home/exemone/kafka/log
deploy:
resources:
limits:
cpus: '2'
memory: 4g
environment:
HOST_UID: ${EXEMONE_USER_UID}
HOST_GID: ${EXEMONE_USER_GID}
networks:
- exemone_network
depends_on:
receiver:
condition: service_started
restart: unless-stopped
logging: *logging
security_opt:
- no-new-privilegeskafka-agent를 구동합니다.
scripts/restart.sh kafka-agent