============================= 5 Java gateway ============================= .. contents:: 概述 --------------------------- Zabbix 2.0通过被称为"Zabbix Java gateway"的新增Zabbix守护进程提供了原生对JMX应用的监控. Zabbix Java gateway是采用Java编写的一个守护进程.当Zabbix server想知道主机JMX计数器的值时, 它请求Zabbix Java gateway,Zabbix Java gateway将利用 `JMX管理API `_ 去请求远程的有关应用.应用不需要额外安装软件,只需要在启动时在命令行指定 *-Dcom.sun.management.jmxremote* 选项. Java gateway接受来自Zabbix server或者proxy的连接,只能使用"被动代理"的方式. As opposed to Zabbix proxy, it may also be used from Zabbix proxy (Zabbix proxies cannot be chained). 在Zabbix server或代理的配置文件中指定访问JAVA gateway.因此在每一个Zabbix server或代理中只能配置一个Java gateway.如果一个主机有 **JMX agent** 及其他类型的监控项,则只有 **JMX agent** 类型的监控项可以通过Java gateway进行监控. 当在Java gateway上的一个监控项值更新了,Zabbix server或代理将连接Java gateway请求该值, which Java gateway in turn retrieves and passes back to the server or proxy. 同样的,Java gateway不会缓存任何值. Zabbix server或代理可以通过 **StartJavaPollers** 控制连接Java gateway的进程. Java gateway在内部通过 **START_POLLERS** 控制选项使用多线程启动. 在服务端,如果一个连接请求超过了 **Timeout** 设定的秒数,连接将会终止,但Java gateway也许此时依然忙于从JMX计数器中检索该值. Zabbix server or proxy will try to pool requests to a single JMX target together as much as possible (affected by item intervals) and send them to the Java Gateway in a single connection for better performance. 建议 **StartJavaPollers** 小于或等于 **START_POLLERS** ,否则可能导致当连接Java gateway时而Java gateway没有多余的线程进行处理. 以下内容将详细讲讲如何安装和运行Zabbix Java gateway,如何配置Zabbix server(或代理)利用Zabbix Java gateway完成JMX监控,如何在Zabbix GUI配置JMX计数器监控项. Getting Java gateway ---------------------- 有两种方式得到Java gateway,一种是通过Zabbix网站下载Java gateway包,另一种是通过源码编译Java gateway. 通过Zabbix网站下载 ^^^^^^^^^^^^^^^^^^^^^ 该方法当前是无效的,不过未来你可以在Zabbix网站上下载Java gateway压缩包 (译者注:这算是寅吃卯粮不,哈哈) 通过源码编译 ^^^^^^^^^^^^^^^^^^^^^ 为了编译Java gateway,你需要在运行./configure时指定--enable-java选项. 建议在安装时指定--prefix选项而并非使用默认的/usr/local, 因为在安装Java gateway时将创建整个目录树,而并非单一的可执行文件.:: $ ./configure --enable-java --prefix=$PREFIX 使用make完成Java gateway编译并打包成一个JAR文件. 注意本步将使用javac和jar,因此你需要保证它们在path中.:: $ make 现在你将在src/zabbix_java/bin下得到zabbix-java-gateway-$VERSION.jar文件. 如果你想在指定的目录下轻松的使用Java gateway以完成配置和运行,请确保有足够的权限运行 make install. :: $ make install Java gateway 文件预览 ------------------------------------ 不管你怎么得到Java gateway, 最终在$PREFIX/sbin/zabbix_java下你会看到shell脚本、JAR包和配置. 文件的用途如下: :: bin/zabbix-java-gateway-$VERSION.jar Java gateway JAR文件 :: lib/logback-core-0.9.27.jar lib/logback-classic-0.9.27.jar lib/slf4j-api-1.6.1.jar lib/org-json-2012-12-28.jar Java gateway依赖 `Logback `_ `SLF4J `_ `JSON.org `_ 库 :: lib/logback.xml lib/logback-console.xml Logback的配置文件 :: shutdown.sh startup.sh 方便不进行启动/关闭Java gateway的脚本. :: setting.sh Configuration file that is sourced by startup and shutdown scripts above. 配置和运行Java gateway ---------------------------------- 默认情况下,Java gateway监听10052端口. 如果你计划使用不同的端口来运行Java gateway,你需要通过setting.sh脚本指定下需要的端口. 请访问 `Java gateway配置文件` 获得如何指定该选项以及其他选项. .. warning:: 10052端口并没有在 `IANA `_ 注册过 一旦你完成了配置,你可以通过startup脚本来启动Java gateway:: $ ./startup.sh 如果你不需要Java gateway,你可以运行shutdown脚本关闭它:: $ ./shutdown.sh 不像server和代理(proxy),Java gateway是轻量级的,并不需要数据库支持. 配置server使用Java gateway ------------------------------------------ 当前Java gateway已经运行,接下来你需要告诉Zabbix server如何找到Zabbix Java gateway. 因此你需要在 `server配置文件` 中指定JavaGateway及JavaGateway端口. 如果JMX应用采用Zabbix代理进行监控的话,你需要在 `代理配置文件` 中指定对应的连接参数. :: JavaGateway=192.168.3.14 JavaGatewayPort=10052 默认情况下,server并不会派生出任何进程去进行JMX监控。如果你想使用完成JMX监控,你需要指定预派生出来的Java pollers进程数,你也可过同类的方式指定常见的pollers和trappers. :: StartJavaPollers=5 在完成配置后,千万不要忘记要重启server(或代理) Debugging Java gateway ---------------------------- 万一Java gateway出现了若干问题,在前段可以看到的监控项报错信息并不充分,你也可以通过查看Java gateway日志文件获得更多信息. 默认情况下,Java gateway将记录日志到/tmp/zabbix_java.log文件中,log级别为"info". 有时你觉得"info"级别得到的信息并不够,你需要修改级别为"debug". 你可以通过修改lib/logback.xml将标签更改为"debug"以获取日志级别的增加. :: 需要注意的是,并不像Zabbix server或proxy那样,修改完logback.xml并不需要重启Zabbix Java gateway. 修改后的配置将会自动被加载. 当你完成了debugging,你可以将log级别替换为"info". 如果你想将日志记录到其他文件或者其他方式完成存储(如数据库),按照你的需求调整logback.xml文件即可。 欲了解更多请访问 `Logback手册 `_ 有时为了方便进行debug,你也许不想采用daemon方式而想采用控制台的方式. 你需要注释掉setting.sh脚本中 **PID_FILE** 变量。一旦没有找到 **PID_FILE** 参数,startup.sh脚本将直接以控制台方式运行. Logback也将使用lib/logback-console.xml文件. 不仅仅只是记录到控制台,记录级别也将变更为"debug". Finally, note that since Java gateway uses SLF4J for logging, you can replace Logback with the framework of your choice by placing an appropriate JAR file in lib directory. 访问 `SLF4J手册 `_ 获得更多.