JMX and Jolokia

Reference: okminseok.blogspot.com, github.com/eugenp

JMX ๋ž€?

  • Java Application์„ monitoringํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์™„์ „ํ•œ ์•„ํ‚คํ…์ฒ˜์™€ ์ผ๋ จ์˜ design pattern์„ ์ •์˜ํ•˜๋Š” technology

  • ์‹คํ–‰์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค

    • runtime ์ƒํƒœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

    • JDK 1.5๋ถ€ํ„ฐ ๊ธฐ๋ณธ์œผ๋กœ ํƒ‘์žฌ๋˜์–ด ์ œ๊ณต๋˜๊ณ  ์žˆ๋‹ค

      • Application ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๋ชฉ์ ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ๋‹ค

JMX ์šฉ์–ด

  • ManagedResource

    • ๊ด€๋ฆฌ์˜ ๋Œ€์ƒ์ด๋˜๋Š” resource

  • MBean (Managed Bean)

    • JVM์—์„œ resuource๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์˜์กด์„ฑ ์ฃผ์ž… ์— instanceํ™” ๋˜๋Š” class

    • Java application์˜ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ œ๊ณต

    • ManagedResource์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐ ์กฐ์ž‘ ์— ๋Œ€ํ•œ interface ๋ฅผ ์ œ๊ณตํ•œ๋‹ค

  • MBean Server

    • MBean์„ ๊ด€๋ฆฌํ•˜๋Š” Java Class

    • MBean๋“ค์€ MBean server์— ๋“ฑ๋ก๋˜๋ฉฐ, MBean server๋Š” resource์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  ์›๊ฒฉ ๋งค๋‹ˆ์ €๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค

    • MBeans, ๋™์ผํ•œ JVM์˜ application ๊ทธ๋ฆฌ๊ณ  ์™ธ๋ถ€ ์‚ฌ์ด์—์„œ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•˜๋Š” element

    • MBeans์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์€ MBean Server๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค

  • Management Application

    • JMX๋ฅผ ํ™œ์š”์•Ÿ์—ฌ ๋งŒ๋“ค์–ด์ง„ application์„ ๊ด€๋ฆฌํ•˜๋Š” application

  • Notification

    • MBean์— ์˜ํ•ด ๋ฐœ์ƒํ•œ event, alert, information์„ wrappingํ•œ Java object

  • Instrumentation

    • MBean์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” resource๋“ค

JMX ์‹œ์ž‘ํ•˜๊ธฐ

  • JMX๋ฅผ ํ†ตํ•ด resource๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด MBeans ๋ผ๋Š” Managed Beans ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ณ ,

    • ์ƒ์„ฑํ•œ MBean์„ MBen Server์— ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค

      • MBean Server๋Š” ๋“ฑ๋ก๋œ MBeans๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” agent ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค

      • MBean server๋Š” ๊ตฌํ˜„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€ ์—์„œ ๋„์šด๋‹ค

  • MBean์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์—๋Š” rule์ด ์žˆ๋Š”๋ฐ,

    1. interface์™€ ๊ตฌํ˜„์ฒด๋ฅผ ์Œ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ณ ,

    2. MBean interface์˜ ์ด๋ฆ„์€ "MBean" ์œผ๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค

  • ๋…ธ์ถœํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ monitoring๋งŒ ํ•  ๊ฒƒ์ด๋ผ๋ฉด setter๋Š” ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค

ex)

import java.lang.management.ManagementFactory;

public interface MonitoringBean {
    long getStorageSize();
}

public class Monitoring implements MonitoringBean {
    @Override
    public long getStorageCount() {
        return ...;
    }
}

// boot up MBean server
Monitoring monitoring = new Monitoring();

// ManagementFactory class๋กœ ๋ถ€ํ„ฐ MBeanServer ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
MBeanServer server = ManagementFactory.getPlatformMBeanServer();

ObjectName jmxObjectName = new ObjectName("com.chloe.example:type=basic,name=monitor");
server.registerMBean(monitoring, jmxObjectName);
  • ObjectName์€ domain,** key**์˜ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š”๋‹ค

    • domain์€ ์ด๋ฆ„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก Java package ์ด๋ฆ„์„ ์“ฐ๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค

    • key๋Š” key=value ์Œ์„ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Jolokia์™€ JMX

  • ์ผ๋ฐ˜์ ์œผ๋กœ Java code ๋งŒ์ด JMX API์— ์ง์ ‘ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, JMX API๋ฅผ ํ‘œ์ค€ protocol๋กœ ๋ณ€ํ™˜ํ•˜๋Š” adaptor๋“ค์ด ์žˆ๋‹ค

    • ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ Jolokia ์ด๊ณ , Jolokia๋Š” JMX API๋ฅผ HTTP๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค

  • Jolokia ๋Š” JVM์—์„œ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋Š” agent๋กœ์„œ,

    • REST ๊ฐ™์€ HTTP endpoint๋ฅผ ํ†ตํ•ด MBeans๋ฅผ ๋…ธ์ถœ์‹œ์ผœ,

    • ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋™์ผํ•œ host์—์„œ ์ž‘๋™ํ•˜๋Š” ๋น„ Java application์— ์‰ฝ๊ฒŒ ์ œ๊ณต๋˜๋„๋ก ํ•œ๋‹ค

      • ์ผ๋ฐ˜ JVM ์—์„œ๋Š” agent๋กœ,

      • Java EE ์—์„œ๋Š” WAR or OSGI or Module agent๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋‹ค

Last updated

Was this helpful?