어느 날 발주처의 요청으로 기존 Spring Framework기반으로 구축된 웹 애플리케이션의 자원을 모니터링 할수있게끔 해달라는 요청이 들어왔다. (커스터마이징이 가능한 대시보드 형태로)
근데 이걸 웹소켓으로 대시보드를 일일이 구현하기에는 주어진 시간이 너무 촉박했다.
그래서 직접 소스로 개발하지 않고 모니터링 및 데이터 시각화를 지원하는 오픈소스 툴킷들을 이용하여 간단하게 구축하는 방법을 알아본다.
Tomcat 서버 설치 및 배포 (이 단계는 설명 생략)Spring Framework (v4.3.22) 웹앱이 Tomcat (v8.5.31)에 배포되고 있는 상황PrometheusPrometheus가 자체적으로 제공하는 간단한 웹 뷰를 통해 조회할 수 있고 그 안에서 테이블 및 그래프 형태로 볼 수 있다.Grafana 를 통한 데이터 시각화를 지원하기 때문에 Grafana를 통해 확인할 것이다. (자체 웹 뷰로 지원하는 기능이 빈약하기도 하다.)
다운로드
jmx-exporter
Prometheus가 Java 어플리케이션에서 metric을 수집하기 위해 만든 JVM 에서 동작 가능한 Java 어플리케이션이다.metric을 수집하기 위해서는 Java 어플리케이션에서 jmx 가 활성화 되어야한다.Tomcat 실행 시 JVM 옵션으로 추가하면 jmx-exporter가 어플리케이션으로부터 metric을 수집하고 Prometheus가 HTTP 통신을 통해 metric 데이터를 가져갈 수 있게 /metrics 라는 HTTP endpoint를 제공한다.jmx_prometheus_javaagent-0.17.0.jar를 다운로드 하였음)
Grafana
metric 데이터를 시각화 하는데 가장 최적화된 대시보드를 제공해주며 Grafana Labs에서 관리하고 있는 오픈소스 툴킷이다.Prometheus는 물론이고 InfluxDB, Elasticsearch 등 여러 데이터 소스와 통합이 가능하도록 지원하고있다.
Grafana라는 이름으로 서비스 등록이 된다.
단계별로 크게 나눠 보면 다음과 같다.
Tomcat 서버에 Java Option에 jmx-exporter를 추가하여 Java 어플리케이션의 jmx를 기반으로 metric를 추출 (/metrics 라는 HTTP endpoint를 제공)
Prometheus를 이용하여 HTTP endpoint로 GET 요청을 날려 metric 정보를 수집
Prometheus가 수집한 metric을 Grafana를 이용하여 데이터 시각화 (대시보드 구성)
다음장부터 해당 단계별로 어떻게 구성되는지 상세히 설명하겠다.