概述

Zabbix Java Gateway 是 Zabbix 的一个组件,用于监控 Java 应用程序的 JMX(Java Management Extensions)接口。通过 JMX,可以获取 JVM 性能指标、应用程序 MBean 数据等。

架构图

Zabbix Server ←→ Zabbix Java Gateway ←→ Java Application (JMX)

工作原理

  1. Zabbix Server 向 Java Gateway 发起 JMX 数据请求
  2. Java Gateway 通过 JMX 协议连接到目标 Java 应用
  3. Java Gateway 采集 JMX 数据并返回给 Zabbix Server

安装

1. YUM 安装(推荐)

yum install -y zabbix-java-gateway

2. 验证安装

# 查看安装文件
rpm -ql zabbix-java-gateway

# 查看版本
zabbix_java_gateway --version

3. 安装目录说明

路径说明
/usr/sbin/zabbix_java_gateway主程序
/etc/zabbix/zabbix_java_gateway.conf配置文件
/usr/lib/systemd/system/zabbix-java-gateway.serviceSystemd 服务文件
/usr/share/zabbix-java-gateway/依赖库目录

配置

1. 编辑配置文件

vim /etc/zabbix/zabbix_java_gateway.conf

2. 常用配置项

# 监听地址(0.0.0.0 表示监听所有地址)
LISTEN_IP=0.0.0.0

# 监听端口
LISTEN_PORT=10052

# PID 文件位置
PID_FILE=/var/run/zabbix/zabbix_java_gateway.pid

# 启动的轮询进程数(根据监控规模调整)
START_POLLERS=5

# 超时时间(秒)
TIMEOUT=3

3. 配置项说明

配置项默认值说明
LISTEN_IP0.0.0.0监听 IP 地址
LISTEN_PORT10052监听端口
START_POLLERS5轮询进程数
TIMEOUT3连接超时时间(秒)
PID_FILE-PID 文件路径

4. 启动服务

# 启动
systemctl start zabbix-java-gateway

# 开机自启
systemctl enable zabbix-java-gateway

# 查看状态
systemctl status zabbix-java-gateway

# 查看日志
journalctl -u zabbix-java-gateway -f

5. 验证端口

netstat -tlnp | grep 10052
# 或
ss -tlnp | grep 10052

Zabbix Server 配置

1. 修改 Server 配置

编辑 /etc/zabbix/zabbix_server.conf

# Java Gateway 地址
JavaGateway=127.0.0.1

# Java Gateway 端口
JavaGatewayPort=10052

# Java 轮询进程数(必须大于 0 才能启用 JMX 监控)
StartJavaPollers=5

2. 重启 Zabbix Server

systemctl restart zabbix-server

3. 验证配置

# 检查 Java Poller 进程
ps aux | grep java

# 查看日志确认
tail -f /var/log/zabbix/zabbix_server.log

监控 Java 应用

1. 开启 Java 应用的 JMX

Tomcat 示例

编辑 bin/catalina.sh,添加以下内容:

# JMX 配置
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 \
    -Djava.rmi.server.hostname=192.168.1.100"

带认证的 JMX 配置

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=true \
    -Dcom.sun.management.jmxremote.password.file=/path/to/jmxremote.password \
    -Dcom.sun.management.jmxremote.access.file=/path/to/jmxremote.access \
    -Djava.rmi.server.hostname=192.168.1.100"

创建密码文件:

# 创建密码文件
echo "monitorRole R&D" > /path/to/jmxremote.password
echo "controlRole R&D" >> /path/to/jmxremote.password
chmod 600 /path/to/jmxremote.password

# 创建访问控制文件
echo "monitorRole readonly" > /path/to/jmxremote.access
echo "controlRole readwrite" >> /path/to/jmxremote.access

Spring Boot 应用示例

java -jar app.jar \
    -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=12345 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false

2. Zabbix Web 配置

2.1 添加 JMX 接口

  1. 进入 ConfigurationHosts
  2. 选择或创建主机
  3. Interfaces 部分点击 AddJMX
  4. 填写信息:

    • IP address: Java 应用服务器 IP
    • Port: JMX 端口(如 12345)

2.2 关联模板

  1. 进入 Templates 选项卡
  2. 点击 Select
  3. 选择以下模板之一:

    • Template App Generic Java JMX
    • Template App Apache Tomcat JMX
    • Template App JVM

2.3 配置宏(带认证时)

如果使用 JMX 认证,需要配置宏:

{$JMX.USER}JMX 用户名
{$JMX.PASSWORD}JMX 密码

3. 验证监控

  1. 等待几分钟后查看最新数据
  2. 进入 MonitoringLatest data
  3. 查看 JMX 监控项数据

常用 JMX 监控项

监控项说明
jmx["java.lang:type=Memory","HeapMemoryUsage.used"]JVM 堆内存使用
jmx["java.lang:type=Memory","HeapMemoryUsage.committed"]JVM 堆内存提交
jmx["java.lang:type=Threading","ThreadCount"]线程数
jmx["java.lang:type=Runtime","Uptime"]JVM 运行时间
jmx["Catalina:type=ThreadPool,name=*","currentThreadsBusy"]Tomcat 繁忙线程数
jmx["Catalina:type=GlobalRequestProcessor,name=*","requestCount"]Tomcat 请求数

常见问题

1. Java Gateway 无法启动

# 检查端口是否被占用
netstat -tlnp | grep 10052

# 检查日志
journalctl -u zabbix-java-gateway -xe

2. 无法连接到 Java 应用

  • 检查防火墙是否放行 JMX 端口
  • 确认 java.rmi.server.hostname 配置正确
  • 验证 JMX 是否开启:jcmd <pid> VM.command_line

3. Zabbix Server 提示 "No Java poller processes"

# 检查配置
grep "StartJavaPollers" /etc/zabbix/zabbix_server.conf

# 确保值大于 0
StartJavaPollers=5

4. JMX 认证失败

  • 检查用户名密码是否正确
  • 确认密码文件权限为 600
  • 检查 jmxremote.access 文件格式

5. 监控项显示 "Not supported"

  • 检查 MBean 名称是否正确(区分大小写)
  • 使用 JConsole 或 VisualVM 验证 MBean 存在
  • 检查 Java Gateway 日志

性能优化

1. 调整轮询进程数

根据监控的 Java 应用数量调整:

# /etc/zabbix/zabbix_java_gateway.conf
START_POLLERS=20

# /etc/zabbix/zabbix_server.conf
StartJavaPollers=20

2. 调整超时时间

对于响应较慢的应用:

TIMEOUT=10

3. 监控规模建议

监控应用数Java Gateway 服务器START_POLLERS
< 50与 Server 同机5-10
50-200独立服务器20-50
> 200多台独立服务器50+

最后修改:2026 年 04 月 14 日
如果觉得我的文章对你有用,请随意赞赏