从 Zabbix 2.0 开始,以 Zabbix 守护进程方式原生支持监控 JMX 应用程序就存在了,称之为“Zabbix Java gateway”。Zabbix Java gateway 的守护进程是用 Java 编写。为了在特定主机上找到 JMX 计数器的值,Zabbix server 向 Zabbix Java gateway 发送请求,后者使用 JMX 管理 API 来远程查询相关的应用。该应用不需要安装额外的软件。只需要在启动时,命令行添加-Dcom.sun.management.jmxremote
选项即可。
Java gateway 接受来自 Zabbix server 或 Zabbix proxy 的传入连接,并且只能用作“被动 proxy”。与 Zabbix proxy 相反,它也可以从 Zabbix proxy (Zabbix proxy 不能被链接)调用。在 Zabbix server 或 Zabbix proxy 配置文件中,可以直接配置每个 Java gateway 的访问,因此每个 Zabbix pserver 或 Zabbix proxy 只能配置一个 Java gateway。如果主机将有 JMX agent 或其他类型的监控项,则只将 JMX agent 监控项传递给 Java gateway 进行检索。
当必须通过 Java gateway 更新监控项时,Zabbix server 或 proxy 将连接到 Java gateway 并请求该值,Java gateway 将检索该值并将其传递回 Zabbix server 或 Zabbix proxy。 因此,Java gateway 不会缓存任何值。
Zabbix server 或 Zabbix proxy 具有连接到 Java gateway 的特定类型的进程,由 StartJavaPollers 选项控制。在内部,Java gateway 启动多个线程,由 START_POLLERS 选项控制。 在服务器端,如果连接超过 Timeout 选项配置的秒数,它将被终止,但 Java gateway 可能仍在忙于从 JMX 计数器检索值。 为了解决这个问题,从 Zabbix 2.0.15、Zabbix 2.2.10 和 Zabbix 2.4.5 开始,Java gateway 中有 TIMEOUT 选项,允许为 JMX 网络操作设置超时。
Zabbix server 或 proxy 尝试尽可能地将请求汇集到单个 JMX 目标(受监控项取值间隔影响),并在单个连接中将它们发送到 Java Gateway 以获得更好的性能。
此外,建议让 StartJavaPollers 选项的值小于或等于 START_POLLERS,否则可能会出现 Java gateway 中没有可用线程来为传入请求提供服务的情况。
以下部分描述了如何获取和运行Zabbix Java gateway,如何配置 Zabbix server(或 Zabbix proxy)来使用 Zabbix Java gateway 进行 JMX 监控,以及如何在 Zabbix GUI 中配置与特定 JMX 计数器对应的 Zabbix 监控项。
获取 Java gateway 有两种方法。 一种是从 Zabbix 网站下载 Java gateway 二进制包,另一种是从源代码编译 Java gateway。
Zabbix Java gateway 二进制包 (RHEL, Debian, Ubuntu)可以从 http://www.zabbix.com/download.php 下载。
为了编译 Java gateway,首先使用 --enable-java
选项运行 ./configure
脚本。建议您使用 --prefix
选项来指定其他路径,而非默认的 /usr/local 路径,因为安装 Java gateway 将创建整个目录树,并非单个可执行文件。
要将 Java gateway 编译并打包到 JAR 文件中,请运行 make
。 值得注意的是,对于此步骤,会使用 javac
和 jar
可执行文件,因此需要确保它们处于正确的路径下。
现在您在 src/zabbix_java/bin 路径下 有 zabbix-java-gateway-$VERSION.jar 文件。如果您熟悉在 src/zabbix_java 分发目录下运行 Java gateway,那么您可以继续执行配置和运行 Java gateway 的指令。否则,请确保您有拥有足够的权限来运行 make install
。
无论您如何获得的 Java gateway,在 $PREFIX/sbin/zabbix_java 路径下您都会获得一系列的 shell 脚本、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 库。
用于 Logback 的配置文件:
启动和停止 Java gateway 的便捷脚本:
由上面启动和停止脚本提供的配置文件。
默认情况下,Java gateway 监听 10052 端口。如果您计划使用不同的端口来运行 Java gateway,则可以通过 setting.sh 脚本中指定端口。有关如何指定此选项和其他选项,详见 Java gateway 配置文件。
值得注意的是,端口 10052 并没有在 IANA 注册。
待熟悉设置后,您可以通过运行 startup 脚本来启动 Java gateway:
同样的,一旦您不需要 Java gateway,运行 shutdown 脚本即可关闭它。
请注意,与 Zabbix server 或 Zabbix proxy 不同,Java gateway 是轻量级的,并不需要数据库。
现在 Java gateway 正在运行,您必须告诉 Zabbix server 从哪里找到 Zabbix Java gateway。因此需要在 Zabbix server 配置文件 中指定 JavaGateway 和 JavaGatewayPort 参数。如果 Zabbix proxy 监控运行着 JMX 应用程序的主机,则在 Zabbix proxy 配置文件 中指定连接参数。
默认情况下,Zabibx server 不会启动与 JMX 监控相关的任何进程。但是,如果要使用它,则必须指定 Java pollers 的 pre-forked 实例数。 同样的,您也可以指定常规的 pollers 和 trappers。
值得注意的是,在完成配置后,请不要忘记重新启动 Zabbix server 或 Zabbix proxy。
如果 Java gateway 出现任何问题或者您看到 Zabbix 前端中的监控项错误消息不充分时,您可以查看 Java gateway 的日志文件。
默认情况下,Java gateway 的日志会记录到 /tmp/zabbix_java.log 文件中,日志级别为“info”。有时候这些信息是不够的,需要将日志级别修改为“dubug”。为了提高日志记录级别,需要修改lib/logback.xml 文件并将 <root> 标记的 level 属性更改为“debug”:
值得注意的是,与 Zabbix server 或 Zabbix proxy 不同,更改 logback.xml 文件后无需重新启动 Zabbix Java gateway,将自动完成 logback.xml 中的更改。 完成调试后,可以将日志记录级别修改回“info”。
如果您希望记录到其他文件或完全不同的介质(如数据库),请调整 logback.xml 文件以满足您的需要。详见 Logback 手册。
有时为了方便调试,将 Java gateway 作为控制台应用程序而不是守护程序启动是更有用的。 为此,请在 settings.sh 中注释掉 PID_FILE 变量。 如果省略 PID_FILE ,则 startup.sh 脚本将 Java gateway 作为控制台应用程序启动,并让 Logback 使用 lib/logback-console.xml 文件,这不仅会记录到控制台,还会启用日志记录级别“debug”。
最后,值得注意的,由于 Java gateway 使用 SLF4J 进行日志记录,因此可以适当地将 JAR 包放置在 lib 目录中, 来将 Logback 替换为您所选的框架。详见 SLF4J 手册。