参考: [ JMX monitoring ] [ Zabbix Java gateway ] [ JMX Monitoring (Java Gateway) not Working ] [ Monitoring and Management Using JMX ]

这里会说明通过 JMX 监控 java 进程的配置过程以及需要注意的问题.

本文在 zabbix 已经安装好的基础之上展开. 如果使用 zabbix_proxy , 配置完全一致, 只需要打开zabbix_proxy 对 java app server 有所有端口的访问权限即可.

环境说明

基本环境

OS: CentOS 7.x
Zabbix 系列版本: 3.4.11
zabbix-server IP: 172.16.1.10
zabbix-java-gateway IP: 172.16.1.10
java app server IP: 172.16.1.11

网络配置需求

zabbix 相关进程都监听在默认端口:

zabbix-server: 10051
zabbix-agentd: 10050
zabbix-java-gateway: 10052

zabbix-server: 访问 zabbix-agentd 10050
zabbix-agentd: 访问 zabbix-server 10051
zabbix-java-gateway: 访问 zabbix-agentd 所有随机端口权限. (原因可以查看这里) 因为zabbix_java_gateway 还会使用一个随机端口来访问远程主机的 RMI 信息.

zabbix 配置

安装 zabbix-java-gateway

在 172.16.1.10 (zabbix-server / zabbix-java-gateway ) 上执行:

rpm i https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpmyum -y install zabbix-java-gateway

**配置 /etc/zabbix/zabbix_java_gateway.conf **

LISTEN_IP=“0.0.0.0”LISTEN_PORT=10052PID_FILE=“/var/run/zabbix/zabbix_java.pid”START_POLLERS=5TIMEOUT=3

配置 /etc/zabbix/zabbix_server.conf

JavaGateway=localhostJavaGatewayPort=10052StartJavaPollers=5

关于 START_POLLERS 和 StartJavaPollers 值的设定需求: StartJavaPollers <= START_POLLERS ( [ 原因 ])

如果 StartJavaPollers > START_POLLERS, 会出现 zabbix-java-gateway 没有线程来接收进来的请求.

启动服务

# start zabbix-serverzabbix_server# start zabbix-java-gatewayzabbix_javagateway

Java App 启动参数的配置

具体可以参考 [ 这里 ].

启动参数如下

java \Djava.rmi.server.hostname=172.16.1.11 \Dcom.sun.management.jmxremote \Dcom.sun.management.jmxremote.port=18383 \Dcom.sun.management.jmxremote.authenticate=false \Dcom.sun.management.jmxremote.ssl=false \jar /data/app/demo.jar

这里需要说明:

Djava.rmi.server.hostname : 这里需要指定 Java App 运行服务器的 IP 地址. 如果不指定这个参数, 则只接收来自 localhost 的请求.
Dcom.sun.management.jmxremote.port: JMX 监听的端口. 只要不冲突即可.

附上shell 启动脚本

#!/bin/sh

# – start.sh

#app=$1

basic_path=/data/app

# Ubuntu

host_ip=`ifconfig | egrep -A 2 “eth|ens” | awk -F “[: ]” /\/ && !/127.0.0.1/{sub(/^[ \t]+/,””);print $3}`# CentOS

# host_ip=`ifconfig| egrep -A 2 “eth|ens” | awk -F “[ X]+” /\/ && !/127.0.0.1/ {sub(/^[ \t]+/,””);print $2}`# first args could be jar name or directory name.

app_name=`echo $app | awk -F. {print $1}`JAVA_OPS=” -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18383 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$host_ip”nohup /usr/bin/java $JAVA_OPS -jar $basic_path/$app_name/$app_name.jar >/dev/null 2>&1 &[ $? == 0 ] && echo -e “Start Success!\n”

Zabbix GUI 配置

配置请看 [ 这里 ].

配置 JMX Interface:

IP Address: Java APP 所在的服务器地址
Port: Dcom.sun.management.jmxremote.port 所配置的端口
Link 模板

在配置过程中需要注意的地方:

zabbix-server ( 或者 zabbix-proxy ) 需要有访问 Java App Server 的所有随机端口的权限.

本地随机端口可以用: sysctl net.ipv4.ip_local_port_range 查看, 默认为 32768 – 60999, 所以在 Java App Server 上打开这些端口的对于 zabbix-server ( 或 zabbix-proxy ) 的访问权限.

发表回复

后才能评论