1, zabbix 自动发现脚本编写,采用python
在网上搜索一番,实现方式大部分是采用 zabbix-java-gateway,这个对监控几个的tomcat比较简单方便,但是我一台机器运行的tomcat有十多个,那就显得很傻逼了。
还有就是采用visualvm 这个工具,这个工具能够实时查看tomcat性能参数,包含 堆内存、线程数,元空间等。缺点就是他的数据数据不会存下来,只看到你打开这个工具的开始后的数据。
网上找到的模板和脚本,脚本可以用,但是模板无法导入,由于自己在zabbix在自己编写模板这块不是很熟悉,决定痛定思痛,自己全部写一遍,所有文章脚本和模板这些都是我结合网上的资料和自己的情况下,进行原创的。
前期准备工作,需要修改tomcat的catalina.sh 启动参数添加性能远程监控接口
我这边部署都是批量模板部署,前期我就写好了批量修改启动参数模板和脚本的,所以这边我把模板文件修改下,执行脚本,所有的工程就修改好了。
-Dcom.sun.management.jmxremote.port={jmxport} #修改远程端口,默认12345
-Djava.rmi.server.hostname={ip} #修改成tomcat 运行机器的ip 内网地址
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
实现思路:
执行脚本返回一个jason 格式数据,包含应用的名称,jmx 端口,http端口,
我这边tomcat都是批量部署,都在同一个路径下,
应用名称通过 os.listdir 处理,获取名称和觉得路径
ip, jmx端口通过 进程命令获取
http 端口,通过读取server.xml 获取。
2,监控脚本编写
实现思路就说python调用sh命令,执行命令:/app/jdk1.8.0_121/bin/java -jar /usr/lib/cmdline-jmxclient-0.10.3.jar - 192.168.254.26:12345 java.lang:type=Memory HeapMemoryUsage
命令直接执行效果图
解析输出结果获取相关结果。
这里分两种情况,
a,有的命令执行的结果是包含我们监控的三个维度的结果,如上图示例。对结果我们需要分别解析返回结果
b,还有就是就是我们需要的结果,直接提取数据,如下:
所以我在设计了一个监控字典:{项目名称:{需要执行的命令:需要取的值}}
对b情况就直接赋值同一个值 normal
在上图中这里是有点命令是需要转义的,不能会提示找不到命令类,这里需要提供http端口,我这采用有格式化传值,有的人可能 http-bio这里可能需要注意下,脚本中也处理了。
最终脚本执行结果如下:
3,将脚本上传到zabbix服务器和监控主机,验证监控项目和脚本
被监控段机器下,新建 /etc/zabbix/zabbix_agentd.d/userparameter_tomcat.conf,添加下面内容,需要重启监控zabbix-agent
UserParameter=tomcat.discovery,/usr/bin/python2 /etc/zabbix/discovery_tomcat.py
UserParameter=tomcat.status[*],/usr/bin/python2 /etc/zabbix/tomcat_monintor.py $1 $2 $3 $4
zabbix-server机器,执行
zabbix_get -s 192.168.0.116 -p 10050 -k tomcat.status[192.168.0.116,12351,9050,HeapMemoryUsageused]
执行结果
获取到结果,正常。如果不行,可以尝试重启下zabbix-server
3,zabbix监控模板编写
创建模板
点击创建自动发现规则
创建自动发现规则
设置发现规则的key值
创建监控原型
填入监控key
后面的触发器 图像,在我模板中都有设置
如果运行的tomcat比较多,由于我这边监控原型会有38个,监控项目在zabbixserver端生成很多监控项目,造成server的压力,需要把 /etc/zabbix/zabbix_server.conf 修改
StartPollers=150
我这边在模板默认关闭了项目的监控,需要的主机去模板中打开接口,防止突然造成服务器压力
最终在zabbix 效果图如下:
如果我的文章对你有用可以给我赞赏哟!
cmdline-jmxclient-0.10.3
脚本和模拟板