網絡上很多教程也比較多和全了,但是自己做時候多多少少的坑備注下吧。
1,監控原理簡單說一下,就是zabbix_server通過代理(zabbix_java_gateway)來獲取agent端(tomcat)的數據。【當然可以和zabbix_agent分開使用了】
2。配置舉例吧。zabbix_server:10.2.2.123 zabbix_java_gateway:10.2.2.124 tomcat:10.2.2.125
三台機器是可以在一起的,但是為了區分三個作用還是分開來看吧
3.在zabbix_server端,修改配置文件
JavaGateway=10.2.2.124 JavaGatewayPort=10052 StartJavaPollers=5
在zabbix_java_gateway修改配置文件
LISTEN_IP="0.0.0.0" LISTEN_PORT=10052 START_POLLERS=5
listen_ip 我猜測是監控的地址池,不過沒有驗證 StartJavaPollers<=START_POLLERS
tomcat端修改catalina.sh文件,$(tomcat)/bin/Catalina.sh加入
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=10.2.2.125"
注意這個10.2.2.125要寫進/etc/hosts中,因為jmxremote這個包在回調信息時候回查詢其域名,不然回找不到路由。有時候不寫也行,我塊兒我也不太明白,先留着這個坑吧(我測試過連接成功之后刪除可以用,可能是記住了路由,不過最后還是都配置好比較好)。最好實現所有的內網服務器可以通過域名來互相訪問通。(ansible/saltstack之類的來做唄)
4.有人說要把jmxremote這個包放到$(tomcat)/lib/中,不過我沒放也可以,給個下載地址吧。一般在tomcat自己鏡像同目錄的bin/extras/ 目錄中
然后下載cmdline-jmxclient-0.10.3.jar這個包,我一直不知道這個包是哪個公司做的,而且這個包好像也沒人用新版本,這個版本用了n年了吧,不過能用就挺好。
現在tomcat端 測試
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 org.apache.logging.log4j2:component=Loggers,name=org.springframework,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" org.apache.logging.log4j2:component=Appenders,name=RollingFile,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" Catalina:context=/,host=localhost,type=Loader com.alibaba.druid:type=DruidDataSourceStat Catalina:name=HttpRequest1,type=RequestProcessor,worker="http-nio-8088" java.util.logging:type=Logging org.apache.logging.log4j2:component=Loggers,name=,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" java.lang:type=Compilation Catalina:port=8088,type=Connector JMImplementation:type=MBeanServerDelegate java.lang:type=ClassLoading
有數據就說明catalina.sh配置沒問題
然后在zabbix_java_gateway端 測試
java -jar cmdline-jmxclient-0.10.3.jar - 10.2.2.125:12345 org.apache.logging.log4j2:component=Loggers,name=org.springframework,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" org.apache.logging.log4j2:component=Appenders,name=RollingFile,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" Catalina:context=/,host=localhost,type=Loader com.alibaba.druid:type=DruidDataSourceStat Catalina:name=HttpRequest1,type=RequestProcessor,worker="http-nio-8088" java.util.logging:type=Logging org.apache.logging.log4j2:component=Loggers,name=,type="WebappClassLoader\n context: ROOT\n delegate: false\n----------> Parent Classloader:\njava.net.URLClassLoader@4bf558aa\n" java.lang:type=Compilation Catalina:port=8088,type=Connector JMImplementation:type=MBeanServerDelegate java.lang:type=ClassLoading
要讓zabbix_java_gateway端也能獲取數據才行
5.zabbix自帶模板除了檢測版本和壓縮傳輸的兩項,其他基本不能直接用,要用java -jar cmdline-jmxclient-0.10.3.jar - 10.2.2.125:12345 | grep "監控項"慢慢調整才能用
比如
jmx["Catalina:type=GlobalRequestProcessor,name=http-8080",requestCount] 調整為 jmx["Catalina:type=GlobalRequestProcessor,name=\"http-8080\"",requestCount]
一個一個改太麻煩,可以導出模板xml文件,vim 或者 emeditor來批量修改(其他帶正則表達式的替換工具也行)
改好了就添加主機,使用jmx的方式IP:port 10.2.2.125:12345
關聯模板,
完成