kafka monitoring 종류 및 방법

Smart-JYS
6 min readMar 18, 2022

--

안녕하세요 오늘은 카프카 모니터링에 대해서 공유 드려 볼까 합니다.

kafka 모니터링의 경우 직접 만들지 않는 이상 오픈소스를 최대한 활용 해야 합니다. kafka를 사용하면서 경험한 내용을 토대로 글을 작성 해보도록 하겠습니다.

오늘 내용에서는 전제조건이 조금 있습니다.

  1. 직접 모니터링 솔루션을 만들 수 없을 때
  2. 카프카를 많이 사용해보지 못했고, 카프카 토픽, 파티션 또는 카프카 메트릭을 확인 하고 싶을 때
  3. 테스트 하면서 비용을 사용할 수 없을 때 즉, 오픈소스를 활용해야 할 때

위와 같은 상황일 때 사용할 수 있는 솔루션으로는 kafka manager, grafana 정도가 될 수 있을 것 같습니다.

kafka manager는 kafka cluster 설정, 브로커, 토픽, 파티션, 컨슈머 등등 전반적인 카프카에 대한 모니터링이 가능합니다. 아쉽게도 kafka manager는 kafka metric에 대한 모니터링은 할 수 없기 때문에 metric 모니터링은 grafana를 사용해야 합니다. grafana는 아래의 내용에서 다시 다루겠습니다.

kafka 모니터링으로는 confluent control center 라는 confluent에서 지원하는 좋은 유료 모니터링이 있고, 그 외 여러가지 솔루션이 있지만 위에 말씀 드린 전제 조건 하에 오픈소스를 최대한 활용 한다면 kafka manager, grafana 정도 될 것 같습니다.

테스트 환경을 소개 하기 위한 필수로 설치 되어 있어야 할 환경 입니다.

1. aws eks(kubernetes)2. kafka3. prometheus4. grafana5. cmak(kafka-manager)

kubernetes 환경에서는 helm 으로 설치 하는 것이 쉬운 편이므로 helm chart 설치 기반으로 작성 하였습니다.

kafka manager helm chart를 확인 해보니 stable/kafka-managerDEPRECATION이 되었습니다.

kafka manager의 경우 특별한 업데이트도 없고 deprecation이 되어도 크게 상관은 없지만, 굳이 deprecation 된 오픈소스를 사용할 이유는 없다고 생각합니다.

그에 대안으로는 yahoo/CMAK 가 있습니다. 해당 github에는 kubernetes 에서 install 할 수 있는 방법이 없는 것 같습니다.

구글링 한 결과 eshepelyuk/cmak-operator 에서는 helm 설치를 할 수 있으므로 해당 github에 대한 가이드를 보고 설치 했습니다.

helm install --create-namespace -n cmak-ns --version 0.2.1 mycmak cmak/cmak-operator

최신 버전의 경우 cronjob api 버전 이슈로 인해 0.2.1 버전을 설치 하게 되었고, port forward 옵션을 사용해서 접속을 해봤습니다.

kubectl port-forward -n cmak-ns service/cmak 9000:9000

kafka cluster를 등록하는 방법은 ui에서도 가능하지만, kafka cluster를 코드상으로 추가 할 수 있어서 values.yaml 파일에 kafka cluster 정보를 추가 하였습니다.

설정 정보는 아래 링크에 있습니다.

ui에 접근하게 되면 아래와 같이 kafka cluster의 정보가 잘 표시 됩니다.

이제 grafana에 kafka metric을 import 해보겠습니다.

prometheus, grafana는 이미 설치 되어 있다는 가정하에 작성하겠습니다.

confluentinc/cp-helm-charts에서 제공해주는 kafka cluster를 설치 하게 되면 grafana에서 모니터링 할 수 있도록 confluent-open-source-grafana-dashboard.json 파일도 같이 제공해 줍니다. grafana 에서 해당 Json 파일을 import 해주면 바로 metric 모니터링이 가능합니다.

  • json import
우측 상단 import click
  • datasource는 prometheus로 지정하고 다운로드 한 json 파일을 import 합니다.
upload JSON file

대시보드를 확인 해봅니다.

여기서 문제가 CPU, Memory 정보가 No data로 표시 됩니다. 이런 경우 promQL을 직접 확인해서 약간만 수정하면 바로 해결 됩니다. promQL을 확인 해보니 pod_name이 아닌 pod로 되어 있어서 아래와 같이 수정합니다. (apply)

sum(rate (container_cpu_usage_seconds_total{pod=~"$Release-cp-kafka-(\\d+)"}[5m])) by (pod_name)

메모리도 마찬가지 입니다.

sum(container_memory_usage_bytes{pod=~"$Release-cp-kafka-(\\d+)"}) by (pod_name)

이제 metric 이 잘 표시 되는 것 같습니다.

운영 환경에서라면 다른 방법을 찾아 봐야 하겠지만, 테스트환경에서 간단하고 빠르게 구성하는 방법에 대해서 해보았습니다.

사실 글을 작성하기 전에는 쉽게 설명하려고 했지만, 동일한 환경이 아니라면 구성하는데 어려움이 있을 수도 있을 것 같습니다.

그래도 이 글을 통해서 약간의 응용(?)하길 바라며 글을 마무리 하겠습니다.

--

--

Smart-JYS

자신이 하는 일을 잘 이해할수록 그 일을 더 잘한다.