centos7,zabbix3.2通过zabbix_java_gateway监控jmx[java/tomcat]
Posted on 2017-11-20 17:12 tdtdttdd 阅读(2156) 评论(1) 收藏 举报网络上很多教程也比较多和全了,但是自己做时候多多少少的坑备注下吧。
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
关联模板,
完成