오늘 배운 것
- 모니터링
- Spring Boot Actuator
- Prometheus
- Grafana
- Loki
모니터링
모니터링은 시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정 의미한다.
모니터링 도구를 사용해 다음과 같은 것들을 할 수 있다.
- 시스템 상태 추적
- 문제 감지 및 예방
- 성능 최적화
- 장애 발생 시 빠르게 대응
- 사용자 경험 향상
- 시스템 가용성 보장
모니터링의 범위로는 아래와 같은 것들이 있다.
- 서버 모니터링
- CPU, 메모리, 디스크 사용량, 네트워크 트래픽 등 모리터링
- 애플리케이션 모니터링
- 애플리케이션의 상태, 성능, 로그 등 모니터링
- 네트워크 모니터링
- 네트워크 트래픽, 대역폭 사용량, 네트워크 지연 등 모니터링
- 데이터베이스 모니터링
- 쿼리 성능, 연결 수, 데이터베이스 사용량 등 모니터링
- 보안 모니터링
- 보안 이벤트, 침입 시도, 취약점 등 모니터링
Spring Boot Actuator
Spring Boot Actuator는 Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능이다.
Spring Boot Actuator는 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다.
Spring Boot Actuator는 상태, 메트릭, 환경 등 실행 중인 애플리케이션에 대한 운영 정보를 노출하는 데 사용된다.
/actuator 경로 하위로 요청해 애플리케이션의 여러 정보를 확인할 수 있다.
- /actuator/health
- 애플리케이션의 상태 확인
- /actuator/loggers
- 로깅 설정 조회 및 변경 가능
- /actuator/env
- 환경 변수와 설정 정보 확인
- /actuator/httptrace
- 최근 HTTP 요청 및 응답 추적
- etc....
Sprint Boot Actuator를 설정하고 localhost:8080/actuator에 접근하면 아래와 같이 확인 가능한 actuator 리스트 볼 수 있다.
Prometheus
- Prometheus는 오픈소스 시스템 모니터링 및 경고 도구다.
- Prometheus는 시계열 데이터베이스를 사용하여 메트릭 데이터를 수집한다.
- Prometheus는 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있다.
애플리케이션에서는 메트릭 데이터를 Prometheus로 노출시켜줘야 한다.
Spring Boot에서 Prometheus를 사용하기 위해서는 Spring Boot Actuator를 사용하여 메트릭 수집을 위한 엔드포인트를 노출한다.
Prometheus는 깊게 생각할 것이 없는데 Prometheus에서 수집한 데이터를 Grafana로 전달해서 거기서 시각화 해서 볼 것이기 때문이다.
- 간단히 설명하면 Prometheus는 애플리케이션의 데이터를 수집하고 저장하는 것이다.
- 그리고 그 데이터를 Grafana로 보내 시각화 하고 알림 보내는 것이다.
Prometheus를 도커에서 실행하고 Spring Boot에 Prometheus를 추가하고 설정한다.
그 후 localhost:8080/actuator/prometheus에 접속하면 아래와 같은 Prometheus 매트릭스를 확인할 수 있다.
Prometheus는 이 페이지를 호출해 데이터를 수집하고 정보 저장해 모니터링 로그 확인할 수 있는 것이다.
Grafana
Grafana는 오픈소스 데이터 시각화 및 모니터링 도구다.
Grafana는 다양한 데이터 소스를 지원하여 데이터를 시각화하고 분석할 수 있도록 돕는다.
Grafana는 아래의 것을 진행해 모니터링을 강화할 수 있다.
- 대시보드 생성
- 데이터 시각화 할 수 있는 대시보드 생성
- 데이터를 그래프나 차트 형태로 표현
- 그래프, 차트, 게이지 등을 이용해 데이터 시각적으로 표현
- 알림 기능 제공
- 조건 설정해 조건 충족되면 다양한 채널 통해 알림 발송 가능
- 알림 통해 시스템 실시간 모니터링하고 문제 발생시 즉시 대응 가능
- 다양한 데이터 소스 지원
- Prometheus, Elasticsearch, MySQL 등 다양한 데이터 소스 지원
- 여러 시스템과 애플리케이션의 데이터 통합해 시각화 가능
- 플러그인 지원
- 다양한 플러그인 통해 기능 확장 가능
- 새로운 데이터 소스나 시각화 유형 추가 가능
- 사용자 관리
- 대시보드, 데이터 소스에 대한 접근 권한 설정 가능
- 데이터 보안 유지 가능
Prometheus가 실행되고 있어 Spring 어플리케이션의 Prometheus 매트릭들이 Grafana로 전달되고 있다.
이 Prometheus의 정보를 Grafana에서 읽어서 시각화 하면 된다.
Grafana 도커에서 실행 후 사이트에 접속할 수 있다.
사이트의 대시보드에서 Data Source에서 Prometheus를 연결한다.
다른 사람들이 만들어 놓은 대시보드를 사용할 수 있다.
스프링 애플리케이션에 대해 사용할 수 있는 대시보드도 있다.
또한 Grafana에서 Slack이나 이메일로 알람을 보낼 수 도 있다.
Loki
애플리케이션 함수들에서 로그를 수집해 로그도 Grafana에서 볼 수 있으면 좋다.
함수의 로그를 적재해 Grafana에 모아 놓고 특정 상황이 되면 알람으로 보내줄 수 있다.
이렇게 애플리케이션 단위에서 함수 모니터링도 가능하다.
Loki로 이런 것들이 가능한 것이다.
Loki란?
- Loki는 Grafana Labs에서 개발한 로그 집계 시스템이다.
- Loki는 주로 로그 데이터를 저장하고, 이를 Grafana를 통해 시각화하는 데 사용된다.
- Loki의 주요 특징 중 하나는 라벨 기반의 메타데이터를 사용하여 로그를 효율적으로 검색할 수 있다는 점이다.
Spring 애플리케이션에서 로그를 Loki로 직접 전송하는 라이브러리인 loki-logback-appender가 있다.
라이브러리를 build.gradle에 추가하면 된다.
그리고 resources/logback.xml 파일을 생성해야 한다.
그래서 로그가 발생하면 loki appender를 통해 Loki 쪽으로 로그가 전달이 된다.
역시 Loki도 도커로 실행한다.
그리고 Grafana의 사이트에서 대시보드에서 Data Source를 추가하는데 Loki를 선택하면 된다.
그 후 쿼리를 작성해서 로그를 확인해 볼 수 있다.
특정 로그만 필터를 걸어 확인할 수 있다.
느낀 점
늘 적용해보고 싶었던 다양한 모니터링 툴에 대해서 알게 되었다.
생각보다 모니터링 도구를 적용하는 것은 어려워 보이지는 않았다.
다양한 모니터링 도구를 도커에서 실행해보면서 도커의 장점을 알게 된 것 같다.
아주 간단하게 독립된 환경에서 모니터링 도구를 실행할 수 있다는 것이 장점인 것 같다.
모니터링 도구들을 보면서 도구를 적용하는 것만이 끝이 아니란 것을 배웠다.
Grafana에서 어떤 지표를 확인해야 하는지, 설정해야 하는지, 알림을 보낼 지표를 어떻게 설정해야 하는지 알아야 할 것이 많은 것 같다.
또한 Loki에서도 어떻게 필터를 걸고 쿼리를 날려서 필요한 로그만 볼 수 있는지 알아야 할 것 같다.
모니터링 도구들을 더 공부해서 프로젝트에 적용한다면 프로젝트의 성과나 개선 사항을 수치적으로 볼 수 있을 것 같다.
'TIL' 카테고리의 다른 글
24.08.27 TIL - JWT (0) | 2024.08.28 |
---|---|
24.08.26 TIL - 발생 가능 장애 (1) | 2024.08.27 |
24.08.22 TIL - 캐싱 (0) | 2024.08.23 |
24.08.21 TIL - session clustering (0) | 2024.08.23 |
24.08.20 TIL - Redis in Spring (0) | 2024.08.21 |