2022 Zabbix中国峰会
2022 Zabbix中国峰会

4 Java gateway

概述

.从Zabbix 2.0版本开始,以Zabbix守护进程的形式原生支持监控JMX程序出现了,它被称为Zabbix Java gateway。Zabbix gateway 是用Java语言写成。要查得一台主机特定的JMX计数器值,Zabbix server向Zabbix Java gateway发送请求,后者使用JMX管理API 去请求远程的有关应用。应用不需要额外安装软件,只需要启动时在命令行指定-Dcom.sun.management.jmxremote 即可。

Java gateway接受来自Zabbix Server或Agent的传入连接,且只能用作“被动proxy”。 与Zabbix proxy相反,它也可以从Zabbix agent调用(Zabbix agent不能被链接)。 每个Java gateway的访问都直接在Zabbix sever或 proxy配置文件中配置,因此每个Zabbix sever或Zabbix agent只能配置一个Java gateway。 如果一台主机具 JMX agent 类型的监控项和和其他类型的监控项,则只将JMX agent监控项传递到Java gateway进行检索。

当在Java gateway上的一个监控项值更新了,Zabbix server或agent将连接Java gateway请求查询该值,Java gateway会依次retrieves并传回到server或proxy。 同样的,Java gateway不会缓存任何值.

Zabbix sever或proxy具有连接到Java gateway特定类型的进程,由 START_POLLERS 选项控制。 在内部,Java gateway启动多个由该选项控制的线程。 在sever端,如果连接超过 Timeout 秒,则将终止,但Java gateway可能仍忙于从JMX计数器检索值。 为了解决这个问题,由于Zabbix 2.0.15,Zabbix 2.2.10和Zabbix 2.4.5在Java gateway中有TIMEOUT选项,允许为JMX网络操作设置超时。

Zabbix server或agent将尽可能地将请求集中到一个JMX目标(受监控项间隔影响),并将它们发送到单一连接中的Java gateway,以获得更好的性能。 建议 StartJavaPollers 小于或等于 START_POLLERS ,否则可能导致当连接Java gateway时而Java gateway没有多余的线程进行处理

以下内容将详细讲描述如何获得和运行Zabbix Java gateway,如何配置Zabbix server(或proxy)利用Zabbix Java gateway完成JMX监控,以及如何配置Zabbix GUI里的监控项,以匹配特殊JMX计数器。

4.1 获取Java gateway

有两种方式得到Java gateway,一种是通过Zabbix网站下载Java gateway包,另一种是通过源码编译Java gateway。

4.1.1 通过Zabbix网站下载

Zabbix Java gateway包 (RHEL, Debian, Ubuntu)可在 http://www.zabbix.com/download.php下载。.

4.1.2 通过源码编译

为了编译Java gateway,您需要在运行./configure时加上–enable-java选项. 建议在安装时指定–prefix选项而非使用默认的/usr/local, 因为在安装Java gateway时将创建整个目录树,而并非单一的可执行文件

$ ./configure --enable-java --prefix=$PREFIX

使用make完成Java gateway编译并打包成一个JAR文件。需要注意的是:这一步将会需要javac和jar,因此您需要保证它们在路径中

$ make

现在您将在src/zabbix_java/bin下得到zabbix-java-gateway-$VERSION.jar文件. 如果您对在指定的目录下使用Java gateway满意,那么您可以完成配置和运行Java gateway,否则,请确保有足够的权限运行make install.

$ make install

4.2Java 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/android-json-4.3_r3.1.jar

Java gateway依赖 Logback, SLF4J, ,和Android JSON 库。

lib/logback.xml  
       lib/logback-console.xml

Logback的配置文件

shutdown.sh  
       startup.sh

用于启动和停止Java gateway的快捷脚本

settings.sh

用于启动和关闭的配置文件如上

4.3 配置和运行Java gateway

默认情况下,Java gateway监听10052端口。如果您计划使用不同的端口来运行Java gateway,需要通过setting.sh脚本指定下的端口. 请访问Java gateway 配置文件 获得如何指定该选项以及其他选项.

10052端口并没有在 IANA注册 ..

一旦完成了配置,您可以通过startup脚本来启动Java gateway

$ ./startup.sh

如果您不需要Java gateway,您可以运行shutdown脚本关闭它

$ ./shutdown.sh

与Sever和Proxy不同,Java gateway是轻量级的,不需要数据库的支持

4.4 配置Sever使用Java gateway

现在Java gateway已在运行,接下来您要告诉Zabbix server在哪里找到Zabbix Java gateway. 因此你需要在server配置文件中指定JavaGateway及JavaGateway端口(JavaGatewayPort).如果JMX应用采用Zabbix agent进行监控的话,您需要在proxy 配置文件中配置对应的连接参数.

JavaGateway=192.168.3.14
       JavaGatewayPort=10052

默认情况下,server并不会产生任何与JMX监控进程。但如果您想使用完成JMX监控,您需要指定Java轮询器的预分支实例数(pre-forked instances),您也可过同类的方式指定常见的轮询器和捕获器。

StartJavaPollers=5

一旦您完成了相关配置,不要忘记重启Sever或Proxy

4.5 Debugging Java gateway

当Java gateway出现问题,或者在前端看到的监控项报错信息不充分时,您也可以通过查看Java gateway日志文件获得更多信息

默认情况下,Java gateway将记录日志到/tmp/zabbix_java.log文件中,日志级别为”info”。 若您觉得”info”级别得到的信息并不充分,则需要修改级别为”debug”。你可以通过修改lib/logback.xml将<root>标签更改为”debug”以让日志级别的增加。

<root level="debug">
         <appender-ref ref="FILE" />
       </root>

需要注意的是,与Zabbix server或proxy不同,修改完logback.xml并不需要重启Zabbix Java gateway。 修改后的配置将会自动被加载.。当您完成了debug,您可以将日志级别改为”info”.

如果您想将日志记录到其他文件或者其他存储媒介,如数据库,按照您的需求调整logback.xml文件即可。想要了解更多请访问 Logback手册. 有时为了方便进行debug,采用控制台应用的方式会比守护进程更为有用。为此,需要注释掉setting.sh脚本中 PID_FILE 变量。一旦没有找到 PID_FILE 参数,startup.sh脚本将直接以控制台应用方式运行. Logback也将使用lib/logback-console.xml文件. 不仅仅只是记录到控制台,记录级别也将变更为”debug”. 最后,请注意,由于Java gateway使用SLF4J进行日志记录,您可以通过将适当的JAR文件放在lib文件夹里,来用您所选的框架来替换Logback。更多细节,请访问 [[http://www.slf4j.org/manual.html| SLF4J手册].