首先得介绍一下zabbix自动探索功能,举个例子,一台服务器需要监控的根目录的磁盘容量,先自定义一个key:
UserParameter=disk_use[*],/usr/local/disk_use.sh $1 #disk_use是自定义的key,之后的是取值脚本 [*]代表着脚本的入参变量 $1是给这个脚本入参的变量数 该脚本的功能是根据入参变量得出磁盘容量大小
,然后就能获取到使用情况了。但是服务器监控磁盘容量的话,肯定不会让你只监控一个根目录,比如还有/data目录,/proc目录…等等,每台服务器的情况都不同。这时候就需要使用自动探索功能了。针对这样的情况,需要定义2个key:
UserParameter=dir_name,/usr/local/dir_name.sh #该脚本功能是获取目录名,并输出json格式
UserParameter=disk_use[*],,/usr/local/disk_use.sh $1 #脚本功能不变,$1的参数由dir_name.sh获取,这样的话就可以监控多个目录磁盘容量
下面是监控多tomcat实例的内容,
- 修改zabbix_agent配置
vim /data/zabbix/etc/zabbix_agentd.conf
Include=/data/zabbix/etc/zabbix_agentd.conf.d/*.conf #开启子配置文件的路径
UnsafeUserParameters=1 #允许所有字符参数的传递
- 自定义key值
vim /data/zabbix/etc/zabbix_agentd.conf.d/jvm.conf
UserParameter=jvm.name,/data/zabbix/shell/jvm_name.sh #获取tomcat名,并输出json格式
UserParameter=jvm.thread.num[*],/data/zabbix/shell/jvm_thread_num.sh $1 $2 #脚本功能取tomcat线程数
UserParameter=jvm.status[*],/data/zabbix/shell/jvm_status.sh $1 $2 #脚本功能取tomcat状态
- 脚本内容
- jvm_name.sh
#!/bin/bash
tomcat_name=`ps -ef | grep tomcat | grep -v grep | awk -F "=" ‘{print $NF}‘ | cut -d "/" -f 3`
flag=0
count=`ps -ef | grep tomcat | grep -v grep | wc -l`
if [ $count == 0 ];then
exit
fi
echo ‘{"data":[‘
echo "$tomcat_name" |while read LINE;do
echo -n ‘{"{#JVMNAME}":"‘$LINE‘"}‘
flag=`expr $flag + 1`
if [ $flag -lt $count ];then
echo ‘,‘
fi
done
echo ‘]}‘
- jvm_thread_num.sh
#!/bin/sh
jvmname=$1
pid=`ps -ef | grep "$jvmname" | grep -v grep | grep -v "$0"| awk ‘{print $2}‘ `
jvm_status=`sudo -u ody /usr/local/java/jdk1.7.0_80/bin/jstack "$pid" > /data/zabbix/shell/jstack.txt`
function all {
cat /data/zabbix/shell/jstack.txt | grep http|wc -l
}
function runnable {
cat /data/zabbix/shell/jstack.txt | grep http|grep runnable|wc -l
}
$2
- jvm_status.sh #该脚本是通过读取文件来获取值的,文件生成是另外一个任务计划的脚本jstat.sh生成的,因为通过实时运行脚本的话,对系统资源消耗过大,所以通过这种方式来获取
#!/bin/bash
t=$1
jvm_key=$2
cat /data/zabbix/txt/"$t".gc | grep -w "$jvm_key" | awk ‘{print $2}‘
- jstat.sh 将该脚本加入任务计划每分钟执行一次
#!/bin/bash
tomcat_name=`ps -ef | grep tomcat | grep -v grep | grep -v "jvm_status.sh" | awk -F "=" ‘{print $NF}‘ | cut -d "/" -f 3`
for t in ${tomcat_name[@]};do
t_id=`ps -ef | grep "$t/" | grep -v "grep" | awk ‘{print $2}‘`
/usr/local/java/jdk1.7.0_80/bin/jstat -gc $t_id | awk ‘BEGIN{FS=" "}{for(i = 1;i <= NF;i++) {array[i,NR]=$i}}END {for(i = 1;i <= NF;i++) {for(j = 1;j <= NR;j++) {printf "%s ",array[i,j]}printf "\n"}}‘ > /data/zabbix/txt/"$t".gc
done
- 最后重启agentd,并将服务器关联模板即可
时间: 2024-10-20 03:44:01