최근 사내에서 여러 독립된 서버를 오픈하고 관리할 일이 생겨 모니터링 도구를 사용해보며 해당 내용을 정리해보았습니다.
구성은 Spring Actuator - Prometheus - Grafana를 사용하였습니다.
최대한 간단하게 설명하였며 자세한 설명은 각 링크를 확인 부탁드립니다.
1. Spring Boot Actuator 설정
2. prometheus 설정
3. Grafana 연동하기
spring boot acturator + Prometheus + Grafana 를 통한 모니터링 시스템 구축
1. Spring Boot Actuator 설정
Spring Actuator란 Spring Boot에서 제공하는 여러가지 정보를 모니터링 하기 쉽게 정리해주는 기능.
각 인스턴스에 대한 CPU, Menory, GC, Heap 등을 종합적으로 정리해서 제공한다.
build.gradle
에 추가// actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// prometheus
implementation 'io.micrometer:micrometer-registry-prometheus'
/health
와 /info
2가지 endpoint만 deafult로 사용 가능하나/prometheus
를 사용할 수 있게 추가한다.management.endpoints.jmx.exposure.include=health, info, prometheus, metrics
management.endpoints.web.exposure.include=health, info, prometheus, metrics
management.endpoints.web.exposure.exclude=
management.endpoint.health.show-details=always
management.endpoints.web.base-path=/actuator
management.endpoint.prometheus.enabled=true
.antMatchers("/actuator/**").permitAll()
2. prometheus 설정
프로메테우스는 매트릭 기반의 오픈소스 모니터링 시스템 Pull 기반의 데이터 수집 방법을 제공한다.
Spring Actuator에서 제공하는 promethues 정보를 수집한다.
즉, Spring Boot API 서버에서 모니터링 데이터를 제공하면 프로메테우스는 Http 통신을 이용하여 데이터를 수집.
프로메테우스 서버
스크랩대상
미리 설정된 규칙에 따라 경고를 발생시키는 Alert Manager
프로메테우스는 여러 유용한 매트릭을 스크랩하여 어플리켜이션에서 발생하는 상황을 시각적으로 이해가 쉽게 여러 차트를 생성가능하다.
다만, 이 시각화 도구가 다소 어려워 시각화 기능을 보강하기 위한 도구를 사용한다. (그라파나, 키바나 등등)
CentOS7 Install
wget https://github.com/prometheus/prometheus/releases/download/v2.17.1/prometheus-2.17.1.linux-amd64.tar.gz
tar -xzf prometheus-2.17.1.linux-amd64.tar.gz
cd prometheus-2.17.1.linux-amd64
# 시스템 서비스 등록
vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
프로메테우스 서버 실행
$ systemctl start prometheus
정상 실행 화면
압축해제 후 폴더 안의 prometheus.yml
구성 파일을 수정하여 사용
프로메테우스는 기본적으로 9090
포트를 사용
prometheus.yml 파일에서 정보를 수집할 Target Server를 세팅
하단에 job_name: 'spring-actuator' 정보를 추가.
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# 정보를 수집할 서버 정보(http통신이 기본)
- job_name: 'spring-actuator'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080']
yaml 파일 구성
global
Prometheus의 전반적인 설정을 관리
- scrape_interval : 스크랩 주기를 설정
- evaluation_interval 시계열 생성 및 알람주기 설정
rule_files
Prometheus 에서 불러올 rules 파일에 대한 경로를 설정
scrape_configs
Prometheus에서 어떤 자원은 모니터링 할지 설정한다.
Status -> Target 선택
Spring Actuator Target Server의 정보를 확인 가능
Status 값으로 Application이 현재 기동중인지 확인이 가능.
3. Grafana 연동하기
매트릭 데이터를 시각화 할 때 가장 널리 사용되는 도구 중 하나
그라파나는 엘라스틱 서치, 인플럭스 DB 등 다양한 데이터 소스를 시각화 할 수 있다.
$ yum install grafana
localhost:3000
으로 접속하여 확인로그인 후 해당 페이지에서 Create a data source
선택
prometheus 선택
prometheus 서버 정보 입력 후 Save & Test
선택
build a dashboard 선택
Add Query 에서 PromQL을 사용하여 데이터를 조회하여 시각화 가능
Spring, MySQL 등 자주 사용하는 구성은 여기에서 확인 가능하다.
JSON 혹은 clipboard ID를 사용하여 다른사람들이 구성한 대시보드를 가져와서 사용하면 편리하다.