zabbix监控JMX之Tomcat
1、我们需要这4个文件:
下载链接:https://share.weiyun.com/5PobRgc
cmdline-jmxclient-0.10.3.jar:用来读取jmx信息
discovery_java_status.conf:客户端配置文件
java.txt:填写tomcat的相关端口
jmx_discovery.sh:自动发现的脚本
2、zabbix客户端配置Incloude路径
vi /usr/local/zabbix/etc/zabbix_agentd.conf
234 ### Option: Include
235 # You may include individual files or all files in a directory in the configuration file.
236 # Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
237 #
238 # Mandatory: no
239 # Default:
240 # Include=
241
242 # Include=/usr/local/etc/zabbix_agentd.userparams.conf
243 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
244
3、配置tomcat:
tomcat版本为7.0.85
在相应的tomcat实例中 启动参数下,添加这个:
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10052 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1"
10052是jmx远程监控的端口
配置完这个 记住重启下tomcat实例
4、将java.txt 、 jmx_discovery.sh放在这个目录下
[root@qhkjt-web scripts]# pwd
/usr/local/zabbix/scripts
[root@qhkjt-web scripts]# ll
总用量 8
-rwxr-xr-x 1 root root 42 8月 22 2018 java.txt
-rwxr-xr-x 1 root root 1391 8月 23 2018 jmx_discovery.sh
[root@qhkjt-web scripts]#
5、java.txt内容如下:
qhkjt-web|10052|9090
qhkjt-pdf|10053|9091
- 第一列:自定义的名称
- 第二列:jmx远程监控的端口
- 第二列:tomcat实例端口
6、jmx_discovery.sh内容如下,其作用是为服务器传递json格式:
#!/bin/bash
#function:monitor tcp connect status from zabbix
source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
#定义发现函数,从java.txt读取文本
jmx_port_discovery () {
catalina_port=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f3))
jmx_port=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f2))
Tomcat_Name=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f1))
length=${#jmx_port[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf "\n\t\t{"
printf "\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"
printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\",\n"
printf "\t\t\t\"{#CATALINA_PORT}\":\"${catalina_port[$i]}\"}\n"
if [ $i -lt $[$length-1] ];then
printf ","
fi
done
printf "\n\t]\n"
printf "}\n"
}
case "$1" in
jmx_port_discovery)
jmx_port_discovery
;;
jvmper)
#这个计算堆内存的百分比
userd=`/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$2 java.lang:type=Memory HeapMemoryUsage 2>&1|grep used |cut -d " " -f2`
total=`/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$2 java.lang:type=Memory HeapMemoryUsage 2>&1|grep max |cut -d " " -f2`
awk -v userd="$userd" -v total="$total" 'BEGIN{printf "%0.2f\n",userd/total*100}'
;;
*)
echo "Usage:$0 {jmx_port_discovery|jvmper}"
;;
esac
7、将cmdline-jmxclient-0.10.3.jar放在这个路径,因为脚本中写了绝对路径
[root@qhkjt-web lib]# pwd
/usr/local/zabbix/lib
[root@qhkjt-web lib]# ll
总用量 24
-rw-r--r-- 1 root root 140 8月 21 2018 1
-rw-r--r-- 1 root root 20124 8月 21 2018 cmdline-jmxclient-0.10.3.jar
[root@qhkjt-web lib]#
8、将discovery_java_status.conf放在这个目录下
[root@qhkjt-web zabbix_agentd.conf.d]# pwd
/usr/local/zabbix/etc/zabbix_agentd.conf.d
[root@qhkjt-web zabbix_agentd.conf.d]# ll
总用量 4
-rw-r--r-- 1 root root 2491 8月 23 2018 discovery_java_status.conf
[root@qhkjt-web zabbix_agentd.conf.d]#
9、discovery_java_status.conf内容如下:
格式:UserParameter=键值,脚本
#发现项目类别
UserParameter=java.jmx.discovery,/usr/local/zabbix/scripts/jmx_discovery.sh jmx_port_discovery
#当前线程数
UserParameter=java.ThreadCounts[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Threading ThreadCount 2>&1|cut -d " " -f6
#线程数峰值
UserParameter=java.PeakThreadCount[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Threading PeakThreadCount 2>&1|cut -d " " -f6
#总纯程数
UserParameter=java.TotalStartedThreadCount[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Threading TotalStartedThreadCount 2>&1| cut -d " " -f6
#实例当前线程数
UserParameter=java.Catalina.currentThreadCount[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 Catalina:name=\"http-apr-$2\",type=ThreadPool currentThreadCount 2>&1| cut -d " " -f6
#实例当前连接数
UserParameter=java.Catalina.connectionCount[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 Catalina:name=\"http-apr-$2\",type=ThreadPool connectionCount 2>&1| cut -d " " -f6
#实例最大线程数
UserParameter=java.Catalina.maxThreads[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 Catalina:name=\"http-apr-$2\",type=ThreadPool maxThreads 2>&1| cut -d " " -f6
#当前繁忙线程数
UserParameter=java.Catalina.currentThreadsBusy[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 Catalina:name=\"http-apr-$2\",type=ThreadPool currentThreadsBusy 2>&1| cut -d " " -f6
#堆内存使用量
UserParameter=java.HeapMemoryUsage.used[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage 2>&1|grep used |cut -d " " -f2
#堆内存最大
UserParameter=java.HeapMemoryUsage.max[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage 2>&1|grep max |cut -d " " -f2
#堆内存百分比
UserParameter=java.HeapMemoryUsage.per[*],/usr/local/zabbix/scripts/jmx_discovery.sh $1 $2
#当前会话数
UserParameter=java.Catalina.activeSessions[*],/usr/bin/java -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 Catalina:type=Manager,context=/egrantweb,host=localhost activeSessions 2>&1| cut -d " " -f6
10、配置完discovery_java_status.conf 记得重启下客户端
pkill -9 zabbix
/usr/local/zabbix/sbin/zabbix_agentd
11、测试客户端:
[root@qhkjt-web bin]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k java.jmx.discovery
{
"data":[
{ "{#JMX_PORT}":"10052",
"{#JAVA_NAME}":"qhkjt-web",
"{#CATALINA_PORT}":"9090"}
,
{ "{#JMX_PORT}":"10053",
"{#JAVA_NAME}":"qhkjt-pdf",
"{#CATALINA_PORT}":"9091"}
]
}
[root@qhkjt-web bin]#
测试成功
二、服务端:
1、创建模板
2、配置自动发现规则
类型:主动式
键值:java.jmx.discovery
3、由于是自动发现 所以要在“监控项原型”去创建监控项
名称:自定义
类型:主动式(注意)
应用集:JMX(自定义,便于查看)
4、在监控主机添加这个模板
5、查看有没有数据过来
己有数据过来
6、继续添加其他的“监控原型”
7、查看监控的数据:
三、配置触发器
1、创建触发器 注意:要在“自动发现规则”下的“触发器类型”下去创建
2、创建触发器原型
3、创建一个堆内丰百分比大于75%时就触发报警的触发器
4、“选择原型”
5、选中对应的监控原型
6、使用avg()函数
统计5分钟内的平均值,如果平均值大于75 就触发报警
7、定义为:严重
配置成功。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:zabbix监控JMX之Tomcat
本文作者:wangzhirui
发布时间:2019-09-05, 11:44:09
最后更新:2025-02-27, 02:03:58
原始链接:https://wangzhirui.com/2019/09/05/zabbix监控JMX之Tomcat/转载请保留原文链接及作者。