环境及背景
一台服务器运行两个个java api接口,需要监控tomcat 服务状态很多监控项的情况下一个个添加很烦,笔者使用自动发现功能,已监控tomcat线程为例。
系统CentOS6.10,zabbix 4.0.x
脚本编写及测试
zabbix安装省略
创建发现服务器上面运行tomcat的 tomcat目录名称的脚本
脚本可以自动发现tomcat的目录名称(一般自定义),设置脚本成监控项,zabbix会定期执行这个监控项,自动发现当前服务器上所有tomcat实例,脚本默认放在/web/data/zabbix-4.0/share/zabbix/alertscripts目录下,脚本如下:
#!/usr/bin/python2 #Usage: discover tomcat_app #Last Modified: import subprocess import json args="find /web/soft/tomcat* -name 'catalina.properties' | sort -n | uniq | awk -F'/' '{print $4}'" t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0] apps=[] for app in t.split('\n'): if len(app) != 0: apps.append({'{#TOMCAT_NAME}':app}) print json.dumps({'data':apps},indent=4,separators=(',',':'))
执行脚本查看获取到的tomcat实例:
[zabbix@localhost alertscripts]$ ./discover_jvm.py { "data":[ { "{#TOMCAT_NAME}":"tomcat7-8080" }, { "{#TOMCAT_NAME}":"tomcat7-8081" } ] }
创建监控项脚本
脚本作用打印出tomcat实例需要监控的监控项,本文以tomcat线程数为例,脚本执行需要两个参数,$1为tomcat实例名,$2为tomcat监控项。所有脚本记得赋权
#!/bin/bash # Usage: tomcat project status monitor # config zabbix sudo TOMCAT_NAME=$1 status=$2 TOMCAT_PID=`ps -ef | grep "$TOMCAT_NAME" | grep "[o]rg.apache.catalina.startup.Bootstrap start" | grep -v grep | awk '{print $2}'` jstack=`which jstack` case $status in thread.num) # use jstack --help ${jstack} -l ${TOMCAT_PID} | grep http | grep -v grep | wc -l ;; *) echo "Usage: $0 {TOMCAT_NAME status[thread.num]}" exit 1 ;; esac
执行脚本查看tomcat7-8081的线程数:
[zabbix@localhost alertscripts]$ ./app_status.sh tomcat7-8080 thread.num 104 (tomcat默认线程4个(不知道干什么的)+初始等待进程100)
zabbix客户端配置
在客户端配置文件中添加自定义的监控项key:
#允许所有字符的参数传递给用户定义的参数 UnsafeUserParameters=1 UserParameter=custom.discover.jvm_app,/web/data/zabbix-4.0/share/zabbix/alertscripts/discover_jvm.py UserParameter=custom.app.thread_num[*],/web/data/zabbix-4.0/share/zabbix/alertscripts/app_status.sh $1 $2
添加完成后重启zabbix-agent并在服务端验证
验证获取custom.discover.jvm_app的key值
[zabbix@localhost alertscripts]$ /web/data/zabbix-4.0/bin/zabbix_get -s 192.168.121.254 -p10050 -k custom.discover.jvm_app { "data":[ { "{#TOMCAT_NAME}":"tomcat7-8080" }, { "{#TOMCAT_NAME}":"tomcat7-8081" } ] }
验证获取custom.app.thread_num (tomcat7-8080)的key值
[zabbix@localhost alertscripts]$ /web/data/zabbix-4.0/bin/zabbix_get -s 192.168.121.254 -p10050 -k custom.app.thread_num["tomcat7-8080",thread.num] 104
zabbix界面添加自动发现模板
创建发现规则
创建监控项
创建自定义图表