1. 程式人生 > >用Zabbix通過JMX方式監控weblogic

用Zabbix通過JMX方式監控weblogic

JMX(Java Management Extensions,即Java管理擴充套件)是一個為應用程式、裝置、系統等植入管理功能的框架。JMX可以跨越一系列異構作業系統平臺、系統體系結構和網路傳輸協議,靈活的開發無縫整合的系統、網路和服務管理應用。

上面的介紹有點繞,我是這麼簡單粗暴地理解的:JMX之於JVM或JAVA,相當於SNMP之於OS。只是JMX比SNMP更強大,除了監控外,還可以通過JMX對JAVA程式進行管理,如更改一些配置等。

Zabbix已經整合JMX,可以用Zabbix通過JMX監控JVM,TOMCAT,Weblogic,Jboss等。要使用Zabbix監控Weblogic,我們先要了解Zabbix的JMX監控架構,Weblogic的JMX資訊,最後才能去實現怎麼去配置監控和報警。

1. Zabbix 的JMX監控架構

zabbix jmx 監控架構圖如上面的Zabbix JMX監控架構圖所示,Zabbix是使用了一個叫做Java Gateway的應用去監控JMX的。Java Gateway整合在zabbix官方開發釋出的。

2. Zabbix server及Java gateway的配置

rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm

yum -y install zabbix-java-gateway zabbix-web-mysql zabbix-server-mysql

也可以通過原始碼安裝,請參考官方文件。

zabbix-server的配置我就不介紹了,我們著重看下與java-gateway相關的配置:

zabbix-java-gateway的配置檔案是/etc/zabbix/zabbix_java_gateway.conf,配置檔案很簡單,如下:
# 監聽地址
LISTEN_IP=”0.0.0.0″
# 監聽埠
LISTEN_PORT=10052
# PID_FILE檔案
PID_FILE=”/var/run/zabbix/zabbix_java.pid”
# 開啟的工作執行緒數
START_POLLERS=5

啟動zabbix-java-gateway:

service zabbix-java-gateway start

再修改zabbix-server的配置,編輯/etc/zabbix/zabbix_server.conf ,修改下面幾個引數:

# JavaGateway的伺服器IP地址
JavaGateway=192.168.89.204
# JavaGateway的服務埠
JavaGatewayPort=10052
# 從javaGateway採集資料的程序數
StartJavaPollers=5

配置檔案修改後,重啟zabbix-server:

service zabbix-server restart

好,現在zabbix-java-gateway就配置好了。

3. 開啟JMX

使用JMX前需要先開啟JMX,預設是關閉的,在啟動JAVA程式時,加入下面的引數,就可以開啟JMX:

enableJMX想更多的瞭解這些引數,可以參考下面這個連結:

下面介紹幾種常用的JAVA容器的JMX開啟方式:

1)Apache Tomcat

如果是windows版本,編輯TOMCAT_HOME/bin/catalina.bat,在開頭加入下面幾行:
set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST
set CATALINA_OPTS=%CATALINA_OPTS% -Djavax.management.builder.initial=
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote=true
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.port=JMX_PORT set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false

如果是linux版本,編輯TOMCAT_HOME/bin/catalina.sh,在開頭加入下面幾行:
CATALINA_OPTS=${CATALINA_OPTS} -Djava.rmi.server.hostname=JMX_HOST CATALINA_OPTS=${CATALINA_OPTS} -Djavax.management.builder.initial= CATALINA_OPTS=${CATALINA_OPTS} -Dcom.sun.management.jmxremote=true CATALINA_OPTS=${CATALINA_OPTS} -Dcom.sun.management.jmxremote.port=JMX_PORT CATALINA_OPTS=${CATALINA_OPTS} -Dcom.sun.management.jmxremote.ssl=false CATALINA_OPTS=%{CATALINA_OPTS} -Dcom.sun.management.jmxremote.authenticate=false

注意JMX_HOST為tomcat的主機名或IP地址,JMX_PORT為JMX埠,通常使用12345,然後重啟tomcat,JMX就開啟了。

2)IBM WebSphere AS

進入WebSphere Administrative Console open Servers → Server Types → WebSphere application servers → WAS_SERVER_NAME → Java and Process Management → Process definition → Java Virtual Machine.

在“Generic JVM arguments”增加下面環境變數:
-Djavax.management.builder.initial=

然後再進入 WebSphere Administrative Console, open Servers → Server Types → WebSphere application servers → WAS_SERVER_NAME → Java and Process Management → Process definition → Java Virtual Machine → Custom properties.

增加下面幾個環境變數:
Name: java.rmi.server.hostname
Value: JMX_HOST
Name: javax.management.builder.initial
Value: none
Name: com.sun.management.jmxremote
Value: true
Name: com.sun.management.jmxremote.port
Value: JMX_PORT
Name: com.sun.management.jmxremote.ssl
Value: false
Name: com.sun.management.jmxremote.authenticate
Value: false

應用更改,重啟應用就開啟了。

3)Oracle GlassFish AS

進入GlassFish Console, open GAS_CONFIG → JVM Settings → JVM Options.
加入下面的環境變數到“JVM options”:
Value: -Djava.rmi.server.hostname=JMX_HOST
Value: -Dcom.sun.management.jmxremote=true
Value: -Dcom.sun.management.jmxremote.port=JMX_PORT
Value: -Dcom.sun.management.jmxremote.ssl=false
Value: -Dcom.sun.management.jmxremote.authenticate=false

重啟就開啟了。

4)Oracle WebLogic 11g (10.23.x) and 12c (12.1.x)

對於windows的版本,編輯WL_DOMAIN_HOME/bin/setDomainEnv.cmd,在檔案結尾加入下面幾行:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djava.rmi.server.hostname=JMX_HOST
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote=true
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.port=JMX_PORT
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.authenticate=false

對於Linux的版本,編輯WL_DOMAIN_HOME/bin/setDomainEnv.cmd,在檔案結尾加入下面幾行:
JAVA_OPTIONS=”${JAVA_OPTIONS} -Djava.rmi.server.hostname=JMX_HOST” JAVA_OPTIONS=”${JAVA_OPTIONS} -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote=true” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port=JMX_PORT” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.ssl=false” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.authenticate=false” export JAVA_OPTIONS

然後重啟weblogic,就開啟了。

需要注意的是,如果你的應用不是佈署在預設的應用伺服器上,而是新增了一個應用伺服器佈署的話,應該使用下面這個方法:

進入weblogic控制檯->環境->伺服器->”你新增的伺服器”->配置->伺服器啟動。在“引數”的輸入框內輸入:
-Dcom.sun.management.jmxremote.port=JMX_PORT -Djava.rmi.server.hostname=JMX_HOST -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder
weblogic_jmx然後儲存,啟用更改,再重啟這個應用伺服器就開啟JMX了。

4. 測試和檢視JMX的配置和狀態資訊

JMX開啟後,我們就可以通過相關的工具去檢視JMX內的狀態資訊了,通常可以使用JDK的jconsole程式檢視,對於weblogic,它自帶了一些工具也可以檢視,可以參考官方文件(http://docs.huihoo.com/oracle/middleware/fusion/11g/web.1111/e13715/nav_edit.htm#WLSTG175),另外還有一個叫cmdline-jmxclient-0.10.3.jar的工具也可以非常方便的檢視這些資訊。

1) 使用JDK的jconsole程式檢視

jconsole在JDK_HOME/bin下面,開啟它,輸入伺服器的IP和埠就可以連線了。如圖:jconsole2jconsole3jconsole4jconsole5

com.bea下面都是Weblogic相關的資訊,其它為JVM級別的資訊。jconsole6應用伺服器下的ServerRuntime這個Mbeans就是WEBLOGIC這個應用伺服器的實時狀態資訊。

2)使用cmdline-jmxclient-0.10.3.jar工具檢視

cmdline-jmxclient-0.10.3.jar是一個非常方便的檢視程式,它的下載地址為:http://crawler.archive.org/cmdline-jmxclient/
使用方法:
Usage: java -jar cmdline-jmxclient.jar USER:PASS HOST:PORT [BEAN] [COMMAND]
如檢視伺服器所有Mbeans的資訊:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345
這個命令會輸出所有的Mbeans,它能方便我們查詢需要的Mbeans,如我們相查詢和JDBC相關的Mbens,可以使用命令:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 | grep JDBC

如檢視JDBCConnectionPoolRuntime的資訊:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime ActiveConnectionsCurrentCount

其中com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime是Mbeans名,ActiveConnectionsCurrentCount為這個Mbeans下的一個屬性。

5. Weblogic的常用效能指標

JMSRuntime
JMSServersCurrentCount 返回當前JMS服務的連線數
ConnectionsCurrentCount 返回本JMS伺服器上當前的連線數
JMSServersHighCount 返回自伺服器啟動後JMS服務的最大連線數
ConnectionsHighCount 返回本JMS伺服器自上次重置後的最大連線數

JVMRuntime
HeapSizeCurrent 返回當前JVM堆中記憶體數,單位時位元組
HeapFreeCurrent 返回當前JVM堆中空閒記憶體數,單位時位元組

ExecuteQueueRuntime
ExecuteThreadCurrentIdleCount 返回佇列中當前空閒執行緒數
PendingRequestOldestTime 返回佇列中最長的等待時間
PendingRequestCurrentCount 返回佇列中等待的請求數
Queue Length 佇列長度

JDBCConnectionPoolRuntime
WaitingForConnectionHighCount    返回本JDBCConnectionPoolRuntimeMBean 上最大等待連線數
WaitingForConnectionCurrentCount 返回當前等待連線的總數
MaxCapacity 返回JDBC池的最大能力
WaitSecondsHighCount 返回等待連線中的最長時間等待者的秒數
ActiveConnectionsCurrentCount 返回當前活動連線總數
ActiveConnectionsHighCount 返回本JDBCConnectionPoolRuntimeMBean 上最大活動連線數

6. 新增Weblogic監控項到Zabbix

新增監控項,在key內填入:
jmx[“com.bea:Name={$JDBC_NAME},ServerRuntime={$JDBC_SERVER},Type=JDBCConnectionPoolRuntime”,ActiveConnectionsCurrentCount]
其中com.bea:Name={$JDBC_NAME},ServerRuntime={$JDBC_SERVER},Type=JDBCConnectionPoolRuntime為Mbeans,ActiveConnectionsCurrentCount為屬性項。
zabbix1

注意Type內應該選擇JMX Agent。zabbix2

最後看一張做出來的Weblogic JDBC連線池監控圖:

weblogin_monitor