Application Server Version 4.2 Copyright 2004 Tmax Soft Co., Ltd. All Rights Reserved.
Copyright Notice Copyright 2004 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우 )135-708 Restricted Rights Legend This software and documents are made available only under the terms of the Tmax Soft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of Tmax Soft Co., Ltd. 이프로그램과문서는 TmaxSoft 라이선스동의하에서만만들거나, 사용되거나, 복사될수있습니다. TmaxSoft Co., Ltd. 의허락없이이문의일부분이나전체를전자적, 기계적, 광학적, 수작업등어떤방법으로든복사, 재생산, 번역등을할수없습니다. Trademarks Tmax, WebtoB, WebT, and are registered trademarks of Tmax Soft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, 는 TmaxSoft Co., Ltd 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Document info Document name: JMX Guide Document date: 2004-05-20 Manual release version: 2 Software Version: 4.2
차례 1 소개... 16 2 따라하기... 18 3 JMX Manager 설정... 24 3.1 소개... 24 3.2 HTML Adaptor 설정... 25 3.3 RMI Connector 설정... 25 3.4 SNMP Adaptor 설정... 26 3.5 결론... 27 4 JMX 어플리케이션개발... 28 4.1 소개... 28 4.2 일반적인어플리케이션구조... 28 4.3 유틸리티사용... 29 4.4 JNDI 사용... 32 4.5 JMX Remote API 사용... 33 4.6 Security 설정... 35 4.7 ObjectName... 37 4.8 결론... 40 5 결론... 42 A 모니터링정보레퍼런스... 44 A.1 소개... 44 A.2 JMX package 의 javadoc... 44 B Main.xml XML 설정레퍼런스... 47 B.1 소개... 47 B.2 DTD/XML Tree... 48 Tmax Soft 3
B.3 Element Reference... 48 B.4 Main.xml 샘플파일... 54 색인... 57 4 Tmax Soft
그림목차 그림 1. JMX package 의 javadoc.... 44 Tmax Soft 5
6 Tmax Soft
표목차 표 1. RemoteMBeanServeFactory API... 30 표 2. ObjectName 의요소... 38 Tmax Soft 7
8 Tmax Soft
매뉴얼에대해서 매뉴얼의대상 본매뉴얼은 에서 JMX 를관리하고, 유지하는시스템관리자나관계자를대상으로한다. 매뉴얼의전제조건 분문서를읽기전에다음의두가지전제조건이있다. 1. Server 안내서를읽고, 이해해야한다. 2. JMX 개발에대한기본지식이있어야한다. JMX 에대해잘모른다면 http://java.sun.com 에서스펙이나기타 JMX 관련문서를먼저보길바란다. 주의 : 이매뉴얼에서는 J2EE 나 JMX 기술에대한기본적인내용은다루지않는다. 매뉴얼의구성 본매뉴얼은 5 개의장과 2 개의부록으로나눠져있다. 장 1. 소개 : 인사와개요 2. 따라하기 : 간단하게한번따라해보기 3. JMX Manager 설정 : JMX Manager 에대한설정 4. JMX Application 개발 : JMX 클라이언트어플리케이션개발 5. 결론. Tmax Soft 9
부록 A. 모니터링정보레퍼런스 : JMX 모니터링정보에대한레퍼런스를설명한다. B. Main.xml XML 설정레퍼런스 : Main.xml 구성파일에대한참조 관련매뉴얼 관련문서들은다음과같다. The J2EE 1.4 Specification The J2EE management 1.0 Specification The JMX 1.2 Specification The JMX Remote API 1.0 Specification Server 안내서 일러두기 표기예 텍스트 텍스트 내용 본문, 12 포인트, 바탕체 Times New Roman 본문강조 CTRL+C Ctrl 과동시에 C 를누름 public class myclass { } 자바코드 <system-config> XML 문서 10 Tmax Soft
표기예참조 : / 주의 : Configuration 메뉴를연다 _HOME 내용참조사항과주의할사항 GUI 의버튼같은컴포넌트 가실제로설치된디렉토리 예 )c:\jeus42 jeusadmin nodename [ 파라미터 ] 콘솔명령어와문법 옵션파라미터 < xyz > < 와 > 사이의내용이실제값으로변경됨. 예 )<node name> 은실제 hostname 으로변경해서사용 선택사항. 예 ) A B: A 나 B 중하나 파라미터등이반복되어서나옴?, +, * 보통 XML 문서에각각 없거나, 한번, 한번이상, 없거나, 여러번 을나타낸다.... XML 이나코드등의생략 <<FileName.ext>> 코드의파일명 그림 1. 그림이름이나표이름 OS 에대해서 본문서에서는모든예제와환경설정을 Microsoft Windows 의스타일을따랐다. 유닉스같이다른환경에서작업하는사람은몇가지사항만 Tmax Soft 11
고려하면별무리없이사용할수있다. 대표적인것이디렉토리의구분자인데, Windows 스타일인 \ 를유닉스스타일인 / 로바꿔서사용하면무리가없다. 이외에환경변수도유닉스스타일로변경해서사용하면된다. 그러나 Java 표준을고려해서문서를작성했기때문에, 대부분의내용은동일하게적용된다. 용어설명 다음에소개되는용어는본문서전체에걸쳐서사용되는용어이다. 용어가이해하기어렵거나명확하지않을때는아래정의를참조하기바란다. 용어 HTML adaptor 정의 HTML adaptor 는 HTML 을지원하는프로토콜어댑터이다. 프로토콜어댑터들과커넥터는원격관리어플리케이션이 agent 로접근할수있도록해준다. JMX JMX 는 Java Management extensions 의약자로, J2EE 스펙중하나이다. 이것은자바프로그래밍언어의아키텍처, 디자인패턴, API, 그리고네트웍관리와감시에대한서비스를규정한다. JMX agent MBean 서버들을관리한다. JMX client application JMX manager Management Application 이라고부르며, Client application 이다. 이것은 MBean 에접근하고, JMX 에이전트를사용함으로써시스템을모니터링한다. JMX 매니저는 JMX 에이전트아키텍쳐의컴포넌트이다. 이것은 JMX 의분산서비스를제공한다. 12 Tmax Soft
용어 MBean MBean server MBeanServerConnection mlet ObjectName RMI connector SNMP adaptor 정의 MBean 은 JMX 의관리리소스로, Resource 와 Instrumentation 을구현한객체로, Managed Bean 또는 MBean 으로불린다. JMS Agent 가사용한다. Managed Bean Server 를말하며, MBean 객체가등록되는서버이다. MBean 서버에등록된어떠한객체라도어플리케이션에서액세스할수있다. MBeanServerConnection 은 JMX 1.2 의새로운인터페이스이다. MBeanServer 로의접근을커넥터를통해로컬이나리모트로접근할수있고, 자바객체를통해직접적으로접근할수도있다. mlet 또는 m-let 은 Management Applet 의약어이다. Mlet 서비스를사용하면, 리모트에서 MBean 을인스턴스화하거나등록할수있다. ObjectName 은 MBean 서버내에서유일하게 MBean 을식별하는이름이다. 어플리케이션이 관리하려는 MBean 을 식별하기 위해서 사용한다. RMI connector 는 RMI 를지원하는 JMX 의프로토콜어댑터이다. SNMP adaptor 는 SNMP 를지원하는 JMX 의프로토콜어댑터이다. Tmax Soft 13
연락처 Korea Tmax Soft Co., Ltd 18F Glass Tower, 946-1, Daechi-Dong, Kangnam-Gu, Seoul 135-708 South Korea Tel: 82-2-6288-2114 Fax: 82-2-6288-2115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr USA Tmax Soft, Inc. 560 Sylvan Ave, Englewood Cliffs NJ 07632 USA Tel: 1-201-567-8266 FAX: 1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan Tmax Soft Japan Co., Ltd. 6-7 Sanbancho, Chiyoda-ku, Tokyo 102-0075 Japan Tel: 81-3-5210-9270 FAX: 81-3-5210-9277 Email: info@tmaxsoft.co.jp Web (Japanese): http://www.tmaxsoft.co.jp China Beijing Silver Tower, RM 1507, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 Tel: 86-10-6410-6148 Fax: 86-10-6410-6144 E-mail : info@tmaxchina.com.cn Web (Chinese): http://www.tmaxchina.com.cn 14 Tmax Soft
Tmax Soft 15
1 소개 JMX Remote API 1.0 스펙, 그리고 J2EE Managemant 스펙 (JSR-77) 과더불어 Sun Microsystems Inc. 의 JMX1.2 는엔터프라이즈모니터링시스템개발에대한표준적인방법을제시하고있다. 시스템에서 JMX 모듈은 제품의특성을포함하고, J2EE Management 스펙 (JSR-77) 과 JMX Remote API 1.0 스펙을유연하고완벽하게구현하고있다. 이매뉴얼에서는 JMX 모듈의사용을위해알아야할모든내용을설명한다. 그리고, 2 장인 따라하기 에서전체적인모듈의동작을간략하게살펴본다. 그후에각각의서브모듈에대해서면밀히살펴보고, 환경을설정하는방법 (3 장의 JMX Manager 설정 ) 과 Monitoring Service 를사용하기위한자바어플리케이션에서어떻게사용되는지 (4 장. JMX 어플리케이션개발 ) 알아본다. 레퍼런스 A. 모니터링정보레퍼런스 에서는 서버에의해서관리되는 Resource 와 MBean 을참조하는방법에대해서살펴본다. 16 Tmax Soft
Tmax Soft 17
2 따라하기 이장에서는 JMX Manager 에대한시작, 종료하는방법, 그리고샘플예제를실행하는방법같은기본적인내용을설명한다. 를설치한후에는다음과같은작업이필요하다. 설치를하지않았다면 설치안내서를참조해서 를설치하기바란다. WAS 제품을설치한후에다음의과정을따라실행한다. 만일 를아직설치하지않았다면 설치안내서를참조한다. 1. java 명령을실행하려면 JAVA_HOME 이세팅되어야한다. 만일 Windows 플랫폼에서 java.exe 가 C:\lang\j2sdk1.4.0\bin 에존재한다면, JAVA_HOME 은다음과같이 C:\lang\j2sdk1.4.0 으로세팅한다. C:\>set JAVA_HOME=C:\lang\j2sdk1.4.0 C:\>set JAVA_HOME JAVA_HOME=C:\lang\j2sdk1.4.0 2. jeus 명령을실행하려면 _HOME 이세팅되어야한다. 만일 Windows 플랫폼에서 c:\jeus42\bin 에 jeus.bat 가있다면, _HOME 은다음과같이 C:\jeus42 로세팅할수있다. C:\>set _HOME=C:\jeus42 C:\>set _HOME _HOME=C:\jeus42 3. _BASEPORT, EJB_HOME, SERVLET_HOME, CLIENT_HOME, WEBTODIR 같은환경변수는위에서설명한방법과같이세팅해야한다. 참조 : Server 안내서에서 Server 환경변수 를참조한다. 참조 : 를정상적으로설치했다면, _HOME\bin 디렉토리에있는 jeus.properties 에위내용이모두적용되어있다. 그러므로위단계를실행하지않아도무방하다. 18 Tmax Soft 4. Main.xml 내의 jmx-manager 태그에다음의 XML 태그와같이 snmp-adaptor-port 를포함시킨다.
<node> <engine-container>... </engine-container>... <jmx-manager> <<Main.xml>> <html-adaptor-port>7070</html-adaptor-port> <rmi-connector-port>-1</rmi-connector-port> <snmp-adaptor> <snmp-adaptor-port>9999</snmp-adaptor-port> <snmp-version>2</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>false</snmp-security> </snmp-adaptor> </jmx-manager>... </node> 참조 : Main.xml 파일은 _HOME\config\<node name> 라는디렉토리에위치한다. Sever 안내서의 Server 디렉토리구조를참조한다. 5. _HOME\bin 디렉토리에서 jeus 명령스크립트를실행한다. C:\jeus42\bin>jeus [ErrorMsgManager] Message Manager is initialized [2004.05.25 22:35:52][0] [JeusServer] JeusMain.xml is loaded [2004.05.25 22:35:52][3] [LocalSecurityService] Loading File Realm from c:\jeus42\config\johan\file_realm.xml [2004.05.25 22:35:52][3] [LocalSecurityService] Loading File Realm from c:\jeus42\config\johan\file_realm.xml Key alias = jeus [2004.05.25 22:35:53][0] [JRSMAcceptThread] Exported Remote Security Provider at port 9743 [2004.05.25 22:35:53][0] [JeusServer] JeusServer is Ready Tmax Soft 19
6. 터미널 / 콘솔창을열고서 jeusadmin 을입력하고그뒤에컴퓨터이름을입력한다 ( 예 jeusadmin johan ). 원도우즈에서는 hostname 명령, 유닉스에서는 uname a 명령을통해서컴퓨터이름을확인할수있다. C:\jeus42\bin>hostname johan C:\jeus42\bin>jeusadmin johan [ErrorMsgManager] Message Manager is initialized [JeusCommander] Jeus 4.2 Jeus Manager Controller [JeusCommander] Login > 주의 : 이매뉴얼에서는 노드이름을 johan 으로가정한다. 실제따라하기위해서는사용자의컴퓨터이름으로교체한다. 7. 프롬프트에 사용자이름과패스워드를입력한다. 8. jeusadmin 프롬프트가나타나면 boot 를입력하고엔터키를친다. 다음의예제를참조한다 : C:\jeus42\bin>jeusadmin johan [ErrorMsgManager] Message Manager is initialized [JeusCommander] Jeus 4.2 Jeus Manager Controller [JeusCommander] Login >jeus [JeusCommander] Password > [JeusCommander] [jeus] login successful >boot [JeusCommander] johan boot successful > 9. 잠시후에프롬프트가콘솔창에다시나타난다. 이것은 서버가현재부트가되어서다른명령을받아들일준비가되어있다는것을의미한다. 아래와같이 allenglist 명령을실행해서엔진이부트가되었는지를확인한다. 20 Tmax Soft [JeusCommander] [jeus] login successful >boot [JeusCommander] johan boot successful >allenglist
johan_servlet_engine1 johan_ejb_engine1 johan_jms_engine1 > 10. _HOME\samples\jmx\bin 디렉토리안의 jmxclient.bat 파일을실행하면 의모니터링정보를볼수있다. 다음은윈도우에서클라이언트프로그램을실행한예이다. C:\jeus42\samples\snmp\bin>jmxclient johan_container1 JVM javaversion >>>> connector=javax.management.remote.rmi.rmiconnector: jmxserviceurl=service:jmx:rmi:///jndi/mgmt/rmbs/eghost_c ontainer1 [ErrorMsgManager] Message Manager is initialized [2004.05.25 23:12:51][0] [TMLinkManager] accept thread is started [2004.05.25 23:12:51][0] [TMClient] TMClient initailized [2004.05.25 23:12:51][1] [JNSLocal_] Try to connect to 127.0.0.1:9738 [2004.05.25 23:12:51][1] [JNSLocal_] Connected to JNSServer 127.0.0.1:9738 [2004.05.25 23:12:51][1] [JNSLocal_] Successfully started. (ID 127.0.0.1:2177) >>>> Mbean=JVM # of JVMMbean=1 ---- javaversion=1.4.2_03 참조 : jmxclient.bat 파일에는 _HOME, _BASEPORT 가세팅되어있어야한다. _HOME\samples\jmx\classes 디렉토리는 jmxclient.bat 파일이실행되는데필요한모든클래스를가지고있다. 소스파일은 _HOME\samples\jmx\src 디렉토리에있다. JMX 클라이언트를실행하는예는다음과같다. java [options] JMXTest <container_name> <mbean_name> <attribute_name> 참조 : <container_name> 은 node name 이나 container name 이될수있다. Tmax Soft 21
지금까지 JMX Manager 가어떻게실행이되고, JMX 클라이언트어플리케이션이 로부터의모니터링정보를어떠한방법으로가져오는지를간단히살펴보았다. 다음장에서는 JMX Manager 에대해살펴보겠다. 22 Tmax Soft
Tmax Soft 23
3 JMX Manager 설정 3.1 소개 JMX Remote API 스펙 1.0 을따르는클라이언트어플리케이션에게 JMX 는 의구성과실시간정보를제공해준다. JMX Manager 는 HTML 어댑터, RMI 커넥터, SNMP 어댑터와같은관리객체를가지고있다. 이것은 모니터링정보에액세스하는방법으로세가지를제공한다는것이다. 이번장에서는위에언급한것에대한개념들과설정들에대해서설명한다. 그리고, 이번장은 JMX 어플리케이션의관리안내서의역할도한다. JMX Manager 의설정은 _HOME\config\<node name> 디렉토리안의 Main.xml 에서한다. 설정태그인 <jmx-manager> 태그는 <node> 태그나 <engine-container> 태그안에서설정할수있다. 설정예 : <<Main.xml>> <?xml version="1.0"?> <!DOCTYPE jms-server PUBLIC "-//Tmax Soft, Co., Ltd.//DTD Main Config 4.0//EN" "http://www.tmaxsoft.com/jeus/dtd/4.2/jeus-mainconfig.dtd"> <!-- The above XML header will not be repeated in the examples below --> <node> <engine-container>... <jmx-manager>... </jmx-manager> <engine-container>... 24 Tmax Soft
<jmx-manager>... </jmx-manager> <node> 3.2 HTML Adaptor 설정 HTML 어댑터 는 HTML 을지원하는 JMX 의프로토콜어댑터이다. HTML 어댑터 는 Main.xml 안의 <jmx-manager> 태그안에설정한다. 기본으로설정할태그는다음의리스트에서설명한다. html-adaptor-port: HTML 어댑터의리스너포트 html-adaptor-port 태그는필수입력사항 (mandatory) 이다. HTML 어댑터포트를 -1 로설정을하게되면 JMX Manager 가 HTML 프로토콜을사용하지않음을의미한다. 다른서비스가사용하는포트를사용하면안된다는것을유념한다. 설정예는다음과같다. <<Main.xml>> <jmx-manager> <html-adaptor-port>7070</html-adaptor-port> <rmi-connector-port>-1</rmi-connector-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 3.3 RMI Connector 설정 RMI 커넥터 는 JMX 가제공하는 RMI 프로토콜어댑터이다. RMI 어댑터 는 Main.xml 안의 <jmx-manager> 태그안에설정한다. 기본으로설정할태그는다음과같다. rmi-connector-port: RMI 커넥터의리스너포트. Tmax Soft 25
rmi-connector-port 태그는필수입력사항 (mandatory) 이다. RMI 커넥터포트를 -1 로설정을하게되면 JMX Manager 가 RMI 프로토콜을사용하지않음을의미한다. 다른서비스가사용하는포트를사용하면안된다는것을유념한다. 설정예는다음과같다. <<Main.xml>> <jmx-manager> <html-adaptor-port>7070</html-adaptor-port> <rmi-connector-port>-1</rmi-connector-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 3.4 SNMP Adaptor 설정 SNMP 어댑터 는 JMX 가제공하는 SNMP 프로토콜어댑터이다. SNMP 어댑터 는 Main.xml 안의 <jmx-manager> 태그의안에설정한다. 기본으로설정할태그는다음과같다. snmp-adaptor-port: SNMP 어댑터의리스너포트. snmp-version: SNMP 버전을지정하며 1, 2 또는 3 을지정할수있으며, 기본값은 3 이다. snmp-max-packet-size: SNMP 패킷에대한최대값을설정하며최소 256 바이트부터설정할수있다. 기본값은 4096 이다. snmp-security: 보안을적용시킬것인지를설정한다. 'true 또는 false 로지정하며, 기본값은 false 이다. 그리고, true 는 SNMP 버전 3 에서만지정이가능하다. SNMP 어댑터 에대한설정은선택사양이며, snmp-adaptor-port 태그는필수입력사항 (mandatory) 이다. 다른서비스가사용하는포트를사용하면안된다는것을유념한다. 설정예는다음과같다. 26 Tmax Soft
<<Main.xml>> <jmx-manager> <html-adaptor-port>7070</html-adaptor-port> <rmi-connector-port>-1</rmi-connector-port> <snmp-adaptor> <snmp-adaptor-port>9090</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>4096</snmp-max-packet-size> <snmp-security>true</snmp-security> </snmp-adaptor> </jmx-manager> 3.5 결론 지금까지 JMX Manager 에대한설정을어떻게하는지를살펴봤다. 다음장에서는간략하게 JMX 어플리케이션프로그래밍에대한설명을한다. Tmax Soft 27
4 JMX 어플리케이션개발 4.1 소개 이번장에서는 JMX 클라이언트어플리케이션을개발하는방법과그것을설치하는방법에대해서설명한다. J2EE JMX Remote API 1.0 과 J2EE Management 스펙에대한기본지식이있어야한다. JMX 를사용하는데는세가지방법이있는데, 유틸리티 (MEJBUtility), JNDI 그리고 JMX Remote API 가있다. SNMP 를사용해서 모니터링이가능한데, 사용방법은 SNMP 안내서에서확인할수있다. 안전하게 JMX 를사용하기위해서는 MBean 서버를얻을때사용자이름과패스워드를설정해야한다. 마지막으로, JMX 에서 ObjectName 을생성하는규칙에대해서설명한다. 참조 : JMX Remote API 에대한더많은정보를원한다면 SUN 에서제공하는 J2EE JMX Remote API 1.0 스펙과 JMX Remote API 를참조하기바란다. 4.2 일반적인어플리케이션구조 이절에서는필요에따라다양한형태가있겠지만, JMX 클라이언트어플리케이션의일반적인구조를제시한다. JMX 클라이언트어플리케이션은다음단계를수행한다. Step 1: 환경세팅 ( 옵션사항 ) Step 2: MBeanServer 연결 Step 3: 질의 Step 4: 질의결과처리 28 Tmax Soft
Step 1 부터는 JMX 클라이언트어플리케이션을위해환경들을설정하는단계라고볼수있다. 환경설정을 MBeanServer 에연결하기전에할수있다. 처리하려는 MBean 을질의하고, 그결과를받아서처리할수있다. Step 2 에서는 MBeanServer 로접속하기위한방법은앞서말한세가지메소드가있다. jeus.management.remotembeanserverfactory 는 유틸리티를사용하는경우사용되고, javax.management.remote.rmi.rmiserver 와 javax.management. remote.rmi.rmiconnector 는 JNDI 를사용하는경우에사용되며, javax.management. remote.jmxserviceurl 과 javax.management.remote.jmxconnector 는 JMX Remote API 를사용하는경우에사용된다. 자세한내용은다음장에서설명한다. 4.3 유틸리티사용 이번절에서는 유틸리티를사용해서 를모니터링하는 JMX 어플리케이션에대해서설명한다. Step 2 부분이다른방법과차이가있다. <<JMXClientSample.java>> // java class import import java.util.set; import java.util.iterator; import java.util.hashtable; // jmx class import import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.naming.context; // jeus class import import jeus.management.remotembeanserverfactory; public class JMXClientSample { public static void main(string args[]) { try { // Step 1. Setting Environments Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.contextfactory"); env.put(context.security_principal, "administrator"); env.put(context.security_credentials, Tmax Soft 29
"1111111"); // Step 2. Getting MBeanServerConnection MBeanServerConnection jeusmonitormbeanserver = RemoteMBeanServerFactory.getMBeanServer(env); // Step 3. Query ObjectName jeusscope = new ObjectName (RemoteMBeanServerFactory.SYSTEM_DOMAIN + ":*"); Set jeusset = jeusmonitormbeanserver.querynames(jeusscope, null); } } // Step 4. Handling the Query Result for(iterator i = jeusset.iterator();i.hasnext();) { System.out.println( "[ Monitoring Service] " + i.next()); } } catch (Throwable t) { t.printstacktrace(); } Step 2 에서 가제공하는 유틸리티클래스인 jeus.management.remotembeanserverfactory 를사용했다. 이 API 를사용하면간단하게 MBeanServerConnection 을얻을수있다. 이 API 는다음표와같다. 표 1. RemoteMBeanServeFactory API 속성 / 메소드 설명 static field SYSTEM_DOMAIN MBean 이생성될때사용되는 ObjectName 의접두어이다. 예를들면 버전인 4.2 를나타낸다. 30 public static MBeanServerConnection getmbeanserver() Tmax Soft 기본적으로 localhost 로연결해서 MBeanServerConnection 객체를
getmbeanserver() 리턴한다. public static MBeanServerConnection getmbeanserver(hashtable env) public static MBeanServerConnection getmbeanserver(string host) public static MBeanServerConnection getmbeanserver(string host,string user,string password) 파라미터에서설정한호스트로접속해서 MBeanServerConnection 객체를리턴한다. 호스트이름을지정한다. 여기서지정된호스트로연결하고, 이호스트의 MBeanServerConnection 객체를돌려준다. Hostname 과더불어 username 과 password 도설정한다. 여기서설정한값을사용해서호스트에연결을한다. 그리고, 인증이성공하면 MBeanServerConnection 객체를돌려준다. JMX 의환경을세팅하기위해다음의 JVM 파라미터를사용할수있다. -Djava.naming.factory.initial=jeus.jndi. ContextFactory -Djava.naming.provider.url=<IP address> -Djava.naming.security.principal=<username> -Djava.naming.security.credentials=<password> 참고 : JNDI 의자세한정보에대해서는 서버안내서를참조하기바란다. 만약에 JMX 어플리케이션이 Servlet 또는 EJB 아래에서실행된다면 JNDI 파라미터에대한설정은필요없다. Security 설정에대한자세한설명은 4.6 절을참고하기바란다. Tmax Soft 31
4.4 JNDI 사용 이번절에서는 JNDI 를사용해서 를모니터링하는 JMX 어플리케이션에대해서설명한다. Step 2 부분이다른방법과차이가있다. <<JMXClientSampleJNDI.java>> // java class import import java.util.set; import java.util.iterator; import java.util.hashtable; // jmx class import import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.management.remote.rmi.rmiserver; import javax.management.remote.rmi.rmiconnector; import javax.naming.context; import javax.naming.initialcontext; // jeus class import import jeus.management.remotembeanserverfactory; import jeus.management.jmxconstants; public class JMXClientSampleJNDI { public static void main(string args[]) { try { // Step 1. Setting Environments Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.contextfactory"); env.put(context.security_principal, "administrator"); env.put(context.security_credentials, "1111111"); // Step 2. Getting MBeanServerConnection InitialContext ctx = new InitialContext(env); // targetname could be node or container name, // for example, "johan", "johan_container1" String targetname = args[0]; 32 Tmax Soft
RMIServer server = (RMIServer)ctx.lookup( JMXConstants.JNDI_BINDING_PREFIX + targetname); RMIConnector rmiconnector = new RMIConnector(server,null); rmiconnector.connect(); MBeanServerConnection rmimbeanserver = rmiconnector.getmbeanserverconnection(); // Step 3. Query ObjectName jeusscope = new ObjectName (RemoteMBeanServerFactory.SYSTEM_DOMAIN + ":*"); Set jeusset = rmimbeanserver.querynames(jeusscope, null); } } // Step 4. Handling the Query Result for(iterator i = jeusset.iterator();i.hasnext();) { System.out.println( "[ Monitoring Service] " + i.next()); } } catch (Throwable t) { t.printstacktrace(); } 참조 : JNDI 의자세한정보에대해서는 서버안내서를참조하기바란다. 만약에 JMX 어플리케이션이 Servlet 또는 EJB 아래에서실행된다면 JNDI 파라미터에대한설정은필요하지않다. Security 설정에대한자세한설명은 5. 6 절을참고하기바란다. 4.5 JMX Remote API 사용 이절에서는 JMX Remote API 를사용해서 를모니터링하는 JMX 어플리케이션에대해서설명한다. Step 2 부분이다른방법과차이가있다. Tmax Soft 33
<<JMXClientSampleRemoteAPI.java>> // java class import import java.util.set; import java.util.iterator; import java.util.hashtable; // jmx class import import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.management.remote.jmxserviceurl; import javax.management.remote.jmxconnector; import javax.management.remote.jmxconnectorfactory; import javax.naming.context; // jeus class import import jeus.management.remotembeanserverfactory; import jeus.management.jmxconstants; public class JMXClientSampleRemoteAPI { public static void main(string args[]) { try { // Step 1. Setting Environments Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.contextfactory"); env.put(context.security_principal, "administrator"); env.put(context.security_credentials, "1111111"); // Step 2. Getting MBeanServerConnection // targetname could be node or container name, // for example, "johan", "johan_container1" String targetname = args[0]; JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/" + JMXConstants.JNDI_BINDING_PREFIX + targetname); JMXConnector jmxconnector = JMXConnectorFactory.newJMXConnector(url,env); 34 Tmax Soft
jmxconnector.connect(); MBeanServerConnection jmxmbeanserver = jmxconnector.getmbeanserverconnection(); // Step 3. Query ObjectName jeusscope = new ObjectName (RemoteMBeanServerFactory.SYSTEM_DOMAIN + ":*"); Set jeusset = jmxmbeanserver.querynames(jeusscope, null); } } // Step 4. Handling the Query Result for(iterator i = jeusset.iterator();i.hasnext();) { System.out.println( "[ Monitoring Service] " + i.next()); } } catch (Throwable t) { t.printstacktrace(); } 참조 : JNDI 의자세한정보에대해서는 서버안내서를참조하기바란다. 만약에 JMX 어플리케이션이 Servlet 또는 EJB 아래에서실행된다면 JNDI 파라미터에대한설정은필요하지않다. Security 설정에대한자세한설명은 5. 6 절을참고하기바란다. 4.6 Security 설정 이절에서는 모니터링서비스를위한보안설정에대해서설명한다. 기본적으로 Security 파일인 file-realm.xml 에서 ACL 을생성할수있고, 권한을가진사용자들만이 JMX 클라이언트어플리케이션에접근할수있다. 다음은 ACL 을어떻게생성하는지보여주는예이다.... <acl> <<file-realm.xml>> Tmax Soft 35
<resource-type>jndi</resource-type> <resource-name>monitor</resource-name> <resource-action>*</resource-action> <role-name>system</role-name> </acl>... <user> <user-name>username</user-name> <password>mtexmtexmq==</password> <role-name>system</role-name> </user>... 다음예제 Step 1 에서이에대한코드를볼수있다. <<JMXClientSampleSecurity.java>> // java class import import java.util.set; import java.util.iterator; import java.util.hashtable; // jmx class import import javax.management.mbeanserverconnection; import javax.management.objectname; import javax.naming.context; // jeus class import import jeus.management.remotembeanserverfactory; public class JMXClientSample { public static void main(string args[]) { try { // Step 1. Setting Environments Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "jeus.jndi.contextfactory"); env.put(context.security_principal, "administrator"); env.put(context.security_credentials, 36 Tmax Soft
"jeusadmin"); // Step 2. Getting MBeanServerConnection MBeanServerConnection jeusmonitormbeanserver = RemoteMBeanServerFactory.getMBeanServer(env); // Step 3. Query ObjectName jeusscope = new ObjectName (RemoteMBeanServerFactory.SYSTEM_DOMAIN + ":*"); Set jeusset = jeusmonitormbeanserver.querynames(jeusscope, null); } } // Step 4. Handling the Query Result for(iterator i = jeusset.iterator();i.hasnext();) { System.out.println( "[ Monitoring Service] " + i.next()); } } catch (Throwable t) { t.printstacktrace(); } 이상으로 JMX 어플리케이션의보안설정에대해서알아보았다. 다음절에서는 MBean 의표준 JMX Object Name 구조에대해서알아본다. 4.7 ObjectName ObjectName 은 MBean 객체의기본 JMX 객체이름이다. ObjectName 의포멧은 JMX 표준포맷이지만특정벤더에따라값이달라질수있다. 여기서다른값들을가질수있는이유는 JMX 구현이각각다르기때문이다. JMX MBean 들의계층구조는벤더마다다르고, MBean 들도벤더에따라여러가지가있다. ObjectName 의문법은다음과같다 : Tmax Soft 37
<domain_name>: j2eetype=<j2eetype_value>, name=<name_value>, [<parent-j2eetype_value>], [jeustype = <jeustype_value>], [istargetable = <istargetable_value>], [jeusmanager = <jeusmanager_value>], JMXManager = <JMXManager_value> [,*] 또는 <domain_name>: * ObjectName 은 domain_name 으로시작해야하고, 각각의이름과값의짝이순차적으로규정되지않는다. 예를들어 4.2: j2eetype=jeusservice, jeustype=manager, * 과 4.2: jeustype=jeusmanager, j2eetype=jeusservice, * 는둘다 Manager MBean 의 objectname 을얻어온다. 표 2. ObjectName 의요소 이름설명값 domain_name 버전 예를들면 4.2 인경우는 4.2. j2eetype MBean 은 J2EE 타입이며, J2EE Management 스펙에의해기술된다. 다음값들중하나이다. JeusService, J2EEDomain, J2EEServer, JVM, EJBModule, MessageDrivenBean, EntityBean, StatefulSessionBean, StatelessSessionBean, "WebModule", "Servlet", "JDBCResource", "JDBCDataSource", JDBCDriver", "JMSResource", "JTAResource", "JMSConnectionResource", "JMSConsumerResource", "JMSProducerResource". 38 name MBean 의 이름. 각각의 MBean Object 에는유일한 값이있다 Tmax Soft 예를들어 johan_container1 이라는 Container 가실행하는 JVM 의이름은 johan_container1 이다
값이있다. parentj2eetype MBean 의상위 j2ee 타입으로, 각 MBean 들에계층이규정되어있다. 예를들면, JDBCDriver 의상위 j2ee 타입은 JDBCDataSource 이다. jeustype JMX 에서정의된 MBean 들의타입이다. JeusService j2eetype 만몇가지 jeustype 을가질수있다 다음값들중하나이다. "JeusManager", "JMSConnectionResource", "JMSConsumerResource", "JMSProducerResource", "JMSSessionResource", "EJBEngine", "ContextGroup", "DBConnectionPool", "ThreadPool_WEBC", "WebEngine", "WebListener", "JMSClientResource", "JMSQueueConnectionFactoryResource", "JMSTopicConnectionFactoryResource", "JMSQueueDestinationResource", "JMSTopicDestinationResource", "JMSDurableSubscriberResource". istargetable 사용자 AP(EJB, Servlet, JSP) 가 올라가 동작하는 MBean 에서는 반드시 true 로설정 되어야한다. true 또는 false jeusmanager 가동작하는노드의이름이다. 예를들면 johan JMXManager MBeanServer 의 이름이다. 대부분 J2EEServer 의 예를들면 johan_container1 Tmax Soft 39
이름과같다. Step 3 에서위 Objectname 을지정해야하고, 지정한질의에의해그에해당하는값을얻는다. 4.8 결론 JMX 클라이언트개발에대한설명을이상으로마친다. JMX API 를사용한클라이언트어플리케이션들은 JMX1.2 와 JMX Remote API 1.0 스펙을만족한다. 40 Tmax Soft
Tmax Soft 41
5 결론 이상으로 JMX 1.2 과 JMX Remote API 1.0 호환모니터링어플리케이션개발에대해서알아보았다. JMX 에대한소개와 JMX 를설정하는방법, 그리고 JMX 클라이언트개발에대해서도알아보았다. JMX 는 JMX Management 스펙을만족하면서 JMX API 와같은고유의서비스도제공한다. 에통합되어있으므로, JMX 를엔터프라이즈모니터링어플리케이션개발에사용할수있다. 42 Tmax Soft
Tmax Soft 43
A 모니터링정보레퍼런스 A.1 소개 이부록에서는 JMX 의 javadoc 을참조하는방법과 JMX 에대한 API 를참조하는방법에대해서살펴본다. API 를사용하는방법은 4 장에설명이되어있다. A.2 JMX package 의 javadoc Javadoc 은 _HOME\docs\api\jmx 디렉토리에위치한다. 44 Tmax Soft 그림 1. JMX package의 javadoc.
Tmax Soft 45
46 Tmax Soft
B Main.xml XML 설정레퍼런스 B.1 소개 본부록의레퍼런스는 의주설정파일인 Main.xml 중에서 JMX 관련태그에대해서설명하고있다. 이파일의 DTD 파일은 _HOME\config\dtds 디렉토리의 jeus-main-config.dtd 파일이다 본레퍼런스는 3 부분으로나뉘어져있다 1. DTD/XML 트리 : XML 설정파일의모든태그리스트를정리했다. 각노드의형식은다음과갈다. a. 태그레퍼런스로빨리찾아보기위해서각태그마다인덱스번호 ( 예 : (11) ) 를붙여놓았다. 태그레퍼런스에서는이번호순서로설명한다. b. DTD 에서정의한 XML 태그명을 <tag name> 형식으로표시한다. c. DTD 에서정의한 Cardinality 를표시한다.? = 0 개나 1 개의 element, + = 1 개이상의 element, * = 0 개이상의 element, ( 기호가없음 ) = 정확히 1 개의 element. d. 몇몇태그에는 P 문자를붙여놓았는데, 해당태그는성능에관계되는태그라는것을뜻한다. 이태그는설정을튜닝할때사용된다. 2. 태그레퍼런스 : 트리에있는각 XML 태그를설명한다. 이런테이블은다음하위 - 항목들을포함하고있다. a. Description: 태그에대한간단한설명 b. Value Description: 입력하는값과타입 c. Value Type: 값의데이터타입. 예 ) String Tmax Soft 47
d. Default Value: 해당 XML 을사용하지않았을때기본적으로사용되는값 e. Defined values: 이미정해져있는값 f. Example: 해당 XML 태그에대한예 g. Performance Recommendation: 성능향상을위해서추천하는값 h. Child Elements: 자신의태그안에사용하는태그 3. 샘플 XML 파일 : Main.xml 에대한완전한예제 B.2 DTD/XML Tree (1) <jmx-manager> (2) <html-adaptor-port>? (3) <rmi-connector-port>? (4) <snmp-adaptor>? (5) <snmp-adaptor-port> (6) <snmp-version>? (7) <snmp-max-packet-size>? (8) <snmp-security>? (9) <mlet-url>* (10) <startup-class>* (11) <startup-method> (12) <startup-parameter>? (13) <shutdown-class>* (14) <shutdown-method> (15) <shutdown-parameter>? B.3 Element Reference (1) <jmx-manager> Description Main.xml 내의세컨드레벨태그인 jmxmanager 는 JMX 의모든부분의설정을하는 48 Tmax Soft
태그이며, 다음과같은하위태그들이있다. Child Elements (2) html-adaptor-port?, (3) rmi-connector-port?, (4) snmp-adaptor?, (9) mlet-url*, (10) startup-class*, (13) shutdown-class* (2) <jmx-manager><html-adaptor-port>? Description JMX 를리슨하기위해서사용하는 HTML 포트를말한다. 이포트번호는유일해야 하며, 만일 -1 로세팅이되면이기능을사용하지 않는다. Value Description 포트번호는 0 보다큰값이어야하고, 노드 내에서는유일한값이어야한다. Value Type Integer Default Value -1 Example <html-adaptor-port>7070</html-adaptor-port> (3) <jmx-manager><rmi-connector-port>? Description JMX 를리슨하기위해서사용하는 RMI 포트를말한다. 이포트번호는유일해야하며, 만일 -1 로세팅이되면이기능을사용하지않는다. Value Description 포트번호는 0 보다큰값이어야하고, 노드 내에서는유일한값이어야한다. Tmax Soft 49
Value Type Integer Default Value -1 Example <rmi-connector-port>7777</rmi-connectorport> (4) <jmx-manager><snmp-adaptor>? Description SNMP 어댑터의가장상위태그이다. SNMP Agent 는 SNMP Manager 로부터메시지를 리슨하고, 사용중인 의 Request 된정보를 리턴한다. Child Elements (5) snmp-adaptor-port, (6) snmp-version?, (7) snmp-max-packet-size?, (8) snmp-security? (5) <jmx-manager><snmp-adaptor><snmp-adaptor-port> Description SNMP Agent 를리슨하기위한포트이다. Value Description 포트번호는 0 보다큰값이어야하며, 노드내에서 유일한값이어야한다. Value Type Example Integer <snmp-adaptor-port>9999</snmp-adaptor-port> (6) <jmx-manager><snmp-adaptor><snmp-version>? Description SNMP 버전에는 SNMPv1, SNMPv2, SNMPv3 가 있으며, 이세가지버전에따라서 SNMP 패킷의 포맷이다르다. 이값에버전 1 을세팅하면 SNMPv1 만을지원하고, 버전 2 를세팅하면 50 Tmax Soft
SNMPv1, SNMPv2 를지원하며, 버전 3 을세팅하면보안관련특성만을지원한다. 그러므로안전한패킷을사용하기위해서는 SNMPv3 을사용해야한다. Value Description 1 또는 2 를사용하거나 3 을사용해야한다. Value Type Long Default Value 3 Example <snmp-version>3</snmp-version> (7) <jmx-manager><snmp-adaptor><snmp-max-packet-size>? Description SNMP 패킷의최대사이즈를의미한다. 내부적으로 SNMP 어댑터는다이어그램소켓을사용하는데, 특정사이즈의패킷을읽고보낸다. 적당히큰값을세팅을한다면데이터손실없이큰패킷을받을수있다. Value Description Value Type Example 256 바이트이상의값 Integer <snmp-max-packet-size>4096</snmp-max-packetsize> (8) <jmx-manager><snmp-adaptor><snmp-security>? Description 익명의사용자가메시지를수신할수있는지 여부를설정하며, SNMPv3 에서만이값을 true 로 설정을할수있다. Value Description Boolean 값으로써사용할것인지아닌지를 Tmax Soft 51
설정한다. Default Value Example false <snmp-security>false</snmp-security> (9) <jmx-manager><mlet-url>* Description M-let 의 URL 을의미한다. 동적로딩은대체로 Management Applet 서비스가네트워크을통해서원격 URL 로부터가져온 MBean 을초기화하는사용한다. Mlet 텍스트파일이로딩되었을때, MLET 태그안에지정된모든클래스들이다운로드되고, 파일에지정된각 MBean 의인스턴스가생성되고등록된다. Value Description Example Mlet 태그를가지고있는파일의 URL <mlet-url>http://soft.dist/mybean.txt</mleturl> (10) <jmx-manager><startup-class>* Description JMX Manager 가시작될때실행시킬메소드를 지정한다. Child Elements (11) startup-method, (12) startup-parameter? (11) <jmx-manager><startup-class><startup-method> Description JMX Manager 가시작할때실행이되는함수를선언한다. 이 함수는 String 또는 Primitive 파라미터를받을수있다. 각각의 Startup 함수의선언은여러개의파라미터를정의하는하나의 Element 를가져야한다. Static 이나 Instance 함수를사용할수있다. Instance 함수의경우, 그클래스의새로운 instance 가함수호출전에 52 Tmax Soft
생성된다. Value Description Example :: 의앞에클래스의풀네임이들어가고, "methodname(type param1, type param2, type paramn)" 형태의함수디스크립터가뒤에붇는다. <startupmethod>mylib.startup::start(int,java.lang.string)</startupmethod> (12) <jmx-manager><startup-class><startup-parameter>? Description <startup-method> 태그에서선언된함수를 실행하기위한파라미터값을정의한다. Value Description Primitive 타입값또는자바 String 값을표시한 문자열. 하나의값이함수의파라미터하나에 대응하며,, 로구분한다. Example <startupparameter>328943,helloworld!</startupparameter> (13) <jmx-manager><shutdown-class>* Description JMX Manager 가다운될때실행시키고자하는 함수를지정한다. Child Elements (14) shutdown-method, (15) shutdown-parameter? (14) <jmx-manager><shutdown-class><shutdown-method> Description JMX Manager 가다운될때실행시키고자하는 함수를지정한다. 이함수는 String 또는 Primitive 파라미터를받을수있다. 각각의 Shutdown 함수의 Tmax Soft 53
선언은여러개의파라미터를정의하는하나의 Element 를가져야한다. Static 이나 Instance 함수를사용할수있다. Instance 함수의경우, 그클래스의새로운 instance 가함수호출전에생성된다. Value Description :: 의앞에클래스의풀네임이들어가고, "methodname(type param1, type param2, type paramn)" 형태의함수디스크립터가뒤에붇는다. Example (15) <jmx-manager><shutdown-class><shutdown-parameter>? Description <shutdown-method> 태그에서선언된함수를 실행하기위한파라미터값을정의한다. Value Description Primitive 자바타입값또는자바문자열값을 표시한문자열이다. 함수의파라미터와값을 규정하며, 콤마로구분한다. Example <shutdownmethod>mylib.shutdown::stop(int,java.lang.st ring)</shutdown-method> <shutdownparameter>328943,helloworld!</shutdownparameter> B.4 Main.xml 샘플파일 <<Main.xml>> <?xml version="1.0"?> <!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Co., Ltd.//DTD Main Config 4.0//EN" 54 Tmax Soft
"http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd"> <jeus-system> <node> <name>johan</name> <class-ftp>true</class-ftp> <sequential-start>true</sequential-start> <enable-webadmin>false</enable-webadmin> <system-log> <target>stdout</target> <buffer-size>4096</buffer-size> <level>debug</level> </system-log> <scheduler>true</scheduler> <engine-container> <name>container1</name> <command-option>- Djeus.ejb.enable.configDeleteOption=true</command-option> <user-class-path>d:/jeus42/lib</user-class-path> <system-log> <target>stdout</target> <buffer-size>4096</buffer-size> <level>debug</level> </system-log> <scheduler>true</scheduler> <engine-command> <type>ejb</type> <name>engine1</name> <startup-mode>xml</startup-mode> <deploy-mode>xml</deploy-mode> </engine-command> <engine-command> <type>servlet</type> <name>engine1</name> <startup-mode>xml</startup-mode> </engine-command> <engine-command> <type>jms</type> <name>engine1</name> Tmax Soft 55
<startup-mode>xml</startup-mode> </engine-command> <tm-config> <pooling> <min>6</min> <max>20</max> <step>2</step> <period>600000</period> </pooling> <active-timeout>300000</active-timeout> <commit-timeout>120000</commit-timeout> <capacity>20000</capacity> </tm-config> </engine-container> <jmx-manager> <html-adaptor-port>7070</html-adaptor-port> <rmi-connector-port>-1</rmi-connector-port> <snmp-adaptor> <snmp-adaptor-port>9999</snmp-adaptor-port> <snmp-version>3</snmp-version> <snmp-max-packet-size>1024</snmp-max-packetsize> <snmp-security>false</snmp-security> </snmp-adaptor> </jmx-manager> </node> </jeus-system> 56 Tmax Soft
색인 A ACL... 34 D destination... 12, 13 F file-realm.xml... 34 H html-adaptor-port. 18, 24, 25, 26, 46, 47, 54 J 유릴티리... 28 JMX Manager... 17, 23 jeus.properties... 17 jeusadmin... 11 jeusadmin... 19 jmxclient.bat... 20 jmx-manager... 17, 18, 23, 24, 25, 26, 46, 47, 48, 49, 50, 51, 52, 54 M MBeanServer. 13, 27, 28, 29, 30, 31, 32, 33, 35, 36, 38 MEJBUtility... 27 message... 12 O ObjectName... 13, 27, 28, 29, 31, 32, 33, 35, 36, 37 R rmi-connector-port18, 24, 25, 26, 46, 47, 48, 54 S snmp-adaptor-port 17, 18, 24, 25, 26, 46, 48, 54 snmp-max-packet-size18, 24, 25, 26, 46, 48, 49, 54 snmp-security. 18, 24, 25, 26, 46, 48, 49, 50, 54 snmp-version.. 18, 24, 25, 26, 46, 48, 49, 54 Tmax Soft 57