zabbix监控脚本02-进程使用的cpu率计算
Posted shadown404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix监控脚本02-进程使用的cpu率计算相关的知识,希望对你有一定的参考价值。
1 基础说明
(1)配合的监控工具 zabbix,被监控端操作系统版本信息
操作系统:CentOS Linux release 7.4.1708 (Core)
内核版本:3.10.0-693.el7.x86_64
(2)说明:此处的脚本直接使用的是linux下进程文件的数据做计算
(3)文件内容说明:/proc/stat,/proc/pid/stat
(4)脚本计算的是java进程每秒使用的cpu量占总cpu的多少,脚本名称可以命名为 java_cpu.sh
#!/bin/bash R_MON="$1" vmrss_cpu_used() R_PID=$(ps -fe | grep "$R_MON" | grep -v "grep" | grep "jar" | awk -F" " \'print $2\') #总cpu量计算 CPU_ALL1=$(head -1 /proc/stat | awk -F" " \'sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11; print sum\') #单个进程使用的cpu量计算 CPU_ONLY1=$(awk -F" " \'sum=0; sum=$14+$15+$16+$17; print sum\' /proc/$R_PID/stat) sleep 1 CPU_ALL2=$(head -1 /proc/stat | awk -F" " \'sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11; print sum\') CPU_ONLY2=$(awk -F" " \'sum=0; sum=$14+$15+$16+$17; print sum\' /proc/$R_PID/stat) CPU_ONLY_VALUE=$(( $CPU_ONLY2 - $CPU_ONLY1 )) CPU_ALL_VALUE=$(( $CPU_ALL2 - $CPU_ALL1 )) #比率计算 % VALUE=$(awk -v v1=$CPU_ONLY_VALUE -v v2=$CPU_ALL_VALUE -v v3=100 \'BEGINprintf "%.4f\\n",(v1/v2)*v3\') echo $VALUE echo "$(date +%Y-%m-%d-%H-%M-%S) :: $VALUE" >> /usr/local/zabbix/scrip_log/java_cpu_used_$R_MON.txt 2>&1 case $R_MON in 程序名称1) vmrss_cpu_used "$R_MON" ;; 程序名称2) vmrss_cpu_used "$R_MON" ;; *) echo $"USAGE:$0 VmRSS|" esac
2 脚本使用
(1)添加在zabbix里面
echo \'UserParameter=java_cpu_totals[*],/bin/bash /usr/local/zabbix/scrip/java_cpu.sh "$1"\' >> /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_java.conf
关于在zabbix监测脚本中使用ps命令监控进程CPU使用率和内存使用率,获得数据为0的情况描述
前提:想自己编写zabbix监测脚本,然后通过配置模板的方式,实现对资源(cpu和内存)使用率高的进程进行监控。过程描述:
zabbix版本为2.21,被监控主机操作系统为CentOS 6.4。
脚本中主要命令如下:
percent=0;
#通过脚本输入参数
process=$1;
#通过ps aux参数,获取CPU%和MEM%值,使用awk将第四行的MEM%值筛选出来
percent=ps aux | grep $process | grep -v grep | head -1 | awk ‘{print $4}‘
;
echo $percent
问题描述:
发现在cli中运行上述脚本命令可以获取到进程资源使用率对应的数值。
但是脚本中包含相同命令条件下,执行脚本,却经常获得的数值为0.0,而仅仅只更改了脚本输入的$1,也就是输入进程名,脚本执行后,获得的数值往往不为0.0,而为正常数据。
影响:
由于在zabbix的web页面中,配置了关于该项数据的dataview,直接导致了dataview的数据展示不准确。
解决方法(待验证):
1.使用内置的zabbix变量proc.cpu.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>] 和proc.mem.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>]。
2.修改脚本中的命令,改用如下方法:
首先获取进程名对应的pid,再结合top运行如下命令:
top -b -n 1 -p $pid 2>&1 | awk -v pid=$pid ‘{if ($1 == pid)print $9}‘
3.修改脚本中的命令,改用如下方法:
首先获取进程名对应的pid,再从/proc/$pid/目录下读取相关数据,进行计算获得。
后记:没有对以上三种解决方法进行验证,但是个人觉得还是使用zabbix内置变量配置模板为比较好的解决办法,毕竟个人能力有限,还是选择相信专业的zabbix吧。
以上是关于zabbix监控脚本02-进程使用的cpu率计算的主要内容,如果未能解决你的问题,请参考以下文章
关于在zabbix监测脚本中使用ps命令监控进程CPU使用率和内存使用率,获得数据为0的情况描述