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的情况描述

Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

zabbix自动发现与监控内存和CPU使用率最高的进程

zabbix监控CPU使用率,空闲率参数求助

zabbix监控项

Zabbix监控进程的内存占用和CPU使用率