grep

DevOps

AWS MSK PART3 — 모니터링을 구축해볼까요?

Fang여기어때

2022년 8월 30일

원문에서 보기 ↗

안녕하세요. 여기어때 서비스개발팀에서 백엔드 개발을 담당하고 있는 팡입니다😀

서비스개발팀은 여기어때 앱의 전시 데이터와 상품 데이터를 노출하고, 노출을 위한 각 도메인의 데이터를 동기화하는 서비스를 개발하고 운영하며, 여기어때 서비스 제일 앞단에서의 트래픽을 분산처리 하는 업무를 담당하고 있습니다. “2년차 개발자와 함께하는 서비스개발팀 탐방기”에 상세한 설명이 있으니 많은 관심 부탁드립니다.

AWS MSK PART2 — MSK 클러스터를 구축해볼까요? 글 재미있게 보셨나요?

이번 포스팅에서는 클러스터를 효율적으로 운영 및 관리하기 위해 꼭 필요한 모니터링 시스템 구축에 관해서 설명해드리고자 합니다.

AWS MSK PART 1 — MSK 도입 여정

AWS MSK PART 2 — 클러스터를 구축해볼까요?

AWS MSK PART 3 — 모니터링을 구축해볼까요? 👈

AWS MSK PART 4 — 운영은 어떻게 하고 있나요?

모니터링 요구사항

모니터링 시스템을 구축하기 전에 필수 요구사항을 간단하게 정리해볼까요?

MSK에서 제공하는 기본 모니터링

MSK를 생성하면 AWS 콘솔에서도 기본적인 모니터링을 제공해주고 있습니다.

브로커에 대한 Disk 사용률, CPU 사용률, Network Packet 정보들만 보여주니까 모니터링 요구사항을 만족하지 못하고 조금 아쉽습니다.

CloudWatch를 이용한 모니터링

PART2에서 MSK 클러스터 생성 시 Cloud Watch 메트릭에 대한 모니터링 옵션을 고를 수가 있었습니다.

Basic monitoring

Enhanced broker-level monitoring

Enhanced topic-level monitoring

Enhanced partition-level monitoring

MSK는 Amazon CloudWatch와 통합되므로 Amazon MSK 클러스터에 대한 CloudWatch 지표를 수집, 확인 및 분석할 수 있습니다.

MSK 클러스터에 대해 구성한 지표는 자동으로 수집되어 CloudWatch에 푸시되며, CloudWatch 서비스를 사용하여 대시보드를 생성하면 다양한 메트릭 지표를 모니터링 할 수 있습니다. 더욱 상세한 정보는 Amazon MSK metrics를 참고하시면 좋을 것 같습니다.

CloudWatch Alarm을 설정해서 경고가 발생하면 SNS, Lambda를 연동하여 Slack과 연동할 수도 있고 꽤 괜찮은 거 같습니다. 하지만 모니터링 필수 요구사항을 만족하지 못합니다. 예를 들면 kafka ACL 조회는 확인할 수 없습니다.

카프카 모니터링 도구 검토

AWS에서 제공하는 모니터링은 기능적으로 부족해서 모니터링 시스템 구축을 위해 자료를 검색하던 중 Overview of UI Tools for Monitoring and Management of Apache Kafka Clusters라는 글이 정말 좋았습니다. 모니터링에 관심 있으신 분이라면 꼭 보시는 것을 추천해 드립니다. 카프카 모니터링이 왜 중요한지 잘 설명되어 있고 Apache Kafka 클러스터를 위한 8가지 UI 모니터링 도구를 비교하는 표를 제공하고 있습니다.

도구마다 지원하는 기능이 다르고 사용자마다 기준이 다르므로 어떤 도구가 최고라고 말하기는 어렵습니다. 개발하는데 IDE(Integrated Development Environment) 도구로 Intellij, vscode, pycharm을 안 쓰고 vim을 최고라고 생각하는 개발자들도 꽤 많은 것처럼요?😀

오픈 소스로 직접 구축하기로 하고 도구는 AKHQ, Kowl, kafdrop, UI for Apache Kafka, CMAK를 직접 구축해서 사용해보겠습니다. Confluent CC, Conductor는 유료라서 제외하였고, Lenes는 기능이 너무 제한적이라서 제외하였습니다.

MSK 모니터링 구축

현재 구축된 MSK 모니터링 시스템 아키텍쳐입니다.

오픈소스 모니터링 도구들은 docker-compose를 사용하여 구축되어 있습니다. 모니터링을 구축하면서 제일 어려웠던 부분은 SASL/SCRAM 인증하는 부분이었습니다. 인증 관련된 가이드나 설정 파일의 예제가 상세하게 제공되지 않아서 인증 에러가 발생하면 에러 로그를 확인하고, github repository의 이슈에서 해당 이슈를 검색하면서 디버깅하였습니다.

모니터링 시스템은 AWS MSK PART2 — MSK 클러스터를 구축해볼까요?에서 클라이언트 머신(MSK 클러스터와 통신해서 제어할 수 있는 노드)에 인스턴스 타입은 m5.large를 사용하여 구축하였습니다. 참고로 EC2에 직접 카프카 클러스터를 구축하여 모니터링 하는 것과 MSK 모니터링을 구축하는 것에 큰 차이는 없습니다.

MSK

모니터링 도구

burrow

burrow-dashboard

cmak

kafdrop

akhq

UI for Apache Kafka

kowl

prometheus

grafana

slack

모니터링 시스템을 구축하기 위한 docker-compose 파일입니다. 모니터링 도구별로 설정 파일들이 존재하여 아래 파일만 가지고 docker-compose를 실행하면 실행은 되지 않습니다. 참고로만 봐주세요.

https://gist.github.com/jhhwang4195/ed37adcf9725edae4adb2ba2cc1b53f2#file-msk_docker_compose-yml

카프카 모니터링 도구 비교

여러 가지 모니터링 도구를 사용해보면서 기능을 정리하였습니다. (2022/04/29 기준으로 작성)

다양한 도구들이 있지만 저는 지원하는 기능이 많은 akhq, UI for Apache Kafka를 추천하고 싶습니다.

또한 kafka를 운영하면서 중점적으로 확인해야 할 지표 중 하나가 Consumer lag입니다. Producer에서 데이터를 넣는 속도가 Consumer에서 데이터를 읽는 속도보다 빠르면 Consumer에서는 토픽의 가장 최신 오프셋과 Consumer 오프셋의 차이가 발생하며 이러한 차이를 Consumer lag이라고 합니다.

즉, Consumer lag은 Kafka Producer와 Consumer 사이에 얼마나 많은 지연이 있는지를 나타냅니다.

링크드인에서 개발한 Consumer의 LAG을 모니터링하는 도구인 burrow를 사용하면 consumer lag을 모니터링하고 슬랙과 연동해서 사용할 수 있습니다.

Grafana에서는 data source를 prometheus, cloud watch를 설정하여 다양한 메트릭 지표를 확인할 수 있도록 구성하였습니다.

AWS MSK PART2 — MSK 클러스터를 구축해볼까요?에서 MSK 클러스터 생성 시 Prometheus를 통한 개방형 모니터링을 활성화하는 과정이 필요합니다.

prometheus를 사용한 오픈 모니터링 문서를 참고하시면 prometheus 설치 및 설정 관련해서 상세한 가이드를 확인할 수 있습니다.

마치며

이번 글에서는 MSK 클러스터를 효율적으로 운영 및 관리하기 위해 꼭 필요한 모니터링에 대해서 살펴보았습니다. MSK 모니터링 요구사항을 충족하기 위해 다양한 오픈소스를 활용하여 구축하였고 EC2에 직접 카프카 클러스터를 구축한 경우도 모니터링 구축 방법은 비슷합니다. 현재 MSK를 운영하면서 주로 burrow, akhq, ui for apache kafka, prometheus, cloudwatch, grafana, slack을 사용해서 모니터링하고 있습니다. grafana에서 브로커의 CPU, DISK에 알람을 설정하여 트래픽이 많아질 때 MSK 브로커의 확장이 가능한 시점에 슬랙으로 알림을 받을 수도 있습니다.

AWS MSK PART 4 — 운영은 어떻게 하고 있나요?에서는 운영에 관련된 내용을 살펴보도록 하겠습니다.

여기어때 서비스를 발전시키고 함께 성장하고 싶으신 개발자분들 많은 지원 부탁드릴게요!

끝까지 읽어주셔서 감사합니다.