Java 网关
概述
Zabbix 原生支持以名为“Zabbix Java 网关”的 Zabbix 守护进程监控 JMX 应用程序。
Zabbix Java 网关是使用 Java 编写的守护进程。
要获取主机上特定 JMX 计数器的值,Zabbix 服务器会查询 Zabbix Java 网关,而后者使用 JMX 管理 API 远程查询目标应用程序。
应用程序无需安装任何其他软件,只需在命令行中使用 -Dcom.sun.management.jmxremote 选项启动即可。
Java 网关接受来自 Zabbix 服务器或 proxy 的传入连接,并且只能作为“被动 proxy”使用。 与 Zabbix proxy 不同,它也可以由 Zabbix proxy 使用(Zabbix proxy 不能进行链式连接)。 每个 Java 网关的访问权限都直接在 Zabbix 服务器或 Zabbix proxy配置文件中进行配置,因此每个 Zabbix 服务器或 Zabbix proxy 只能配置一个 Java 网关。 如果某个主机包含 JMX agent 类型的监控项和其他类型的监控项,则只有 JMX agent 监控项会被传递给 Java 网关进行获取。
当某个监控项需要通过 Java gateway 更新时,Zabbix 服务器或 proxy 会连接到 Java gateway 并请求该值,而 Java gateway 随后会检索该值并将其返回给服务器或 proxy。
因此,Java gateway 不会缓存任何值。
Zabbix 服务器或 proxy 有一类专门连接到 Java gateway 的进程,由 StartJavaPollers 选项控制。
在内部,Java gateway 会启动多个线程,由 START_POLLERS 选项 控制。
在服务器端,如果某个连接耗时超过 "Timeout" 秒,它将被终止,但 Java gateway 可能仍在忙于从 JMX 计数器中检索值。
为了解决这个问题,Java gateway 中提供了 TIMEOUT 选项,可用于设置 JMX 网络操作的超时时间。
另请参见:
Zabbix 服务器或 proxy 会尽可能将针对单个 JMX 目标的请求进行汇总(受监控项间隔影响),并通过单个连接发送到 Java 网关,以获得更好的性能。
建议将 StartJavaPollers 设置为小于或等于 START_POLLERS;否则,可能会出现 Java 网关中没有可用线程来处理传入请求的情况。
在这种情况下,Java 网关会使用 ThreadPoolExecutor.CallerRunsPolicy,这意味着主线程将处理传入请求,并且在此期间不会接受任何新请求。
如果您尝试使用 Zabbix Java 网关监控基于 Wildfly 的 Java 应用程序,请安装 Wildfly 下载页面 上提供的最新 jboss-client.jar。