홈서버에서 그라파나를 통해 Kafka 모니터링을 설정하면서 겪은 문제 해결 과정을 공유합니다.
기본적으로 리소스가 제한된 환경에서 작업하기 때문에 메모리와 CPU 사용량을 제어하고, Kafka와 Prometheus Exporter 간 연결 설정에서 SASL 인증을 추가하는 방법을 다룹니다.
1. Prometheus-Kafka-Exporter 설치
exporter 설치 후 연결이 지속적으로 실패하는 문제가 발생했는데,
원인을 분석해보니 Kafka SASL 인증 설정 누락과 Kafka 서버 주소를 자동으로 찾지 못하는 두 가지 문제가 있었습니다.
따라서 아래와 같이 인증 정보와 Kafka 서버 주소를 명시적으로 설정하여 Helm으로 설치를 진행했습니다.
# 해당 명령어로 어떤 value 들을 설정할 수 있는지 볼 수 있습니다.
helm show values prometheus-community/prometheus-kafka-exporter | grep sasl
helm install kafka-exporter prometheus-community/prometheus-kafka-exporter \\
--set kafkaServer[0]="kafka.kafka.svc.cluster.local:9092" \\
--set sasl.enabled=true \\
--set sasl.handshake=true \\
--set sasl.scram.enabled=true \\
--set sasl.scram.mechanism="scram-sha256" \\
--set sasl.scram.username="user1" \\
--set sasl.scram.password=""<PASSWORD>" \\
--set resources.requests.memory="50Mi" \\
--set resources.requests.cpu="50m" \\
--set resources.limits.memory="100Mi" \\
--set resources.limits.cpu="100m" \\
--set scrapeInterval="1m" \\
--namespace kafka
해당 설정은 제한된 리소스를 고려하여 메모리와 CPU 요청/제한 값을 최소화했으며,
SASL 인증 방식으로 scram-sha256을 적용했습니다.
또한 Kafka 서버와의 안정적인 연결을 위해 브로커 주소를 명시적으로 지정했습니다.
*명령어 중 scrapeInterval="1m" 는 메트릭 수집 주기를 1분으로 지정하는 것입니다.
2. 그라파나 플러그인 설치 및 Kafka 모니터링 설정
Kafka Exporter와 Prometheus를 연동하는 과정에서, 대부분의 문서들은 prometheus.yml이나 values.yaml 파일을 수정하고 Prometheus를 재시작하는 방법을 제시하고 있었습니다.
하지만 이미 잘 운영 중인 Prometheus 서버를 재시작하는 것은 적절하지 않다고 판단했습니다.
Redis의 경우 플러그인을 통해 쉽게 연결할 수 있기 때문에 Prometheus에서도 Kafka 모니터링을 위한 플러그인이 있는지 찾아보았습니다.
다행히 Prometheus에 적합한 플러그인을 찾을 수 있었고, 이를 활용하여 재시작 없이 문제를 해결할 수 있었습니다
플러그인 목록에서 'kafka'를 검색해 다운로드 및 설치한 후, 연결 설정에서 정보를 입력하면 됩니다.
- servers: 서비스IP:포트 (Kafka 브로커의 ClusterIP와 포트)
- API Key: user1:<PASSWORD>
API Key는 JSON 형식으로 입력하라고 적혀 있었지만, Kafka SASL 인증 정보를 그대로 입력하면 됩니다.
서버 IP는 kubectl get svc 명령어로 확인할 수 있습니다.
$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka ClusterIP 10.98.148.10 <none> 9092/TCP 24h
kafka-controller-headless ClusterIP None <none> 9094/TCP,9092/TCP,9093/TCP 24h
kafka-exporter-prometheus-kafka-exporter ClusterIP 10.107.240.208 <none> 9308/TCP 21m
저는 처음에 서버 IP(Kafka 브로커 서비스 IP)를 잘못 설정하는 바람에 연결이 계속 실패했습니다.
이 점을 꼭 주의하시기 바랍니다…😅
오늘도 결국 docs를 꼼꼼히 읽어야 겠다는 것을 느꼈습니다. 👍
'프로젝트 > 프로젝트 과정' 카테고리의 다른 글
Kubernetes 환경에서 Spring Boot 애플리케이션 모니터링하기: Prometheus와 Grafana 설정 가이드 (1) | 2024.11.01 |
---|---|
[Rocky Linux9] 한정된 리소스 환경에서 Helm으로 Redis 설치하기 (1) | 2024.10.28 |
[Rocky Linux 9] 한정된 리소스 환경에서 Kubernetes 기반 Kafka 설치 및 설정하기 (0) | 2024.10.26 |
[사이드 프로젝트] 한정 수량 인기 상품 구매 서비스 만들기: 요구 사항 (0) | 2024.09.26 |
GlobalExceptionHandler와 ExceptionHandlingFilter의 차이점 (0) | 2024.09.19 |