用Zabbix經過JMX方式監控JVM/Tomcat/Weblogic/Websphere/Jboss等
轉載自:http://www.huilog.com/?p=688
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是使用了一個叫做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:
想更多的瞭解這些引數,可以參考下面這個連結:
http://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
下面介紹幾種常用的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就開啟了。
注意:這裡也可以把配置的內容放到setenv.sh單獨的一個檔案中(推薦這麼做);CATALINA_OPTS="內容" (不加冒號的話,會報以下錯誤)
./catalina.sh: line 96: -Djava.rmi.server.hostname=192.168.153.191: command not found
./catalina.sh: line 97: -Djavax.management.builder.initial=: command not found
./catalina.sh: line 98: -Dcom.sun.management.jmxremote=true: command not found
./catalina.sh: line 99: -Dcom.sun.management.jmxremote.port=12345: command not found
./catalina.sh: line 100: -Dcom.sun.management.jmxremote.ssl=false: command not found
./catalina.sh: line 101: -Dcom.sun.management.jmxremote.authenticate=false: command not found
如果使用到使用者名稱,密碼,那麼使用下面配置,jmxremote.access與jmxremote.password在$JAVA_HOME/jre/management目錄下
-Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
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
然後儲存,啟用更改,再重啟這個應用伺服器就開啟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和埠就可以連線了。如圖:
com.bea下面都是Weblogic相關的資訊,其它為JVM級別的資訊。應用伺服器下的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 上最大活動連線數
要想了解更多Weblogic的各種執行時Mbeans資訊,請參考官方文件:http://docs.huihoo.com/oracle/middleware/fusion/11g/apirefs.1111/e13951/core/index.html
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為屬性項。
注意Type內應該選擇JMX Agent。
最後看一張做出來的Weblogic JDBC連線池監控圖: