Java

[Spring Boot Actuator] metrics monitoring(Prometheus 와 Grafana를 활용한)

ride-dev 2024. 3. 1. 18:04

metrics monitoring(Prometheus 와 Grafana를 활용한)

Prometheus

Prometheus는 SoundCloud에서 구축한 오픈 소스 모니터링 시스템입니다.

구성된 간격에 따라 주기적으로 HTTP를 통해 메트릭 데이터를 가져오는 데이터 스크레퍼입니다.

모든 측정항목 데이터를 저장하는 시계열 데이터베이스입니다.

모든 측정항목을 시각화, 쿼리, 모니터링할 수 있는 간단한 사용자 인터페이스입니다.

Grafana

Grafana는 Elasticsearch, Prometheus, Graphite, InfluxDB 등과 같은 다양한 데이터 소스로부터 데이터를 가져오고,

그래프로 시각화할 수 있습니다.

메트릭 데이터를 기반으로 경고 규칙을 설정할 수도 있습니다.

경고 상태가 되면 이메일, Slack 또는 기타 다양한 채널을 통해 알림을 받을 수 있습니다.

Dependency

이제 의존성을 추가하도록 하겠습니다.

// https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus
implementation group: 'io.micrometer', name: 'micrometer-registry-prometheus', version: '1.12.3'

이제

http://localhost:8080/actuator

에 접속하면,

http://localhost:8080/actuator/prometheus

엔드포인트를 찾을 수 있습니다.

Prometheus 구성

구성관리용 prometheus.yml파일을 생성합니다

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# 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: ['prometheus:9090']

  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['host.docker.internal:8080']
    basic_auth:
      username: 'actuator'
      password: 'actuator'

Spring Security에서 특정 사용자만 접근할 수 있도록 했기 때문에,

spring.security.user.name=actuator
spring.security.user.password=actuator
spring.security.user.roles=ACTUATOR_ADMIN

그 특정 사용자에 대한 auth를 설정합니다.

Prometheus와 Grafana 설치

이제 Prometheus와 Grafana를 설치하겠습니다.

Windows, macOS, Linux 등 다양한 환경이 존재할 수 있습니다.

환경에 종속되지 않도록 하기 위해,

Docker와 docker-compose를 사용하겠습니다.

그리고 Prometheus와 Grafana를 컨테이너로 관리하겠습니다.

 

docker-compose파일과 prometheus.yml 모두 프로젝트 최상단 경로에 위치시켰습니다.

아래는 docker-compose파일입니다.

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    environment:
      TZ: Asia/Seoul
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    volumes:
      - ./grafana-data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
      TZ: Asia/Seoul

volumes를 통해 파일의 경로를 환경에 독립적으로,

도커 컨테이너를 중심으로 돌아가게 수 있습니다.

Prometheus와 Grafana 접속

docker-compose에 선언한 사용자로 로그인합니다.

(비밀번호 변경을 권유할 수도 있습니다. 요구사항에 따라 설정하면 됩니다)

Prometheus의 Data Source를 추가해줍니다.

이름을 지정해주고,

server URL을 지정합니다.

grafana와 prometheus 모두 docker-compose의 container로 가동되고 있기 때문에,

URL을 container 이름으로 설정합니다.

테스트 후,

building a dashboard를 통해 dashboard 를 생성합니다.

+ Add visualization

prometheus를 선택합니다.

Metrics browser를 클릭하고, 대시보드에 사용할 데이터를 찾습니다.

아래에 있는 Use query를 선택합니다.

이제, cpu 사용량을 대시보드로 확인할 수 있습니다.

 

그 외에도 다양한 것들을 확인할 수 있습니다.

참조

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

https://www.callicoder.com/spring-boot-actuator-metrics-monitoring-dashboard-prometheus-grafana/

 

728x90