자바 원격 모니터링

zwundzwzig·2023년 3월 22일
1

Java

목록 보기
4/9

누구나 그렇듯 입사 후 첫 임무는 환경설정이다. 스프링부트가 상대적으로 익숙한 필자는 부트 없는 스프링 환경에 놓이고 부트의 소중함과 스프링의 방대함, 사랑?, 우정? 기타 등등의 감정을 느꼈다. 이제 회고에 옮기자. 오늘은 JMX & mBean이다.

자바는 애플리케이션 서버 모니터링을 기본적으로 제공한다.
JMX(Java Management eXtensions)는 응용 프로그램(소프트웨어)/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하는 자바 API이다.
응용 프로그램(소프트웨어)/객체/장치, 서비스 지향 네트워크는 MBean(Managed Bean)이라는 객체로 표현된다.
(출처: wikipedia)

쉽게 말해 JMX는 실행 중인 리소스를 모니터링하는 기능이다. JDK 1.5부터 탑재된 기능이다.

Managed Bean

mBean은 JMX의 기본 엔티티이자 모니터링용 객체이다.

구성 요소, 응용 프로그램 또는 장치를 포함하여 관리 가능한 자원을 나타내는 Java의 재사용 가능한 소프트웨어 구성 요소이며, 어플리케이션 설정, 통계 데이터 수집 및 이벤트 알림 등에 사용된다고 한다.

mBean은 4가지 종류가 있으며 각각의 사용 용도는 다음과 같다.

  • Standard MBean : 변경이 많지 않은 시스템을 관리하기 위한 MBean이 필요한 경우 사용한다. Java Bean으로부터 파생된 디자인 패턴으로 getter/setter를 갖는다.
  • Dynamic MBean : 애플리케이션이 자주 변경되는 시스템을 관리하기 위해 런타임 시 유연한 MBean이 필요한 경우 사용한다.
  • Model MBean : 어떤 리소스나 동적으로 설치가 가능한 MBean이 필요한 경우 사용한다.
  • Open MBean : 실행 중에 발견되는 객체의 정보를 확인하기 위한 MBean이 필요할 때 사용한다. JMX의 스펙에 지정된 타입만 리턴해야 한다.

Java Management Extensions

우선 사진에서 상단은 모니터링에, 하단은 서버에 가까운 영역이라고 생각하고 넘어가자.

JMX는 크게 4단계 레벨로 나뉜다.

Instrumentation Level

여기서는 JMX로 관리가능한 리소스의 구현을 위한 스팩을 제공한다. 그리고 mBean에 의해 리소스들의 정보를 에이전트로 전달된다.

Agent Level

JMX의 데이터를 관리하는 관리자와 연계를 위한 어댑터를 이 레벨에서 제공한다. 또한 모니터링이 되는 서버와 같은 장비에 위치한다.

에이전트는 직접 리소스를 관리하거나 원격 관리 어플리케이션이 리소스를 제어하도록 연결시킨다.

에이전트는 MBean 서버와 MBeans를 관리하는 에이전트 서비스의 집합으로 구성되어 있다.

에이전트 서비스는 MBean 서버에 등록된 MBean을 관리한다. 또한 MBean 서버와 MBean 사이에서 데이터 전달망이 되고 이를 통해 MBean 서버를 통해 클라이언트에서의 서버 상황을 모니터링할 수 있다.

Distributed Services Level

JMX 관리자를 구현하기 위한 인터페이스와 컴포넌트를 제공한다.

여러 에이전트에서 제공하는 정보를 관리할 수 있는 화면과 같은 부분을 여기서 담당한다고 생각하면 된다.

여기서 Remote Management Level이 존재한다.

이는 JMX 관리자를 구현하기 위한 인터페이스와 에이전트를 다루기 위한 컴포넌트의 프로토콜을 지정함으로써 에이전트와 외부 커뮤니케이션을 정의한다. 즉, 원격 모니터링을 구현하게 해준다.

해당 프로토콜은 local, RMI, JMX Connector API를 통해 새로운 방식 정의도 가능하다.

원격 접속하기

자바 컨테이너 실행 시 다음 옵션을 입력하면 MBean 서버에 접속해 원격으로 JMX를 사용할 수 있다.

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=[jmx remote port] \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=[hostname or ip]

위처럼 입력하면 아이디와 비밀번호 없이 서버의 ip와 포트만으로 누구나 Read/Write 제어가 가능하다.

그래서 인증 파일을 포함해 작성하자.

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.password.file=$HOME/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=$HOME/jmxremote.access \
-Djava.rmi.server.hostname=[ip] \
-Dcom.sun.management.jmxremote.port=[port] \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.ssl=false

이를 통해 권한이 있는 사용자만 모니터링이 가능하다.

참고

https://narup.tistory.com/23
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pcmola&logNo=222061574743
https://kangwoo.tistory.com/76

profile
개발이란?

0개의 댓글