본문 바로가기
카테고리 없음

kafka_exporter로 카프카 모니터링하기

by 오피스포디 2024. 2. 25.
반응형

카프카는 기본적으로 cli를 통해 현재 토픽이나 컨슈머 그룹의 상태를 알 수 있습니다. 다만 이를 계속해서 모니터링하기 위해 cli를 통해서 이 상태를 지속적으로 알아오는 데는 한계가 있을 수 있습니다. 그래서 카프카의 브로커, 토픽 또는 컨슈머 그룹에 대해 모니터링하기 위해 kafka_exporter 를 사용해서 grafana 로 이 데이터를 표출할 수가 있습니다. 오늘은 이를 테스트한 과정에 대해 살펴보겠습니다.

 

테스트 환경

가장 먼저 테스트 환경은 다음과 같습니다. 대부분은 VM 환경에 설치하였으며, 그라파나만 Docker에 설치하였습니다. 원래는 모두 도커에 설치해서 하려고 했는데 카프카같은 경우에는 제 로컬 환경에서 파이썬으로 프로듀서 / 컨슈머를 작성하고 카프카에 보내려고 했으나 뭔가 네트워크 설정이 잘 안되어서 관련된 것을 VM에 설치하였습니다.

Ubuntu 22.04 버전이 깔린 VM (Hyper-V로 생성)

  • Kafka 설치
  • Zookeeper 설치
  • kafka_exporter 설치
  • prometheus 설치

Docker

  • Grafana 설치 (grafana:latest)

로컬

  • 카프카 모의 프로듀서
  • 카프카 모의 컨슈머

 

테스트 환경 셋업

테스트 환경 셋업 중에, 다른 글에서 이미 설명한 것은 링크로 대체하고 이 글에서는 kafka_exporter 와 prometheus 설치 방법을 설명하겠습니다.

카프카와 그라파나

먼저 카프카를 올리기 위한 방법은 아래 글에서 설명하므로, 이를 참조하세요.

 

우분투에 아파치 카프카 설치하기

아파치 카프카를 우분투에 설치하는 방법을 알아보겠습니다. 설치에 사용된 우분투 버전은 22.04 입니다. 설치하기 전에 아래의 명령어를 통해 먼저 자바를 설치해 줍니다. sudo apt update sudo apt upgr

depotceffio.tistory.com

 

그 다음으로 그라파나 설치 같은 경우에는, Docker 환경에 설치해야 하므로, 아래 글을 참조하세요.

 

 

도커 데스크탑 설치하고 사용하기

도커를 쓸 줄 몰랐는데, 한번 사용하기 시작하니까 배우기도 쉽고 이렇게 쉽고 빠르게 쓸 수가 있나 싶네요? 오늘은 도커 데스크탑을 설치하고 사용하는 방법을 PostgresQL DB를 설치하는 예제를 통

depotceffio.tistory.com

kafka_exporter 설치

사실 카프카를 모니터링하는 데는, jmx_exporter 를 사용해서 하라는 글이 더 많았습니다만 이는 카프카 내부의 토픽이나 컨슈머 그룹보다는 카프카라는 서비스 자체가 잘 돌고 있는지를 모니터링하는 데 좀 더 초점이 맞춰져 있습니다. 자바 기반의 앱이나 서비스가 잘 돌고 있는지를 일반적으로 모니터링하기 좋은 exporter 라고 생각하면 될 거 같아요. exporter 가 뭔지는 일단 이따가 알아보기로 하고 우선 설치부터 해보시죠.

 

먼저 아래의 github 프로젝트로 이동해서, clone할 주소를 받습니다.

 

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

 

그다음 카프카 서버에 터미널로 접속해서 (이 글의 환경인 경우 VM에 터미널로 접속하는 게 되겠죠?) 위 프로젝트를 클론해 줍니다. 본인이 원하는 폴더를 하나 적당히 생성해 주세요. 저같은 경우에는 ~/git 폴더를 하나 생성해서 거기에 clone 하였습니다.

 

git clone https://github.com/danielqsj/kafka_exporter.git

 

깃허브 프로젝트에도 나와 있지만, 이 소스 코드를 직접 빌드해서 사용하면 됩니다. golang 으로 짜여져 있고, 아래와 같이 작성하시면 됩니다. make 명령어를 사용할 거예요. make 명령어는 Makefile 이 있는 폴더에서 치면 알아서 인식합니다. make 가 없으면 sudo apt install make 해서 설치 후 사용하세요.

 

make

 

저의 경우에는 아래의 폴더에서 위 명령어를 수행하였습니다. 그러면 kafka_exporter 라는 실행할 수 있는 파일이 하나 생길 거예요.

 

kafka_exporter make 결과
kafka_exporter make 결과

 

이후에, 이를 실제로 실행할 폴더로 kafka_exporter 파일을 옮겨 줍니다. 저의 경우에는 /usr/local/kafka_exporter 폴더를 생성하고, 그 안에 kafka_exporter 파일을 이동해 두었습니다. 또한 /usr/local 폴더에 아래에서 설명할 prometheus 도 복사해 두었습니다.

 

/usr/local 폴더 안에 kafka_exporter 폴더를 만들고, 그 안에 파일을 복사
/usr/local 폴더 안에 kafka_exporter 폴더를 만들고, 그 안에 파일을 복사

 

prometheus 설치

아래 다운로드 링크로 이동합니다.

 

Download | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

 

저는 리눅스에 설치할 예정이므로, 다운로드 페이지에서 원하는 버전 중 리눅스 용을 우클릭해서 다운로드 링크를 복사합니다. 

 

프로메테우스 다운로드 링크 복사
프로메테우스 다운로드 링크 복사

 

그리고 다음 일련의 명령어를 통해 다운로드를 받고 압축을 해제합니다.

 

# 원하는 디렉토리로 이동한 후
cd ~

# 적당한 이름의 디렉토리를 하나 생성하고 그 위치로 이동
mkdir prometheus
cd prometheus

# 복사한 링크를 다운로드 후, 압축 해제
wget https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar xzvf prometheus-2.50.0.linux-amd64.tar.gz

# 적당한 폴더로 이동
sudo mv prometheus-2.50.0.linux-amd64 /usr/local/prometheus

 

이제 여기까지 하면 필요한 모듈을 다운받고 설치하는 작업은 끝이구요, 이제는 설치한 모듈들을 설정하고 실행해 보겠습니다.

 

반응형

 

각 모듈 실행

먼저, kafka_exporter 를 통한 카프카 모니터링의 구조는 다음과 같습니다.

 

kafka_exporter 를 통한 카프카 모니터링 구조
kafka_exporter 를 통한 카프카 모니터링 구조

 

kafka_exporter 에서 카프카 내부 정보를 지속적으로 뽑아내고, prometheus 가 이를 적절한 형태로 변형해서 시계열 DB 형태로 변환합니다. 그런 다음에 그라파나가 프로메테우스를 읽어와서 PromQL을 통해 여러가지 적절한 그래프를 보여주는 식입니다. 최종적인 결과를 먼저 보여드리자면 다음 그림과 같습니다.

 

kafka_exporter와 그라파나를 이용한 카프카 모니터링 그래프
kafka_exporter와 그라파나를 이용한 카프카 모니터링 그래프

 

이 그래프를 만들기 위한 과정을 이제부터 하나하나 따라가 볼게요. 모듈을 실행하는 순서는, 카프카 → kafka_exporter → prometheus → grafana 순서입니다. 받아가는 순서대로 한다고 보시면 됩니다.

 

카프카 실행하기

카프카 실행하기는 마찬가지로 위의 링크의 글을 참조하시면 되겠습니다. 일단 카프카는 이걸로 실행되었다고 보고 넘어갈께요.

 

 

우분투에 아파치 카프카 설치하기

아파치 카프카를 우분투에 설치하는 방법을 알아보겠습니다. 설치에 사용된 우분투 버전은 22.04 입니다. 설치하기 전에 아래의 명령어를 통해 먼저 자바를 설치해 줍니다. sudo apt update sudo apt upgr

depotceffio.tistory.com

 

kafka_exporter 실행하기

카프카가 실행된 상태라면, kafka_exporter 실행만 해주면 카프카 자체에 별도의 추가적인 설정은 필요없습니다. 다음 명령어로 실행합니다. 경로는 각자 설치된 경로로 변경하여 실행해 주세요.

 

sudo /usr/local/kafka_exporter/kafka_exporter --kafka.server=localhost:9092

 

저의 경우 카프카와 kafka_exporter 가 같은 서버에서 돌고 있으므로, --kafka.server 옵션에 localhost 가 들어갑니다. 그리고 카프카 포트는 기본 포트인 9092를 사용하고 있었기 때문에 이렇게 설정했습니다. 본인의 카프카 설정이 다르다면 그에 맞게 실행해 주시면 됩니다.

 

kafka_exporter 실행 결과
kafka_exporter 실행 결과

 

실행하고 나면 위와 같이 카프카에서 받아온 내용을 특정 포트를 열고 다른 애가 받아가길 기다리고 있습니다. 받아간다는 다른 애가 바로 prometheus인 거고, 그러면 이제 프로메테우스 실행을 할 때 저 9308 포트에서부터 받아가면 되겠죠? 이제 이 내용으로 프로메테우스 설정하고 실행을 해 보겠습니다.

prometheus 실행하기

프로메테우스는 실행하기 전에 먼저 설정을 해줘야 합니다. prometheus 실행 파일과 동일한 위치에 있는 prometheus.yml 파일을 열어서 kafka_exporter 를 받아갈 수 있도록 설정해 줍시다. 아래와 같이 설정하면 동작합니다.

 

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "kafka-exporter"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9308"]

 

 

다른 건 기본 설정에서 건드린 게 없구요, scrape_configs 아래 부분만 딱 두개 설정을 해줬습니다. job_name 은 원하시는 대로 작성하면 되고, static_configs 하위의 targets 만 kafka_exporter 가 리스닝하고 있는 포트를 연결해주면 됩니다. 저는 프로메테우스도 카프카 / kafka_exporter 와 동일한 서버에 올릴 것이기 때문에 localhost:9308 이라는 설정이 됩니다. 다른 서버에 올리는 등 환경이 다르다면, 그에 맞게 설정해 주세요.

 

이후에 프로메테우스를 실행하면 됩니다. 프로메테우스가 설치되어 있는 그 폴더로 가서 실행해야 되더라고요. 먼가 인자로 집어넣을 수 있나 싶었는데... 서비스로까지 만들긴 귀찮고 해서 그냥 실행합니다.

 

cd /usr/local/prometheus
sudo ./prometheus

 

먼저 프로메테우스가 설치된 폴더로 이동하고, 실행하는 명령어입니다. 그러면 프로메테우스가 실행되면서 이제 로그가 남기 시작합니다. 

 

연결이 잘 됐는지 어쩐지 확인하기 위해서 웹 UI로 접속해 보겠습니다. {prometheus 가 설치된 서버 IP}:9090 으로 인터넷 브라우저로 접속해 보면 아래와 같이 설정한 대로 연결된 것을 보실 수 있습니다. 이 화면을 보시기 위해서는 Status > Targets 메뉴로 접속하시면 됩니다.

 

프로메테우스의 타겟이 연결된 모습.
프로메테우스의 타겟이 연결된 모습.

 

grafana 실행하기

그라파나는 설정해줄 것도 하나도 없습니다. 저는 Docker 에서 깔았으므로, 포트 매핑만 해줬습니다. (기본포트 3000) 포트 매핑은 Docker 내부와 로컬 환경의 포트를 매핑해 줘서, 로컬 환경에서 예를 들어 localhost:3000 이라고 하면 도커 내부의 컨테이너 중 이와 매핑된 포트가 있다면 그리로 연결해 줍니다.

 

그라파나의 기본 포트가 3000 이기 때문에, 로컬 포트 3000과 그라파나 포트 3000을 매핑해 주었고, 웹 UI로 실행합니다. 실행한 후 연결할 데이터를 고르는데, 이 때 프로메테우스를 골라주면 됩니다. 메뉴를 클릭하고 Connections > Data sources 를 선택합니다.

 

그라파나에서 데이터 커넥션 설정하기 메뉴
그라파나에서 데이터 커넥션 설정하기 메뉴

 

Add new data source 를 누르고, 여기에서 prometheus 를 검색합니다. 그리고 프로메테우스가 설치된 서버의 IP와 포트를 입력해 주면 알아서 연결됩니다.

 

그라파나와 프로메테우스 연결하기
그라파나와 프로메테우스 연결하기

 

여기까지 하면 설정은 끝났습니다. 이후에는 그라파나에서 대시보드를 추가하고, 여러가지 쿼리를 날려 가면서 원하는 데이터를 얻으면 됩니다. PromQL로 쿼리를 날리는데, 저도 익숙치 않기도 하고 아직 좀 함수들의 뜻을 명확히 모르겠는 부분이 있어서 이 글에는 포함시키지 않겠습니다. 다만 위에서 보여드린 대시보드에서 그래프 중 하나를 예로 들면 다음과 같습니다.

 

그라파나 그래프 만들기 : 컨슈머 그룹 별 초당 처리량
그라파나 그래프 만들기 : 컨슈머 그룹 별 초당 처리량

 

그림 하단의 쿼리가 보이시나요? sum(rate(....)) by (topic, consumergroup) 이게 쿼리 형태입니다. 보다 보니까 무슨 뜻인지는 알겠는데, 시계열 DB의 구조를 잘 모르는지라 조금 더 파악이 필요할 거 같습니다. 위 쿼리는 토픽과 컨슈머 그룹 별로 초당 처리량을 보는 쿼리이구요, 각 토픽의 파티션 단위까지는 보여주지 않도록 sum() 함수를 사용한 예시입니다. 이런 식으로 해 가면서 하나씩 작성한 결과가 위에 보여드린 전체 대시보드 형태입니다.

 

 

 


 

 

 

 

오늘 글은 여기서 마치도록 하고, 다음 글에는 kafka_exporter 자체에 대해서 조금 더 공부해서 작성해 보겠습니다. 읽어주셔서 감사합니다.

 

kafka_exporter 활용하여 카프카 모니터링하기
kafka_exporter 활용하여 카프카 모니터링하기

반응형

댓글