콘텐츠로 이동

JMX

JMX 정의

JMX 정의

Java 가상 머신(JVM)은 운영 관리와 모니터링을 위한 완전한 프레임워크를 제공하는데, 그것이 바로 JMX(Java Management Extensions)이다. JMX는 Java Management Extensions의 약자로, Java를 관리하기 위한 확장 프레임워크이다. JMX 기술은 Java 애플리케이션을 모니터링하고 관리하기 위한 완전한 아키텍처와 설계 패턴 집합을 정의한다. JMX의 기반은 관리 빈(managed bean, 업계에서는 보통 MBean이라고 부른다)이며, MBean은 의존성 주입으로 인스턴스화되는 각 클래스이고 JVM 내부의 리소스를 나타낸다. MBean이 JVM 내부의 리소스를 나타내므로, 이를 사용해 애플리케이션의 특정 측면을 관리하거나, 더 흔하게는 이러한 리소스의 사용과 관련된 통계 데이터를 수집할 수 있다.

JMX의 핵심은 MBean 서버이며, 이 서버는 MBean, 동일한 JVM 내의 애플리케이션, 그리고 외부 세계를 연결하는 매개체 역할을 한다. MBean과의 모든 상호작용은 이 서버를 통해 이루어진다. 일반적으로 Java 코드만이 JMX API에 직접 접근할 수 있지만, 일부 어댑터를 통해 이 API를 표준 프로토콜로 변환할 수 있다. 예를 들어 Jolokia는 이를 HTTP로 변환할 수 있다.

JMX는 VM 내부의 런타임 데이터 상태를 외부로 export할 수 있다. 우리는 런타임 데이터를 MBean으로 캡슐화하고, JMX Server로 통합 관리하며, 외부 프로그램이 RMI 방식으로 데이터를 가져갈 수 있도록 허용한다.

요컨대, JMX는 런타임 데이터가 RMI 프로토콜을 통해 외부 프로그램에 의해 조회되도록 허용한다. 이는 VM 내부 데이터를 모니터링하고 조작할 수 있는 창구를 제공한다.

일반적인 몇 가지 JVM 지표 수집 방식

  1. Statsd 수집
  2. JMX Exporter 수집
  3. Jolokia 수집
  4. Micrometer 수집
  5. APM Agent: SkyWalking、OpenTelemetry 등

jvm_collector_1

StatsD 수집

StatsD는 사실 UDP(기본값) 또는 TCP를 수신하는 데몬으로, 단순한 프로토콜에 따라 statsd 클라이언트가 전송한 데이터를 수집하고, 집계한 뒤, graphite와 influxdb 같은 백엔드로 정기적으로 푸시한 다음, 관측성 플랫폼을 통해 표시한다.

현재는 보통 StatsD 시스템을 가리키며, 클라이언트(client), 서버(server), 백엔드(backend) 세 부분으로 구성된다. 클라이언트는 애플리케이션 코드에 삽입되어 있으며, 해당 metrics를 StatsD server로 보고한다.

DataKit은 StatsD server로 사용할 수 있으며, 클라이언트가 전송한 데이터를 수신한다.

jvm_statsd

StatsD 통합

JMX Exporter 수집

JMX Exporter는 Java의 JMX 메커니즘을 이용해 JVM 런타임의 일부 모니터링 데이터를 읽은 뒤, 이를 Prometheus가 인식하는 Metrics 형식으로 변환하여 Prometheus가 모니터링 수집을 수행할 수 있게 한다.

JMX Exporter

JMX Exporter는 Java Agent로 실행되어 HTTP 포트를 통해 로컬 JVM의 지표를 노출한다. 또한 독립적인 HTTP 서비스로 실행되어 원격 JMX 대상을 가져올 수도 있지만, 이런 방식은 설정이 어렵고 프로세스 지표(예: 메모리와 CPU 사용량)를 노출할 수 없는 등 많은 단점이 있다. 따라서 JMX Exporter를 Java Agent로 실행하는 것을 강력히 권장한다.

JMX Exporter 수집

Jolokia 수집

Jolokia는 현재 가장 널리 사용되는 JMX 모니터링 구성 요소로, Spring 커뮤니티(SpringBoot, MVC, cloud) 및 현재의 주요 미들웨어 서비스들에서 JMX 모니터링에 사용한다. Jolokia는 타입이 없는 데이터이며, RMI 방식을 대체하기 위해 JSON이라는 경량 직렬화 방식을 사용한다.

Jolokia는 JMX 구성 요소와 완전히 호환되고 이를 지원한다. agent로서 어떤 JAVA 프로그램에도 삽입할 수 있으며, 특히 WEB 애플리케이션에 적합하다. 복잡하고 이해하기 어려운 MBean Filter 쿼리 구문을 더 쉽게 구현하고 운영할 수 있는 HTTP 요청 패턴으로 변환해 주며, RMI의 개발 난제를 가려줄 뿐 아니라 외부 모니터링 구성 요소에 대한 투명성도 제공하고, 테스트와 사용도 더 쉽다.

Jolokia

Jolokia는 JMX 데이터를 가져올 때 마주치는 RMI 프로토콜의 복잡성, MBean 조회의 불편함, 데이터베이스 직렬화, MBeanServer의 관리 등의 문제를 해결하기 위한 것이다. 우리는 HTTP 요청만 사용해서 WEB 서비스와 동일한 port에 직접 접근하면 JMX 데이터를 가져올 수 있다.

Jolokia는 JMX 데이터를 가져오는 두 가지 방식을 제공한다.

javaagent 방식으로, 애플리케이션 시작 시 함께 로드한다.

jvm_jolokia_1

프록시 방식으로 독립 실행형 Agent로 동작한다.

jvm_jolokia_2

Jolokia JVM 수집

Micrometer 수집

위의 몇 가지 방안은 모두 비즈니스 지표를 정의해 노출하는 것을 지원하지 않으며, 비즈니스 지표는 코드를 통해 정의한 뒤에야 노출할 수 있다. 즉, SDK 방식으로 이를 구현해야 한다.

JVM Micrometer 수집

APM 벤더 통합

APM 벤더는 APM을 기반으로 Metric을 관측성의 일부로 도입한다. SkyWalking을 예로 들면, JMX와 연동하여 Metric 정보를 노출한다.

SkyWalking

OpenTelemetry 지표 수집

문서 평가

이 페이지가 도움이 되었나요?