IT/SpringBoot

Actuator & Prometheus를 활용한 Spring Boot 애플리케이션 모니터링

twofootdog 2020. 1. 19. 20:21

이번 글에서는 Actuator와 Prometheus를 활용하여 쿠버네티스 클러스터 내에서 실행 중인 스프링부트 애플리케이션 모니터링을 하는 방법에 대해 알아볼 것이다. Prometheus Server도 쿠버네티스 클러스터 내에서 구동중이라는 전제로 진행하도록 하겠다.

 

 

1. 알아보기 전에

우선 알아보기 전에 Actuator와 Prometheus의 정의에 대해서 알아보자. 

 

1-1. Actuator란?

actuator란 쉽게 말해 스프링부트 애플리케이션에서 제공하는 여러가지 정보를 모니터링 하기 쉽게 해주는 기능이며, 컨텍스트 빈, 환경설정, 자동설정, JVM 상태 등의 정보를 확인할 수 있다. 또한 필요한 정보를 가공할 수도 있으며, 내가 만든 어떤 값을 actuator를 통해 제공할 수도 있다. 

 

2-1. Prometheus란?

Prometheus(프로메테우스)에 대한 정의는 해당 포스트를 확인해보면 된다.

https://twofootdog.tistory.com/17?category=845779

 

2. 사전 준비사항

우선 해당 실습을 진행하기 전에 다음과 같은 준비가 필요하다.

  • 쿠버네티스 클러스터 내 프로메테우스를 활용한 모니터링 시스템 구축(https://twofootdog.tistory.com/17?category=845779)
  • 쿠버네티스 클러스터 내 스프링부트 애플리케이션 구축
  • 스프링부트 빌드툴은 gradle, 설정파일은 yaml파일로 생성

 

3. SpringBoot Actuator 적용

actuator 적용은 간단하다. 우선 build.gradle에 아래와 같은 actuator dependencies 설정을 추가해준다.

dependencies {
    .....
    .....
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '2.2.0.RELEASE' //actuator 설정
}

 

다음으로 스프링부트 설정파일인 application.yaml파일에 아래와 같은 설정을 추가해준다.

...
...

# actuator
management:
  endpoints:
    web:
      exposure:
        include: "*"
      base-path: /application

 

그 다음 스프링부트 어플리케이션을 실행시킨 후 http://[호스트IP]:8080/[yaml파일에서 지정한 base-path](이 글에서는 http://localhost:8080/application)으로 접속하게 되면 아래와 같이 스프링부트 Actuator 정보를 확인할 수 있다.

 

4. Prometheus 설정

자 그렇다면 스프링부트 Actuator는 적용을 완료하였으니, 프로메테우스 설정을 진행해보도록 하자. 

우선 build.gradle 파일에 다음과 같은 설정을 추가한 후 빌드 한 후 서버에서 다시 기동시킨다.

dependencies {
	....
	compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '2.2.0.RELEASE'
	compile group: 'io.micrometer', name: 'micrometer-registry-prometheus', version: '1.3.1'
}

 

그리고 http://[호스트IP]:8080/application 으로 들어가보면 다음과 같이 prometheus 정보가 Actuator에 추가된 것을 확인할 수 있다(필자의 서버 ip는 66.42.43.41이고 스프링부트 애플리케이션가 구동된 컨테이너 포트가 32749였기 때문에, http://66.42.43.41:32749/application으로 접속하여 확인하였다).

 

그 다음으로 Actuator의 정보를 Prometheus Server에서 수집 하기만 하면 된다. 프로메테우스 서버도 쿠버네티스 클러스터 내에서 pod로 동작하고 있으며, 프로메테우스 설정파일인 prometheus.yaml은 prometheus-config-map.yaml에 정의되어 있다. prometheus-config-map.yaml 내 prometheus.yaml 설정의 scrape_configs 항목을 찾아서 Actuator 에 있는 prometheus 정보를 입력하자. metrics_path에 url의 port 뒤 주소를 넣고, targets에 ip와 port번호를 넣는다.

  prometheus.yml: |-
    global:
      scrape_interval: 5s
      evaluation_interval: 5s
    rule_files:
      - /etc/prometheus/prometheus.rules
    alerting:
      alertmanagers:
	  ...
    scrape_configs:
      - job_name: 'auth'
        metrics_path: '/application/prometheus'
        #scrape_interval: 5s
        static_configs:
        - targets: ['66.42.43.41:32749' ]
        
        ...
        

 

그리고 나서 프로메테우스 설정값 변경된 내용 적용을 위해 프로메테우스를 재기동해준다.

# kubectl delete -f prometehus/ <-프로메테우스 yaml파일이 있는 디렉토리
# kubectl apply -f prometehus/ <-프로메테우스 yaml파일이 있는 디렉토리

 

그리고 프로메테우스 웹페이지에서 스프링부트 애플리케이션 관련 PromQL을 입력하면 다음과 같이 uri별로 지표정보가 수집되는 것을 확인할 수 있다. 

 

 

 

마치며

이번장에서는 스프링 Actuator와 Prometheus를 활용하여 쿠버네티스 클러스터 내에서 동작중인 스프링부트 애플리케이션을 모니터링 하는 법에 대해 알아보았다. 프로메테우스에는 지표정보가 적재되는 것을 확인했으니 좀 더 나아가서 PromQL 수정 후 그라파나 대쉬보드에 적용하여 모니터링 대쉬보드를 구축하면 된다(그라파나와 프로메테우스 연동방법은 https://twofootdog.tistory.com/18 글을 확인하면 된다).

 

 

참고

https://stackabuse.com/monitoring-spring-boot-apps-with-micrometer-prometheus-and-grafana/

 

Monitoring Spring Boot Apps with Micrometer, Prometheus, and Grafana

Introduction Monitoring an application's health and metrics helps us manage it better, notice unoptimized behavior and get closer to its performance. This especially holds true when we're developing a system with many microservices, where monitoring each s

stackabuse.com

https://jeong-pro.tistory.com/160

 

Spring boot Actuator를 이용하여 스프링 애플리케이션 정보 모니터링 하기 (java application state/performance check)

Spring boot Actuator * 스프링 부트 2.0 레퍼런스 기준으로 작성했습니다. spring boot actuator는 한 마디로 얘기하면 "스프링 부트 애플리케이션에서 제공하는 여러가지 정보를 모니터링하기 쉽게 해주는 기능"..

jeong-pro.tistory.com