Spring-Boot

Spring Boot 및 DB 모니터링 시스템 구축

BBiRaRiRo 2023. 3. 13. 18:43

 

Spring Boot Actuator

Spring Boot Actuator 는 다양한 엔드포인트를 통해 모니터링을 지원하는 라이브러리.

이를통해 실행 중인 호스트와 애플리케이션의 상태 정보, 메모리 사용량, 요청 횟수, HTTP 엔드포인트 등 다양한 정보를 확인

의존성 추가

//Spring Boot Actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'

Spring Boot Actuator 는 자체적으로 다양한 엔드포인트를 제공하고있다

예로 /actuator/health 에 접근하면 헬스체크 엔드포인트로

{status: up} 이라는 응답을 준다

다양한 엔트포인트 정보는 Production-ready Features 이를 참고한다

 

기본적으로 외부로 노출되어있는 엔드포인트는

/actuator 에서 확인할수있다.

http://localhost:port/actuator

{
  "_links":{
    "self":{
      "href":"<http://localhost:8791/actuator>",
      "templated":false
    },
    "health-path":{
      "href":"<http://localhost:8791/actuator/health/{*path}>",
      "templated":true
    },
    "health":{
      "href":"<http://localhost:8791/actuator/health>",
      "templated":false
    }
  }
}

제공되는 엔드포인트중 뒤에서 구축할 Prometheus 에서 필요로 하는 엔드포인트를 외부로 노출시켜야한다.

application yml 설정

management:
  endpoints:
    web:
      exposure:
        include: prometheus

다시 열려있는 엔드포인트 목록을 확인하면

http://localhost:port/actuator
{
  "_links":{
    "self":{
      "href":"<http://localhost:8791/actuator>",
      "templated":false
    },
    "prometheus":{
      "href":"<http://localhost:8791/actuator/prometheus>",
      "templated":false
    }
  }
}

prometheus 가 외부로 열려있는것을 확인할수있다.

이 엔드포인트 안에는 메트릭 정보가있으며 Prometheus 는 이 정보를 주기적으로 수집해 간다.

메트릭정보란 간단하게 보면 숫자 데이터로 요청시간 데이터베이스 활성 연결수, CPU 사용량등의 정보이다.

mysqld-exporter

Mysql 의 메트릭 정보를 얻을수 있게해주는 도구로 이를 통해 얻은 메트릭 정보를 Prometheus 에서 수집할것이다.

 

exporter 에서 사용할 Mysql 계정을 생성해준다.

mysql -u root -p

mysql> CREATE USER 'prometheus-exporter'@'%' IDENTIFIED BY '0000' WITH MAX_USER_CONNECTIONS 3;
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus-exporter'@'%';

 

docker 설정

vk-main-db:
    container_name: vk-db
    image: mariadb:10.8.3
    ports:
      - "6633:6633"
    environment:
      MYSQL_ROOT_PASSWORD: "0000" 
      MYSQL_DATABASE: "vk-db" 
      MYSQL_TCP_PORT: 6633
    networks:
      - vk-net
  
vk-db-exporter:
    container_name: vk-db-exporter
    image: prom/mysqld-exporter
    environment:
      DATA_SOURCE_NAME: "<계정명>:<패스워드>@(<IP>:<PORT>)/"
    ports:
      - "9104:9104"
    networks:
      - vk-net

메트릭을 수집할 DB 와 같은 network를 구성하며

수집할 DB의 정보를 설정한다.

Prometheus

Prometheus 는 매트릭을 수집하고 저장하며 이를 모니터링 혹은 경고 를 할수있게 도와주는 오픈소스이다

메트릭 정보를 주기적으로 수집하여 시계열 데이터로 저장하며 모니터링한다

yml 생성

//prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    metrics_path: '/actuator/prometheus'

    static_configs:
      - targets: ['<springboot ip>:<springboot port>']

  - job_name: <job name>
    static_configs:
      - targets: [ '<mysqld-exporter ip>:<mysqld-exporter port>' ]
  • global.scrape_interval : 메트릭을 수집할 주기를 설정한다. 15초로 설정
  • scrape_configs.metric_path : 메트릭 정보의 경로를 명시한다. Actuator를 사용하였으므로, 위와 같이 작성한다.
  • scrape_configs.static_configs.targets : 메트릭을 수집할 호스트 정보를 명시한다. 만약 스프링부트 애플리케이션이 localhost:8080 에서 돌아가고 있다면, 그것을 적어주면 된다.

 

 

docker 설정

vk-prometheus:
  container_name: vk-prometheus
  image: prom/prometheus
  ports:
    - "9094:9090"
  volumes:
    - <prometheus.yml path>:/etc/prometheus
  networks:
    - vk-net

9094 포트로 접근하면

prometheus 의 대시보드를 확인할수있다.

Grafana

시각화 및 메트릭 분석 도구이다

Prometheus 또한 시각화를 제공하지만 Grafana 는 강력한 시각화를 제공한다

vk-grafana:
  container_name: vk-grafana
  image: grafana/grafana
  ports:
    - "3000:3000"
  networks:
    - vk-net

admin/admin 입력

DataSource 추가

메인 대시보드 화면에서

톱니버튼으로

prometheus 를 추가하는 과정을 한다

prometheus 선택

 

prometheus URL 추가해서

하단의 Save& test 버튼을 통해 저장과 테스트가 가능하다

 

 

대시보드 설정

import 를 통해 직접 대스보드를 만들지않고

JVM (Micrometer) 라는 이름의 프리셋을 사용한다

 

https://grafana.com/grafana/dashboards/4701-jvm-micrometer/

입력후 로드

저장

 

같은 방식으로 mysql 대시보드도 추가하면 된다.