概述
Zabbix Java Gateway 是 Zabbix 的一个组件,用于监控 Java 应用程序的 JMX(Java Management Extensions)接口。通过 JMX,可以获取 JVM 性能指标、应用程序 MBean 数据等。
架构图
Zabbix Server ←→ Zabbix Java Gateway ←→ Java Application (JMX)工作原理
- Zabbix Server 向 Java Gateway 发起 JMX 数据请求
- Java Gateway 通过 JMX 协议连接到目标 Java 应用
- Java Gateway 采集 JMX 数据并返回给 Zabbix Server
安装
1. YUM 安装(推荐)
yum install -y zabbix-java-gateway2. 验证安装
# 查看安装文件
rpm -ql zabbix-java-gateway
# 查看版本
zabbix_java_gateway --version3. 安装目录说明
| 路径 | 说明 |
|---|---|
/usr/sbin/zabbix_java_gateway | 主程序 |
/etc/zabbix/zabbix_java_gateway.conf | 配置文件 |
/usr/lib/systemd/system/zabbix-java-gateway.service | Systemd 服务文件 |
/usr/share/zabbix-java-gateway/ | 依赖库目录 |
配置
1. 编辑配置文件
vim /etc/zabbix/zabbix_java_gateway.conf2. 常用配置项
# 监听地址(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=33. 配置项说明
| 配置项 | 默认值 | 说明 |
|---|---|---|
LISTEN_IP | 0.0.0.0 | 监听 IP 地址 |
LISTEN_PORT | 10052 | 监听端口 |
START_POLLERS | 5 | 轮询进程数 |
TIMEOUT | 3 | 连接超时时间(秒) |
PID_FILE | - | PID 文件路径 |
4. 启动服务
# 启动
systemctl start zabbix-java-gateway
# 开机自启
systemctl enable zabbix-java-gateway
# 查看状态
systemctl status zabbix-java-gateway
# 查看日志
journalctl -u zabbix-java-gateway -f5. 验证端口
netstat -tlnp | grep 10052
# 或
ss -tlnp | grep 10052Zabbix Server 配置
1. 修改 Server 配置
编辑 /etc/zabbix/zabbix_server.conf:
# Java Gateway 地址
JavaGateway=127.0.0.1
# Java Gateway 端口
JavaGatewayPort=10052
# Java 轮询进程数(必须大于 0 才能启用 JMX 监控)
StartJavaPollers=52. 重启 Zabbix Server
systemctl restart zabbix-server3. 验证配置
# 检查 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.accessSpring 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=false2. Zabbix Web 配置
2.1 添加 JMX 接口
- 进入 Configuration → Hosts
- 选择或创建主机
- 在 Interfaces 部分点击 Add → JMX
填写信息:
- IP address: Java 应用服务器 IP
- Port: JMX 端口(如 12345)
2.2 关联模板
- 进入 Templates 选项卡
- 点击 Select
选择以下模板之一:
Template App Generic Java JMXTemplate App Apache Tomcat JMXTemplate App JVM
2.3 配置宏(带认证时)
如果使用 JMX 认证,需要配置宏:
| 宏 | 值 |
|---|---|
{$JMX.USER} | JMX 用户名 |
{$JMX.PASSWORD} | JMX 密码 |
3. 验证监控
- 等待几分钟后查看最新数据
- 进入 Monitoring → Latest data
- 查看 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 -xe2. 无法连接到 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=54. 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=202. 调整超时时间
对于响应较慢的应用:
TIMEOUT=103. 监控规模建议
| 监控应用数 | Java Gateway 服务器 | START_POLLERS |
|---|---|---|
| < 50 | 与 Server 同机 | 5-10 |
| 50-200 | 独立服务器 | 20-50 |
| > 200 | 多台独立服务器 | 50+ |