본문으로 건너뛰기

설치하기

Kafka Agent(exem-kafka-agent)는 Kafka 클러스터의 Broker, Topic, Consumer Group 메트릭 데이터를 수집해 엑셈원 수집 서버(Receiver)로 전송하는 모니터링 에이전트입니다. Kafka Agent는 On-PremiseDocker 두 가지 방식으로 설치할 수 있습니다.

설치 방식적합 환경실행 방법
On-Premise물리 서버, VMjava -jar로 직접 실행
DockerDocker(exemONE 도커 패키지)docker-compose로 실행

지원 환경

항목요구 사항
Java17 이상
OSLinux

메트릭 수집 방식

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 이상이 설치되어 있어야 합니다.

  1. EXEM-KAFKA-AGENT-{VERSION}.tar.gz 설치 파일을 준비합니다.

  2. 패키지를 압축 해제합니다.

    tar -zxvf EXEM-KAFKA-AGENT-{VERSION}.tar.gz
  3. exem/kafka/cfg/kafka.conf 파일을 열어 수집 서버 주소를 입력합니다.

    RECEIVER_ADDR=<Receiver IP>:9009
  4. 에이전트를 실행합니다.

    java -jar {패키지_경로}/exem/kafka/lib/exem-kafka-agent.jar

Docker로 설치하기

  1. EXEM-KAFKA-AGENT~.tar.gz 파일을 압축 해제합니다.

  2. $EXEMONE_HOME/containersexemone-kafka-agent 폴더를 생성하고, 하위에 cfg, log 폴더를 만듭니다.

  3. cfg 폴더에 kafka.confcfg.reload 파일을 배치합니다. kafka.conf에 Receiver 주소를 입력합니다.

    RECEIVER_ADDR=<Receiver IP>:9009
    노트

    IP로 설정 시 Receiver와 연결되지 않으면 exemone-receiver:9009로 입력하세요.

  4. $EXEMONE_HOME/dockerfile/kafka-agent 폴더를 생성하고 Dockerfile을 배치합니다.

  5. kafka-agent 이미지를 로드합니다.

    docker load -i <kafka-agent-이미지>.tar.gz
  6. .env 파일에 kafka-agent 이미지 정보를 추가합니다.

    KAFKA_AGENT_IMAGE=maxgauge/exemone-kafka-agent
    KAFKA_AGENT_VERSION=3.0.12
  7. docker-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-privileges
  8. kafka-agent를 구동합니다.

    scripts/restart.sh kafka-agent