JMX學習以及在log4j中的應用

前言

JMX即Java Managemen Extensions,是一個爲應用程序植入管理功能的框架。一套標準的代理和服務,實際上,用戶能夠在任何Java應用程序中使用這些代理和服務實現管理。java

經常在編程的過程當中有一些配置信息須要動態的進行改變,我以往會有以下幾種作法:apache

  1. 寫死在Java code中,環境發生變化的時候修改Java code編程

  2. 寫在名爲*.properties的配置文件裏,使用Java讀取配置文件api

然而今天咱們將引入一種高級的方式來進行配置信息的管理,那即是JMX的引入。
框架

如何使用JMX

JMX作爲一份規範,JDK中提供了JMX接口,所以安裝了JDK後就能夠開發基於JMX的代碼了。
編輯器

JMX具備兩層結構,各層的組件以下工具

工具層學習

  1. Mbeansui

  2. 通知模型:Notification、NotificationListenerspa

  3. Mbeans與數據類:Attribute、Operator

代理層

  1. MBean Server

  2. 代理服務


下面學習下log4j2對JMX的支持

JMX-log4j2

Log4j 2 開始支持 JMX. StatusLogger, ContextSelector, 和全部的 LoggerContexts, LoggerConfigs 以及 Appenders 使用了MBeans而且能夠被遠程檢測和控制.


使JMX生效

默認狀況下JMX是生效的。當log4j初始化的時候StatusLogger, ContextSelector, 以及全部的LoggerContexts, LoggerConfigs 和Appenders 使用了 MBeans. 當啓動JVM時若是想禁用掉JMX則須要在系統配置文件中添加 log4j2.disable.jmx=true .

本地監視

本地監視不須要修改任何系統配置文件。使用Java裏自帶的JConsole工具便可監視你的應用,當安裝完JDK以後並配置了環境變量,只須要在終端執行如下命令便可打開可視化的監視界面。

jconsole

遠程監視應用

要使遠程監視應用有效則須要在啓動JVM以前在系統配置文件中添加一下配置.

com.sun.management.jmxremote.port=portNum

其中portNum即指遠程應用的端口。

Log4j2 檢測組件

下面則是Log4j Mbeans在jconsole裏的一段截圖.

JConsole screenshot of the MBeans tab

可視化客戶端

Log4j包含了基本的可視化組件,能夠監視 StatusLogger 輸出以及遠程修改Log4j 配置.該客戶端能夠被看成單獨的應用運行,也能夠做爲JConsole的插件使用。

看成JConsole插件

使用下面的命令啓動jconsole

%JAVA_HOME%\bin\jconsole -pluginpath \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar

執行完上述命令後你將能夠看到下面包含log4j2標籤頁的界面

JConsole screenshot of the StatusLogger display

遠程編輯log4j配置信息

這個GUI工具也包含了簡單的編輯器用於編輯log4j配置信息。以下圖所示

JConsole screenshot of the configuration file editor


看成獨立的應用運行

執行下面的命令

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui <options>

上面的options能夠爲下面三項中的一項

  • <host>:<port>

  • service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi

  • service:jmx:rmi://<host>:<port>/jndi/rmi://<host>:<port>/jmxrmi

此處不得不注意端口號必須與啓動應用時所指定的JMX端口號一致

例如在啓動應用的時候指定JVM參數信息以下:

com.sun.management.jmxremote.port=33445
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false

緊接着執行下面的命令:

%JAVA_HOME%\bin\java -cp \path\to\log4j-api-2.1.jar;\path\to\log4j-core-2.1.jar;\path\to\log4j-jmx-gui-2.1.jar org.apache.logging.log4j.jmx.gui.ClientGui localhost:33445

下面則是相關的兩個示例圖片:

JMX GUI screenshot of StatusLogger display

JMX GUI screenshot of configuration editor


本文只是進行了簡單介紹,使用過程當中遇到的問題將在後續進行說明。

相關文章
相關標籤/搜索