1. 开启Tomcat JMX功能
CATALINA_OPTS=”$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=10.124.129.241
-Dcom.sun.management.jmxremote.port=8889
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false”
重启tomcat即可;
注:java程序都会提供一个JMX接口去进行采集相关的数据,其他开启方式请参考相关说明,我主要是已tomcat监控为主;
2. 编写自动发现端口脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
[root@localhost scripts]# cat /etc/zabbix/scripts/jmx_discovery.sh
#!/bin/bash
# function:monitor tcp connect status from zabbix
source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
jmx_port_discovery () {
jmx_port=($(cat /etc/zabbix/scripts/java.txt|cut –d “|” –f2))
Tomcat_Name=($(cat /etc/zabbix/scripts/java.txt|cut –d “|” –f1))
printf ‘{\n’
printf ‘\t”data”:[\n’
for((i=0;i<${#jmx_port[@]};++i))
{
num=$(echo $((${#jmx_port[@]}-1)))
if [ “$i” != ${num} ];then
printf “\t\t{ \n”
printf “\t\t\t\”{#JMX_PORT}\”:\”${jmx_port[$i]}\”,\n”
printf “\t\t\t\”{#JAVA_NAME}\”:\”${Tomcat_Name[$i]}\”},\n”
else
printf “\t\t{ \n”
printf “\t\t \n”
printf “\t\t\t\”{#JMX_PORT}\”:\”${jmx_port[$i]}\”,\n”
printf “\t\t\t\”{#JAVA_NAME}\”:\”${Tomcat_Name[$i]}\”}]}\n”
fi
}
}
case “$1” in
jmx_port_discovery)
jmx_port_discovery
;;
*)
echo “Usage:$0 {jmx_port_discovery}”
;;
esac
|
编写/etc/zabbix/scripts/java.txt文件,内容如下:
1
2
3
|
[root@localhost scripts]# cat /etc/zabbix/scripts/java.txt
Tomcat_442|8880
Tomcat_8591|8881
|
注:其实这里有个弊端,不太智能,也就是需要把监控的jmx端口和相关服务名称写到这个文本里去,这里还需要网友提供一个更可靠的方法,还请大家不要栗色指教。
3. 编写jmx监控配置文件
1
2
3
4
5
|
[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.conf.d/discovery_java_status.conf
UserParameter=java.jmx.discovery,/etc/zabbix/scripts/jmx_discovery.sh jmx_port_discovery
UserParameter=java.HeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java –jar /etc/zabbix/scripts/cmdline–jmxclient–0.10.3.jar – 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage 2>&1|grep $2|cut –d ” “ –f2
UserParameter=java.NonHeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java –jar /etc/zabbix/scripts/cmdline–jmxclient–0.10.3.jar – 127.0.0.1:$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1|grep $2|cut –d ” “ –f2
UserParameter=java.LoadClass.status[*],/usr/local/jdk1.7.0_71/bin/java –jar /etc/zabbix/scripts/cmdline–jmxclient–0.10.3.jar – 127.0.0.1:$1 java.lang:type=ClassLoading $2 2>&1|cut –d ” “ –f6
|
4. 进行测试
其实,整体大致就是如此,key都能定义好了,至于模板我相信大家都能写了。(我也是今天才刚刚弄了下,很多也还没有完善)有关不同java的服务,最好是查看一下相关的文档,比如tomcat官方文档。这里大家可以参考一下tomcat自带的模板,下面给大家展示一下效果图:
文章转载来自:ttlsa.com