오늘날 클라우드 기술의 발전과 함께, 기업들은 대규모의 분산 시스템을 운영하고 있습니다. 이러한 환경에서 서비스의 가용성과 성능을 보장하는 것은 매우 중요한 과제가 되었습니다.
특히 컨테이너와 마이크로서비스 아키텍처의 도입으로 인해, 시스템의 복잡성은 기하급수적으로 증가하고 있으며, 각 컴포넌트의 상태를 지속적으로 모니터링하고, 문제 발생 시 신속하게 대응할 수 있는 능력이 필수적입니다.
이러한 상황에서 Prometheus는 효과적인 모니터링 솔루션으로 자리 잡고 있습니다.
Metric(메트릭)이란❓
Prometheus를 알아보기에 앞서 먼저 알아야 할 개념이 있습니다. 바로 "메트릭"입니다.
메트릭(Metric)은 Prometheus에서 모니터링 대상의 상태를 나타내는 측정 가능한 데이터를 의미합니다.
쉽게 말해, 메트릭은 시스템이나 애플리케이션이 제공하는 특정 성능 지표나 상태 정보를 수치화한 것입니다. Prometheus는 이러한 메트릭을 시간에 따라 수집하고 저장하여, 시스템의 성능이나 상태를 실시간으로 파악하고 분석할 수 있게 해 줍니다.
Metric의 구성 요소
메트릭은 일반적으로 다음과 같은 구성 요소로 이루어져 있습니다.
- 메트릭 이름(Metric Name)
- 메트릭의 이름은 해당 메트릭이 나타내는 내용을 설명하는 식별자입니다.
- 예를 들어, HTTP 요청 수를 나타내는 메트릭의 이름은 http_requests_total일 수 있습니다. 이 이름은 메트릭의 의미를 직관적으로 이해할 수 있게 도와줍니다.
- 라벨(Label)
- 라벨은 메트릭을 다차원적으로 구분하기 위해 사용되는 키-값 쌍입니다.
- 예를 들어, http_requests_total 메트릭에 method="GET" 또는 status="200"와 같은 라벨을 추가하면, HTTP 요청 중 특정 메서드나 상태 코드를 가진 요청을 필터링할 수 있습니다. 라벨을 통해 메트릭을 더 세분화하여 분석할 수 있습니다.
- 값(Value)
- 메트릭의 값은 특정 시점에서 측정된 수치입니다.
- 예를 들어, http_requests_total 메트릭의 값이 1500이라면, 해당 시점까지 총 1500번의 HTTP 요청이 발생했음을 의미합니다.
- 타임스탬프(Timestamp)
- 메트릭 값이 기록된 시점을 나타내는 시간 정보입니다.
- Prometheus는 메트릭의 값을 시간에 따라 저장하므로, 시간 경과에 따른 변화를 추적할 수 있습니다.
Prometheus란❓
Prometheus는 오픈소스 시스템 모니터링 및 경고 도구로, 시계열 데이터베이스를 사용하여 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있습니다.
Prometheus의 주요 특징
시계열(time eries) 데이터 모델
- Prometheus는 시계열(time series) 데이터 모델을 사용하며, 메트릭(metric)을 라벨(label)이라는 키-값 쌍을 통해 다차원적으로 표현할 수 있습니다. 이를 통해 복잡한 쿼리를 쉽게 구성할 수 있습니다.
강력한 쿼리 언어(PromQL)
- Prometheus는 PromQL이라는 자체 쿼리 언어를 제공합니다.
- PromQL을 통해 복잡한 데이터 연산과 필터링이 가능하며, 메트릭의 집계, 평균, 비율 등을 계산할 수 있습니다.
Push가 아닌 Pull 모델
- 대부분의 모니터링 시스템은 클라이언트에서 데이터를 푸시(push)하는 방식이지만, Prometheus는 반대로 서버가 클라이언트에서 데이터를 풀(pull)하는 방식으로 동작합니다.
- 이를 통해 모니터링 대상 시스템이 보다 간편하게 관리될 수 있습니다.
알림 기능(Alerting)
- Prometheus는 시계열 데이터에 기반한 알림을 설정할 수 있습니다.
- 알림은 Alertmanager라는 별도 컴포넌트를 통해 관리되며, Slack, Email, PagerDuty 등 다양한 채널로 알림을 보낼 수 있습니다.
다양한 익스포터
- Prometheus는 다양한 익스포터(exporter)를 통해 외부 시스템의 메트릭을 수집할 수 있습니다.
- 예를 들어, Node Exporter를 사용하면 리눅스 시스템의 CPU, 메모리, 디스크 사용량 등의 메트릭을 수집할 수 있습니다.
Prometheus 주요 구성 요소
Prometheus는 다음과 같은 주요 컴포넌트로 구성됩니다.
Prometheus 서버
- 메트릭을 수집하고 저장하며, 쿼리를 처리하는 중앙 컴포넌트입니다.
Alertmanager
- 알림 규칙에 따라 경고를 처리하고, 알림을 전송하는 역할을 합니다.
Pushgateway
- 짧은 수명(lifespan)을 가지는 잡(job)의 데이터를 푸시 방식으로 수집하기 위해 사용됩니다.
익스포터(Exporter)
- 외부 시스템에서 메트릭을 수집하여 Prometheus 서버로 전송하는 역할을 합니다.
Spring boot Prometheus 통합 방법
1.의존성 추가
implementation 'io.micrometer:micrometer-registry-prometheus'
Spring Boot 애플리케이션에 Prometheus를 통합하기 위해서는 micrometer 라이브러리와 prometheus 익스포터를 사용합니다.
Micrometer는 다양한 모니터링 시스템과의 통합을 지원하는 JVM 기반 애플리케이션용 메트릭 수집 라이브러리입니다.
2. 메트릭 엔드포인트 설정
# Prometheus 엔드포인트 활성화
management.endpoints.web.exposure.include=prometheus
Spring Boot 애플리케이션이 Prometheus와 통합되면, 기본적으로 /actuator/prometheus 엔드포인트를 통해 메트릭을 노출합니다. 이 엔드포인트를 통해 Prometheus가 애플리케이션의 메트릭을 수집할 수 있습니다.
3.Prometheus 설정(prometheus.yml)
Prometheus 서버에서 Spring Boot 애플리케이션의 메트릭을 수집하려면 prometheus.yml 설정 파일에 타깃을 추가해야 합니다.
scrape_configs:
- job_name: 'spring-boot-app'
static_configs:
- targets: ['localhost:8080']
예를 들어, 애플리케이션이 http://localhost:8080/actuator/prometheus에서 메트릭을 제공하고 있다면, Prometheus 설정 파일에 위와 같이 추가합니다.
Spring boot Prometheus 확인
http://localhost:8080/actuator/prometheus에 접속하면 Prometheus 메트릭을 확인할 수 있습니다.
이 URL은 Spring Boot 애플리케이션의 Actuator가 제공하는 메트릭 엔드포인트로, Prometheus는 이 페이지를 호출하여 메트릭 데이터를 수집합니다. 수집된 데이터는 Prometheus에 저장되며, 이를 통해 모니터링과 로그 분석을 할 수 있습니다.
Prometheus yml 생성
앞서 설명한 바와 같이, Prometheus를 실행하기 전에 먼저 prometheus.yml 파일을 생성해야 합니다.
이 설정은 Prometheus가 모니터링할 타깃과 기타 관련 설정을 정의하는 prometheus.yml 파일입니다.
- job_name: 'spring-boot'
- 이 설정 블록의 이름을 정의합니다.
- Prometheus에서 이 설정으로 수집된 메트릭은 spring-boot라는 이름으로 분류됩니다.
- metrics_path: '/actuator/prometheus'
- Prometheus가 메트릭을 수집할 경로를 지정합니다.
- Spring Boot 애플리케이션의 Actuator가 이 경로에서 메트릭을 제공합니다.
- targets: ['host.docker.internal:8080']
- Prometheus가 메트릭을 수집할 대상을 정의합니다.
- 현재 애플리케이션을 도커에서 실행하지 않았기 때문에 이 설정을 추가했습니다.
- 따라서 Prometheus docker에 있는 컨테이너가 애플리케이션으로 접속하려면 이 옵션이 필요합니다.
- Docker 컨테이너가 호스트 머신(즉, Docker를 실행하는 컴퓨터)의 네트워크 서비스에 접근할 수 있도록 지정합니다.
Prometheus yml 실행
docker run -d --name=prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
프로메테우스를 도커를 통해서 실행하기 위해현재 prometheus.yml 파일이 존재하는 위치를 찾아야 합니다.
현재 prometheus.yml 파일의 위치는 위와 같습니다.
docker run -d --name=prometheus -p 9090:9090 -v /Users/zinu/Dev/monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
이 경로를 포함하여 Docker 명령어를 사용해 Prometheus컨테이너를 실행합니다.
docker ps로 현재 실행 중이 컨테이너 목록을 확인해 보면 위와 같이 정상적으로 컨테이너가 실행된 것을 확인할 수 있습니다.
Prometheus 접속
http://localhost:9090로 들어가 보면 위와 같이 prometheus 서버가 정상적으로 작동하고 있고, Prometheus 서버의 웹 인터페이스를 확인할 수 있습니다.
Status 탭의 Target 섹션을 보면, 각 타깃의 상태가 "UP"으로 표시됩니다. 이는 Prometheus가 해당 타깃에서 메트릭을 정상적으로 수집하고 있음을 의미합니다.
'Monitoring' 카테고리의 다른 글
[Grafana] Grafana Loki란 무엇일까❓개념부터 로그 확인까지 (0) | 2024.08.19 |
---|---|
[Grafana] Grafana와 Slack 연동하여 Alert 설정하기 (0) | 2024.08.19 |
[Grafana] Prometheus와 Grafana로 데이터 시각화하기: Docker 환경에서의 설정 및 대시보드 작성 (0) | 2024.08.19 |