1. 程式人生 > >Zabbix監控Tomcat案例

Zabbix監控Tomcat案例

nsa read sass bug ria jmx inux tran 生效

[Tomcat部署]

[root@tomcat ~]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.52/bin/apache-tomcat-8.0.52.tar.gz

[root@tomcat ~]# tar zxvf apache-tomcat-8.0.52.tar.gz

[root@tomcat ~]# mv apache-tomcat-8.0.52 /usr/local/tomcat

[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

[root@Tomcat ~]# netstat -anput | grep java 
tcp        
0 0 :::8080 :::* LISTEN 1442/java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1442/java tcp 0 0 :::8009 :::* LISTEN 1442/java [root@Tomcat
~]# ps -ef | grep tomcat root 1442 1 10 04:43 pts/1 00:00:02 /usr/local/java//bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 1485 1275 0 04:43 pts/1 00:00:00 grep tomcat

【Zabbix監控Tomcat工作原理】

Zabbix-server要知道java應用程序的某項性能的使用時候 ,會啟動自身的一個Zabbix-JavaPollers進程去鏈接zabbix-JavaGateway請求數據,而zabbix-Javagateway收到請求後並使用;

“JMXmanagentAPI"去查詢特定的應用程序,而前提是應用程序這端在開啟的時候 需要“-Dcom.sun.management.jmxremote”參數來開啟JMX遠程查詢就行,JAVA程序會啟動自身的一個簡單的小程序端口向Zabbix-JavaGatway提供請求數據

技術分享圖片

【zabbix監控Tomcat配置】

上圖中我們可以得知,配置zabbix監控Java應用程序的關鍵點在於:配置Zabbix-JavaGatway,讓Zabbix-server能夠連接zabbix-JavaGatway,Tomcat開啟JVM遠程監控功能等;

1)編譯安裝zabbix server的時候需要加上--enable-java這個模塊,以便支持JMX監控,如果之前預編譯的時候沒有加上這個模塊,那麽需要重新預編譯,在這個在這裏需要的註意的是,重新編譯只需兩步即可,

不要make install,否則的話配置都重置了~

 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl --enable-java 

make 

Ps:如果./configure預編譯的過程中出現error報錯,那麽這個 原因是 缺少javac軟件,我們直接yum install javac*安裝便完事了~在此重新編譯即可;

技術分享圖片

承接./configure預編譯,make之後,我們我們進入zabbix的目錄,查看去config.log這個日誌,我們可以看到加上的java模塊

[root@localhost ~]# cd /usr/src/zabbix-3.4.10/
[root@localhost zabbix-3.4.10]# ls
aclocal.m4 bin ChangeLog conf config.log config.sub configure.ac database frontends INSTALL m4 Makefile.am man missing README src
AUTHORS build compile config.guess config.status configure COPYING depcomp include install-sh Makefile Makefile.in misc NEWS sass upgrades
[root@localhost zabbix-3.4.10]# !grep
grep ./configure config.log
$ ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl --enable-java
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux

【Tomcat被控端配置】

配置zabbix-agen客戶端Tomcat JVM,也就是tomcat的遠程調用腳本,配置jvm編輯catalina.sh,並加入以下配置

[root@Tomcat ~]# vim /usr/local/tomcat/bin/catalina.sh

技術分享圖片

1 CATALINA_OPTS="$CATALINA_OPTS 
2 -Dcom.sun.management.jmxremote      #開啟遠程監控
3 -Dcom.sun.management.jmxremote.port=12345    #遠程監控端口
4 -Dcom.sun.management.jmxremote.ssl=false     #遠程ssl驗證端口
5 -Dcom.sun.management.jmxremote.authenticate=false    #關閉權限認證
6 -Djava.rmi.server.hostname=192.168.17.134"   #被監控tomcat主機地址,默認就寫本地即可

3)隨後重啟tomcat服務

[root@Tomcat ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java/
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@Tomcat~ bin]# netstat -anput | egrep "12345|8080|8005|8009"
tcp6       0      0 :::8080                 :::*                    LISTEN      20422/java          
tcp6       0      0 :::12345                :::*                    LISTEN      20422/java          
tcp6       0      0 192.168.17.134:8005      :::*                    LISTEN      20422/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      20422/java  

【問題匯總】

我們重新啟動的時候,可能發現執行是正確的,並沒有出現任何錯誤,但實際上這個tomcat沒有起來,在這裏一定要netstat或者ps -ef進一步檢查一下服務是否正常運行,進一步判斷

netstat發現,tomcat是沒有啟動的,查看日誌,發現配置jmx的catalina.sh腳本沒有生效,導致tomcat服務啟動異常,這個原因是由於配置的時候位置寫錯了;

技術分享圖片

技術分享圖片

圖A

解決方法如下所示,加到最下面即可(在這裏,註意一下,這裏有很大的坑,配置參數位置必須要註意,否則無法生效,導致12345端口未啟動,最終導致鏈接拒絕,詳見圖A就知道)

技術分享圖片

1 CATALINA_OPTS="$CATALINA_OPTS  
2 -Dcom.sun.management.jmxremote 
3 -Djava.rmi.server.hostname=192.168.17.134 
4 -Dcom.sun.management.jmxremote.port=12345 
5 -Dcom.sun.management.jmxremote.ssl=false 
6 -Dcom.sun.management.jmxremote.authenticate=false"
[root@localhost bin]# /usr/local/tomcat/bin/startup.sh 
[root@localhost bin]# netstat -anput | egrep "12345|8080|8005|8009" tcp6 0 0 :::8080 :::* LISTEN 20422/java tcp6 0 0 :::12345 :::* LISTEN 20422/java tcp6 0 0 192.168.2.144:8005 :::* LISTEN 20422/java tcp6 0 0 :::8009 :::* LISTEN 20422/java

【監聽測試&驗證】

到目前 位置還沒完事,還要 驗證jmx監聽是否成功。那麽如何驗證呢?

首先在tomcat下載頁面extra類別中下載 JMX Remote jar二進制包放在tomcat/libx路徑下

[root@Tomcat ~]# cd /usr/local/tomcat/lib/

[root@Tomcat lib]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/extras/catalina-jmx-remote.jar

下載jmxcmd.jar文件測試時候能夠獲取數據

[root@Tomcat lib]# wget http://nchc.dl.sourceforge.net/project/jmxcmd/jmxcmd.jar

[root@localhost lib]# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.17.134:12345 java.lang:type=Memory NonHeapMemoryUsage   #ps:這裏的cmdline-jmxcline軟件包如果沒有的話,
06/09/2018 18:10:08 +0800 org.archive.jmx.Client NonHeapMemoryUsage:                                                               可以在博客下方留言,私信給你~
committed: 27721728
init: 2555904
max: -1
used: 2695680

第二種方式檢測也可以

[root@tomcat lib]# java -jar jmxcmd.jar - 192.168.17.134:12345 java.lang:type=Memory NonHeapMemoryUsage

06/10/2018 18:30:06 +0800 de.layereight.jmxcmd.Client NonHeapMemoryUsage: 

committed: 27721728
init: 2555904
max: -1
used: 2695680

【Tomcat所在的Zabbix-agent端配置】

[root@tomcat etc]# grep -vE "#|^$" zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
EnableRemoteCommands=1
Server=192.168.17.135
ListenPort=10050
ServerActive=192.168.17.135
Hostname=192.168.17.134
Timeout=20
AllowRoot=1
UnsafeUserParameters=1

【zabbix-server端配置】

在這裏Zabbix_server開啟java poller,zabbix_java開啟JavaGwateway,端口為10050,Tomcat JMX開啟12345提供性能數據

數據獲取的過程如下:

Java Poller----->JavaGatway:10052--->Tomcat:12345

1)修改zabbix_server.conf配置文件,內容如下(ps:只做陌生參數詳解):

[root@zabbix_server ~]# grep -vE "#|^$" /usr/local/zabbix/etc/zabbix_server.conf 
LogFile=/var/log/zabbix/zabbix.log
DBHost=localhost
DBName=zabbixdb
DBUser=xiaoyu
DBPassword=123456
DBPort=3306
StartPollers=50            #指定啟動多少個進程
StartPingers=100
JavaGateway=192.168.17.135     #Java網關地址,即zabbixserver端IP地址
JavaGatewayPort=10052         #java網關監聽端口
StartJavaPollers=5            #啟動時所指定的java pollers數量
Timeout=20
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts/
FpingLocation=/usr/sbin/fping
LogSlowQueries=3000
AllowRoot=0

2)編譯zabbix的時候 ,我們添加了--enable-java這個模塊,在這裏就會生成jmx目錄

[root@zabbix_server ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh 
[root@zabbix_server ~]# grep -vE "#|^$" /usr/local/zabbix/sbin/zabbix_java/settings.sh 
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=5
TIMEOUT=3

[root@zabbix_server ~]# /usr/local/zabbix/sbin/zabbix_java/startup.sh

[root@zabbix_server fonts]# netstat -anput | grep 10052
tcp6 0 0 :::10052 :::* LISTEN 40649/java
tcp6 0 0 192.168.17.135:10052 192.168.17.135:51584 TIME_WAIT -

【ZabbixWeb端配置】

zabbix端自帶一些版本,直接鏈接即可

技術分享圖片

Zabbix監控Tomcat案例