[Spring Boot] Spring Boot Actuator, Grafana & Prometheus 모니터링 구축 및 연결

이홍준·2024년 7월 30일
0
post-thumbnail

애플리케이션의 성능 테스트를 하는데, 모니터링 및 시각화 도구를 사용해보고자 했습니다. 많은 사람들이 사용하는 Spring Boot Actuator , Prometheus, Grafana 의 사용 방법에 대해 기록하고자 합니다.

구성 요소

처음 보는 사람들이 있을 수도 있기 때문에 간략하게 각 모듈의 역할을 정리해보았습니다.

  • Spring Boot Actuator: HTTP, JMX 엔드포인트를 통해 Metric 정보를 제공
  • Prometheus: 모니터링 도구
  • Grafana: 시각화 도구

의존성 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'io.micrometer:micrometer-registry-prometheus'
}

application.yml 작성


logging:
  level:
    org:
      springframework:
        r2bc: DEBUG

management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus
  prometheus:
    metrics:
      export:
        enabled: true

Dockerfile 작성

# 빌드 스테이지
FROM openjdk:17-jdk-alpine AS builder
WORKDIR /app

# 필요한 파일들 복사
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src

# gradlew에 실행 권한 부여 및 Windows 개행 문자 제거
RUN chmod +x ./gradlew && sed -i 's/\r$//' ./gradlew

# bootJar 태스크를 사용하여 JAR 생성
RUN ./gradlew bootJar

# 실행 스테이지
FROM eclipse-temurin:17-jre
WORKDIR /app

# 빌드 스테이지에서 생성된 JAR 파일을 현재 스테이지로 복사
COPY --from=builder /app/build/libs/*.jar app.jar

# 환경 변수 설정 (기본값은 prod)
ARG PROFILE=prod
ENV SPRING_PROFILES_ACTIVE=$PROFILE 

ENTRYPOINT ["java", "-jar", "app.jar"]

docker-compose.yml 작성

version: '3'

services:
  spring-boot-app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - database
    networks:
      - monitoring

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest 
    ports:
      - "3000:3000"
    networks:
      - monitoring
    depends_on:
      - prometheus
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=[Grafana 계정 비밀번호]
networks:
  monitoring:
    driver: bridge # default

실행

$ docker-compose up -d

실행 화면

  • Prometheus

    http:// [api url] /actuator/prometheus 에 해당 메트릭 정보가 있음을 볼 수 있습니다

  • Grafana

    http://localhost:3000 에 Grafana를 볼 수 있습니다. (계정/암호는 기본적으로 admin/admin)

    로그인 후, 초기 화면입니다.

    연결할 datasource(Prometheus)를 설정(추가)합니다.

    설정할 정보를 작성해줍니다. (url은 compose file에서 설정한 prometheus 주소)

    대시보드 UI를 직접 만들기는 번거로우니 https://grafana.com/grafana/dashboards/ 에서 제공하는 템플릿을 가져옵니다.

    Dashboard 탭을 눌러 Import를 누릅니다

    아까 클릭해서 복사해온 id를 넣고 Load 를 클릭합니다.

    아까 작성한 Promethus를 지정하고 import 를 클릭합니다.

    생성이 완료되면 Dashboard 가 이런식으로 보여지게 됩니다.

profile
I'm not only a web developer.

0개의 댓글