zabbix經過JMX監控tomcat狀態

由於公司大量使用tomcat做爲應用服務,因此,這兩天催生了一個想法,經過zabbix監控tomcat的運行狀態,從而可以更快的發現tomcat服務出現的問題以及判斷問題出如今哪塊。java

在網上找了一些資料來看,寫的都不是很全面(PS:對於我這種菜鳥來講,還有不少東西不知道的,因此須要有解釋的詳細點的文檔來幫助我更好理解原理,因而就有了本篇博文的誕生!)mysql

首先,zabbix監控tomcat等這一類java平臺的應用不是直接經過agentd來實現的,而是使用jmx來獲取到tomcat這類應用的狀態,而後再將數據交給server端,生成監控圖。web

好了,廢話很少說,咱們開始tomcat監控的配置之旅吧!sql

首先,若是須要用到jmx監控的話須要在客戶端和服務端都安裝java環境,至於java環境能夠經過源碼安裝,不過我這裏爲了省事,直接經過yum安裝java和java-devel這兩個包:apache

1
yum -y install java java-devel

而後是服務端的配置:tomcat

服務端須要從新安裝zabbix服務端,須要將--enable-java添加到編譯參數中去,參數以下所示:服務器

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

安裝好服務端以後能夠在軟件安裝目錄找到以下這個目錄:ssh

1
2
3
4
[root@test1 zabbix_java]# pwd
/usr/local/zabbix/sbin/zabbix_java
[root@test1 zabbix_java]# ls
bin  lib  settings.sh  shutdown.sh  startup.sh

修改settings.sh中得參數,其中大部分都是以#開頭的,修改的參數以下面所示:
curl

1
2
3
4
5
[root@test1 zabbix_java]# egrep -v "^#|^$" settings.sh 
 LISTEN_IP="0.0.0.0"
 LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
 START_POLLERS=5

而後修改zabbix_server.conf的配置,修改的參數以下面所示:tcp

1
2
3
4
5
6
7
8
9
[root@test1 zabbix_java]# egrep -v "^#|^$" /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=xxxxxx
DBSocket=/tmp/mysql.sock
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

其中上面的5行和之前配置同樣,下面的三行是須要將前面的#刪掉,並進行修改的。

修改完之後,重啓zabbixserver而且啓動zabbix_java_Gateway啓動zabbix_java_Gateway的方法爲

1
sh /usr/local/zabbix/sbin/zabbix_java/startup.sh

啓動以後,在服務端會多出一個偵聽端口10052來,效果以下:

1
2
3
[root@test1 zabbix_java]# netstat -antlp|grep 10052
tcp6       0      0 :::10052                :::*                    LISTEN      15371/java          
tcp6       0      0 127.0.0.1:10052         127.0.0.1:38661         TIME_WAIT

  -       

看到上面這些信息,證實服務端已經配置好了,接下來須要配置tomcat客戶端了。


tomcat客戶端的配置爲以下:

首先安裝java環境

也和上面同樣使用yum安裝:

1
yum -y install java java-devel

而後下載tomcat的源碼包,解壓後放在相應的目錄,我這裏放在/usrlocal/tomcat-8.0.26/目錄下。

而後須要下載對應tomcat的jmx版本,我這裏安裝的是最新的tomcat,版本是8.0.26,因而下載路徑爲以下:

wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.26/bin/extras/catalina-jmx-remote.jar

使用其餘版本的能夠自行選擇相對應的jmx版本下載。

下載後將該文件放在tomcat的lib目錄下,而後修改catalina.sh文件,catalina.sh文件在tomcat的bin目錄下。在#!bin/sh下方添加一行參數,以下所示:

1
2
#!/bin/sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.6.0.176"

其中的10.6.0.176是該tomcat客戶端的IP。而後須要修改服務器的配置文件server.xml:

1
2
3
4
5
6
[root@test3 tomcat-8.0.26]# tail -6 ./conf/server.xml
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="8090" rmiServerPortPlatform="8090" />
      </Host>
    </Engine>
  </Service>
</Server>

如上面所示,第一行就是咱們添加進去的配置,其中的8090就是zabbix server端監控tomcat須要使用的端口。

保存以後退出,而後啓動tomcat和zabbix的agentd,至於zabbix_agentd怎麼配置,在我以前寫的博客中有記載,有興趣的能夠去看看。

啓動完成以後經過ps命令和netstat命令查看是否正常的偵聽了相應的端口,zabbix_agentd默認偵聽10050端口,tomcat默認偵聽8080端口,8090端口是開給jmx使用的,應該也是開啓的,效果以下:

1
2
3
4
5
6
7
8
9
10
[root@test3 tomcat-8.0.26]# netstat -antlp|grep LISTEN       
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      19592/./sbin/zabbix 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      836/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1503/master         
tcp6       0      0 :::8090                 :::*                    LISTEN      21026/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      21026/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      21026/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      21026/java          
tcp6       0      0 :::40438                :::*                    LISTEN      21026/java          
tcp6       0      0 :::22                   :::*                    LISTEN      836/sshd

這時候能夠在zabbix_server端嘗試獲取tomcat的相關數據了。這時候須要使用到一個工具cmdline-jmxclient-0.10.3.jar

這個工具能夠本身到網上下載,個人附件中也會有這個工具,使用方法爲以下:

1
2
3
4
5
6
[root@test1 zabbix_java]# java -jar /root/cmdline-jmxclient-0.10.3.jar - 10.6.0.176:8090 java.lang:type=Memory NonHeapMemoryUsage
09/09/2015 17:56:49 +0800 org.archive.jmx.Client NonHeapMemoryUsage: 
committed: 24313856
init: 24313856
max: 224395264
used: 20066808

上面已經獲取到了相應的tomcat數據,好了,到這裏配置就差很少要大功告成了,可是還須要在web端配置相應的模版,剛開始我使用系統自帶的模板,發現出不來數據,因而我去網上找到了某個網友本身作的模板,終於能夠獲取到tomcat的數據了,模板我也將一併打包放在附件中。

好了,在web端開始配置了,配置以下圖所示:

wKiom1XwBdLSvYnsAAS8p1AZBlA392.jpg

其中的端口須要填寫兩個,第一個是agentd的偵聽端口,第二個是jmx的偵聽端口,這個端口8090是咱們在tomcat客戶端的server.xml文件中定義的。

將該主機關聯到相應的模板上去:

wKiom1XwBnHgiSceAAM2cDeHCQ4376.jpg

以後就等待出數據了,該模板中的某些鍵值在tomcat中不支持,我目前還不知道是什麼狀況,可能和tomcat中得配置參數有關係吧。下面展現一下出圖的效果,這個模板各位也能夠拿回去本身進行修改:

wKioL1XwCTXjWDPZAAXXi5EhswI428.jpgwKiom1XwBzPgVlF5AAQYnml68D0528.jpgwKioL1XwCZCBRGj5AAaJNWiJqKs920.jpg


本文出自 「檸檬」 博客,請務必保留此出處http://xianglinhu.blog.51cto.com/5787032/1693228

相關文章
相關標籤/搜索