利用 zabbix 自动发现方式监控 java 应用(基于jdk8)
本文所用到脚本、模板均改至 github 大神 qiueer
各文件下载地址:链接:https://pan.baidu.com/s/1clz2gIVQ5U_K4zVdqwbjOA 提取码:84jo
复制这段内容后打开百度网盘手机App,操作更方便哦
详细步骤看下面~
01
服务端安装 zabbix_server 和客户端安装 zabbix_agent,在这里就不详说了
配置需要监控的 java 应用的启动信息,我这里是 tomcat
在 /home/tomcat/tomcat80/bin 目录下新建 setenv.sh 文件并写入对应信息,切记修改适当权限
最后当然还要重启 tomcat 啦~
CATALINA_OPTS="
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=3333 //设置监测端口
-Djava.rmi.server.hostname=localhost //设置监测IP,localhost即可
-Dcom.sun.management.jmxremote.ssl=false //关闭ssl加密
-Dcom.sun.management.jmxremote.authenticate=false" //关闭用户认证
02
首先在 zabbix_agent 中的 zabbix 目录下新建 log、scripts、zabbix_agentd.d 三个目录,当然,如果本身就有,就可以不用新建目录了
切记把 zabbix_agent 的 zabbix 目录下所有目录、文件的权限均设置用户和用户组问 zabbix,权限 755,预防因权限导致的各种问题
log 目录是为了存放自动产生的zabbix日志
scripts 目录是为了存放python脚本、类目录和jar包
zabbix_agentd.d 目录是为了存放jvm配置文件
03
下载我在百度云中分享的 python 脚本、类目录、jar包、conf 配置文件并上传到对应目录,同时修改权限
python 脚本/类目录 /jar 包:jvm.py、qiueer、cmdline-jmxclient-0.10.3.jar
放到 /etc/zabbix/scripts 目录下,注意修改权限
conf 配置文件:jvm.conf
放到 /etc/zabbix/zabbix_agentd.d 目录下,注意修改权限
如图所示:
04
下载我在百度云中分享的 JMX 自动发现模板文件,放到本机,备用
如图所示:
05
至此,准备工作基本完成,开始应用
打开 zabbix web 界面
导入 JMX 模板
设置对应主机链接模板
静待自动发现规则获取信息
06
至此,大功告成~
07
最后,做一些说明
001 叹号的是因为我是用的是默认设置,值为-1,无法正确识别的原因,你可以在tomcat或者java应用启动时指定值
002 新生代垃圾回收(吞吐量优,本质串行)-收集累计次数/秒 和 新生代垃圾回收(吞吐量优,并行)-收集累计次数/秒 在模板中是没有的,因为我发现写进模板中会导致无法正确获取信息,此处需自行添加监控项
新生代垃圾回收(吞吐量优,并行)-收集累计次数/秒 监控项设置
名称:[$3] 新生代垃圾回收(吞吐量优,并行)-收集累计次数/秒
类型:zabbix客户端
键值:jmx.jvm.item["java.lang:name=PS Scavenge,type=GarbageCollector",CollectionCount,3333]
主机接口:选择需要监控的主机
数值类型:数字(无正负)
更新间隔:60s
历史数据保留时长:7d
应用集:自行设置
其他保持不变
新生代垃圾回收(吞吐量优,本质串行)-收集累计次数/秒 监控项设置
名称:[$3] 新生代垃圾回收(吞吐量优,本质串行)-收集累计次数/秒
类型:zabbix客户端
键值:jmx.jvm.item["java.lang:name=PS MarkSweep,type=GarbageCollector",CollectionCount,3333]
主机接口:选择需要监控的主机
数值类型:数字(无正负)
更新间隔:60s
历史数据保留时长:7d
应用集:自行设置
其他保持不变
003 某些非关键监控项无法获取到信息,暂时还没看出哪里问题~
004 分享几条命令,用做测试获取信息的
python jvm.py -b 'java.lang:type=Threading' -k 'ThreadCount' -p 3333 //在zabbix_agent下使用的测试命令,可以测试下脚本是否正确执行,注意python脚本的路径
java -jar cmdline-jmxclient-0.10.3.jar - localhost:3333 |grep MemoryPool //同上
zabbix_get -s zabbix_agent客户端IP地址 -k jmx.jvm.item["java.lang:name=Compressed Class Space,type=MemoryPool",Usage,3333] //在zabbix_server上使用,用作测试是否能正常获取数据