•
이 문서는 Cabi의 백엔드 모니터링이 어떻게 흘러가고 있는지에 관한 큰 흐름을 알고 싶은 분께 추천합니다.
스프링에서 위로 뻗어나가는 화살표가 뭐죠? 에 대한 말씀드리겠습니다.
결론적으로는 백엔드 모니터링 시스템입니다!
스프링에서 수집된 정보를 각각 pinpointAPM과 Prometheus로 보내 이를 모니터링할 수 있습니다.
모니터링이란
•
모니터링(Monitoring)은 시스템의 상태와 성능을 지속적으로 관찰하고, 이를 통해 문제를 사전에 감지하거나 장애 발생 시 신속히 대응할 수 있도록 돕는 활동입니다.
•
모니터링을 통해 로그를 분석하여 장애의 원인을 식별할 수 있고, 성능을 최적화할 수 있어 중요한 관리 방법이라 말할 수 있습니다.
모니터링 도구의 예
•
Prometheus: 실시간 데이터 수집 및 시계열 데이터 저장소
•
Grafana: 데이터 시각화를 위한 대시보드 제공
•
Pinpoint: 애플리케이션 트랜잭션 추적 및 성능 분석
•
Zabbix: 네트워크 및 서버 모니터링 도구
•
New Relic: 클라우드 기반 애플리케이션 모니터링
이 중 Cabi에서 사용하는 Prometheus, Grafana, Pinpoint에 대해 좀 더 자세히 알아보아요.
Spring Boot Actuator
•
Spring Boot Actuator는 애플리케이션의 상태, 메트릭, 트래픽, 로그 등의 다양한 운영 정보를 제공해 스프링 애플리케이션의 운영 및 모니터링을 돕는 기능입니다.
•
기본적으로 애플리케이션의 헬스 체크, 메트릭, 애플리케이션 상태 등을 외부 시스템에 노출하는 HTTP 엔드포인트를 제공합니다.
◦
/actuator/metrics: 애플리케이션의 다양한 메트릭(예: 요청 횟수, 응답 시간, 힙 메모리 사용량 등)을 수집 및 제공.
◦
/actuator/health: 애플리케이션의 상태를 점검하여 헬스 체크 정보를 제공.
◦
/actuator/env: 환경 변수 및 애플리케이션의 프로퍼티 정보를 제공.
메트릭 데이터로 바꿔주는 과정
1.
Spring Boot Actuator가 다양한 메트릭을 수집
2.
micrometer라는 라이브러리를 통해 메트릭을 Prometheus, Grafana와 같은 외부 시스템에 전달
이 때 메트릭은 시계열 데이터로 변환, 다른 시스템에서 모니터링 및 시각화 가능
따라서 Spring Boot Actuator와 메트릭을 사용해 애플리케이션에서 발생하는 메트릭 데이터를 외부 모니터링 시스템으로 전송하거나 실시간으로 모니터링할 수 있습니다.
또한, Prometheus는 Alertmanager와 통합되어 경고 시스템을 제공합니다. 설정한 메트릭이 임계값을 초과하거나 특정 조건이 만족되면, 알림을 통해 문제를 빠르게 인지할 수 있습니다.
Prometheus
Prometheus는 오픈 소스 시스템 모니터링 및 경고 도구로, 주로 시계열 데이터 수집과 저장에 특화되어 있습니다. 시간에 따른 변화를 추적할 수 있어, 히스토리 분석이나 트렌드 분석이 가능합니다.
•
ex. 서버 성능이 저하된 원인을 과거 데이터를 기반으로 분석
모니터링과 알림 시스템을 통합하여, 시스템의 상태를 실시간으로 추적하고 이상 징후나 성능 저하를 빠르게 탐지하는 데 유용합니다.
•
ex. CPU 사용량이 90%를 초과하면 경고 알림을 보내게 설정
또한 Grafana / Alertmanager / Kubernetes 등과 쉽게 통합되어 모니터링 대시보드, 알림 시스템 등에서도 활용할 수 있습니다.
Prometheus의 데이터 수집 과정
1.
Prometheus는 설정된 주기로 Spring Actuator의 /actuator/prometheus 엔드포인트에 HTTP 요청을 보내어 애플리케이션의 메트릭 데이터를 수집
2.
Actuator는 애플리케이션의 다양한 상태 정보(헬스 체크, 메트릭 등)를 Prometheus 형식으로 제공
3.
Prometheus는 수집한 데이터를 시계열 데이터베이스에 저장
4.
수집된 메트릭은 Prometheus의 메모리 내 데이터베이스에 저장되어 쿼리로 조회하거나 경고 설정 가능
Grafana
Grafana는 오픈 소스 분석 및 모니터링 플랫폼으로, 다양한 데이터 소스를 연결하여 시각화하고, 대시보드를 통해 실시간 데이터를 모니터링 할 수 있는 기능을 제공합니다.
주로 시계열 데이터와 메트릭 데이터 같은 실시간 데이터를 시각적으로 표현하는 데 유용합니다.
Cabi에서는 Prometheus의 데이터를 Grafana에서 시각화하여 모니터링합니다.
Grafana 사용 예시
•
모니터링과 경고
◦
시스템의 다양한 시스템 메트릭을 실시간으로 시각화하여 서버 상태를 모니터링하고, 문제가 발생하면 알림을 통해 빠르게 대응할 수 있습니다.
•
데이터 시각화
◦
데이터를 차트, 그래프, 표 등으로 시각화하여, 시스템 상태를 직관적으로 파악할 수 있습니다.
•
문제 분석
◦
데이터가 시각화되면 성능 저하나 오류를 빠르게 찾아내어 원인을 분석하고 해결할 수 있습니다.
Pinpoint 란?
오픈 소스 APM(Application Performance Management) 도구로, 대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼입니다.
Pinpoint는 분산된 마이크로서비스 환경에서 트랜잭션 추적과 성능 병목현상 분석에 특화되어 있습니다.
•
Spring Actuator를 통해 수집한 데이터와 Pinpoint 에이전트를 결합해 요청의 흐름을 추적하고,
특정 메소드나 서비스에서의 지연을 분석할 수 있습니다.
•
이를 통해 서비스 간 호출 관계, 호출 시간, 오류 발생 지점을 확인할 수 있습니다.
◦
ex. 특정 API가 느린 이유를 데이터베이스 쿼리 문제로 추적하거나, 호출 간소화 방안을 설계
Pinpoint의 데이터 수집 과정
1.
서버에서 필요한 내용들(트랜잭션 정보, 성능 지표 등)을 pinpoint-agent가 수집하여 pinpoint collector 로 전송
2.
pinpoint collecter가 이를 수집해 데이터를 저장
a.
pinpoint-hbase : 대량의 트랜잭션 로그 및 추적 데이터(트랜잭션의 자세한 흐름과 과정) 저장
b.
MySQL : 트랜잭션에 관련된 메타데이터(트랜잭션을 간략히 설명하는 정보)와 같은 관계형 데이터 저장
•
Pinpoint-web에서 수집된 데이터를 시각화하여 사용자에게 실시간 성능 모니터링 기능 제공
Pinpoint vs Grafana
그럼 왜 둘 다 쓰지? 라는 의문이 들 수도 있을 것 같아서 준비했습니다
Pinpoint
•
애플리케이션의 트랜잭션 추적과 분산 추적을 제공하여, 서비스 간의 상호작용을 상세히 모니터링
•
요청의 흐름을 추적하고, 문제 발생 시 문제 지점을 찾아내는 데 유용합니다.
Grafana
•
실시간 대시보드와 시각화를 통해 시스템의 성능 메트릭을 모니터링
•
Prometheus와 같은 모니터링 툴에서 수집한 메트릭 데이터를 시각화하여 한눈에 보기 쉽게 제공
따라서, 두 툴을 함께 사용하면 시스템의 성능과 문제 발생 위치를 종합적으로 파악할 수 있어 효율적인 문제 진단과 성능 개선이 가능합니다.