当前位置:   article > 正文

zabbix自动发现与监控内存和CPU使用率最高的进程_zabbix如何用代码根据ip查询内存和负载

zabbix如何用代码根据ip查询内存和负载

监控需求

  某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈。

监控方式

  利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控。(本文监控的进程为Linux服务器中资源使用率最高的10个进程。)

 

缺点

不适用于监控固定的进程

 

首先使用top命令查看进程状态,再取出进程的%CPU(该值表示单个CPU的进程从上次更新到现在的CPU时间占用百分比) 和%MEM值。

  1. hmracdb2:~ # top
  2. top - 13:57:01 up 32 days, 5:21, 2 users, load average: 0.14, 0.26, 0.34
  3. Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
  4. Cpu(s): 3.7%us, 2.7%sy, 0.0%ni, 87.2%id, 6.3%wa, 0.0%hi, 0.1%si, 0.0%st
  5. Mem: 3926096k total, 3651612k used, 274484k free, 788120k buffers
  6. Swap: 4193276k total, 1369968k used, 2823308k free, 1443884k cached
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 2365 root 20 0 854m 315m 12m S 3 8.2 1252:49 ohasd.bin
  9. 5307 oracle 20 0 1783m 22m 22m S 3 0.6 1106:03 oracle
  10. 4532 root 20 0 676m 31m 13m S 2 0.8 853:35.32 crsd.bin
  11. 4272 grid RT 0 437m 282m 52m S 2 7.4 1006:47 ocssd.bin
  12. 5279 oracle 20 0 1771m 60m 48m S 2 1.6 477:11.19 oracle
  13. 5122 oracle 20 0 654m 15m 12m S 1 0.4 537:40.85 oraagent.bin

 

 

由于top是交互的命令,我们把top命令的结果输出到一个文件上

hmracdb2:~ # top -b -n 1 > /tmp/.top.txt

 

第一个脚本,获取监控进程内存资源占有率前10的进程,输出格式为json格式,用于zabbix自动发现进程

  1. # cat discovery_process.sh
  2. #!/bin/bash
  3. #system process discovery script
  4. top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt
  5. proc_array=(`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`)
  6. length=${#proc_array[@]}
  7. printf "{\n"
  8. printf '\t'"\"data\":["
  9. for ((i=0;i<$length;i++))
  10. do
  11. printf "\n\t\t{"
  12. printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"
  13. if [ $i -lt $[$length-1] ];then
  14. printf ","
  15. fi
  16. done
  17. printf "\n\t]\n"
  18. printf "}\n"

或者

  1. # cat discovery_process2.sh
  2. #!/bin/bash
  3. #system process discovery script
  4. top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt
  5. proc_array=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`
  6. length=`echo "${proc_array}" | wc -l`
  7. count=0
  8. echo '{'
  9. echo -e '\t"data":['
  10. echo "$proc_array" | while read line
  11. do
  12. echo -en '\t\t{"{#PROCESS_NAME}":"'$line'"}'
  13. count=$(( $count + 1 ))
  14. if [ $count -lt $length ];then
  15. echo ','
  16. fi
  17. done
  18. echo -e '\n\t]'
  19. echo '}'

 

输出的效果如下

  1. [root@Zabbix_19F ~]# ./discovery_process.sh
  2. {
  3. "data":[
  4. {"{#PROCESS_NAME}":"mysqld"},
  5. {"{#PROCESS_NAME}":"php-fpm"},
  6. {"{#PROCESS_NAME}":"zabbix_server"},
  7. {"{#PROCESS_NAME}":"nginx"},
  8. {"{#PROCESS_NAME}":"sshd"},
  9. {"{#PROCESS_NAME}":"bash"},
  10. {"{#PROCESS_NAME}":"zabbix_agentd"},
  11. {"{#PROCESS_NAME}":"qmgr"},
  12. {"{#PROCESS_NAME}":"pickup"},
  13. {"{#PROCESS_NAME}":"master"}
  14. ]
  15. }

 

第二个脚本,用于zabbix监控的具体监控项目(item)的key,通过脚本获取第一个脚本自动发现的进程的CPU和内存的具体使用情况与使用率。

  1. #!/bin/bash
  2. #system process CPU&MEM use information
  3. #mail: mail@huangming.org
  4. mode=$1
  5. name=$2
  6. process=$3
  7. mem_total=$(cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}')
  8. cpu_total=$(( $(cat /proc/cpuinfo | grep "processor" | wc -l) * 100 ))
  9. function mempre {
  10. mem_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
  11. echo "$mem_pre"
  12. }
  13. function memuse {
  14. mem_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k]/100*'''${mem_total}''',k}' | grep "\b${process}\b" | cut -d" " -f1`
  15. echo "$mem_use" | awk '{printf "%.f",$1*1024*1024}'
  16. }
  17. function cpuuse {
  18. cpu_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
  19. echo "$cpu_use"
  20. }
  21. function cpupre {
  22. cpu_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k]/('''${cpu_total}'''),k}' | grep "\b${process}\b" | cut -d" " -f1`
  23. echo "$cpu_pre"
  24. }
  25. case $name in
  26. mem)
  27. if [ "$mode" = "pre" ];then
  28. mempre
  29. elif [ "$mode" = "avg" ];then
  30. memuse
  31. fi
  32. ;;
  33. cpu)
  34. if [ "$mode" = "pre" ];then
  35. cpupre
  36. elif [ "$mode" = "avg" ];then
  37. cpuuse
  38. fi
  39. ;;
  40. *)
  41. echo -e "Usage: $0 [mode : pre|avg] [mem|cpu] [process]"
  42. esac

 

我们先来查看一下当前系统的内存和CPU大小情况:

  1. -- 内存
  2. [root@Zabbix_19F ~]# cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}'
  3. 3832
  4. -- CPU
  5. [root@Zabbix_19F ~]# cat /proc/cpuinfo | grep "processor" | wc -l
  6. 8

 

执行脚本运行效果如下(获取监控项key值)

  1. [root@Zabbix_19F ~]# ./process_check.sh avg mem mysqld #输出mysqld进程使用的内存(计算公式:3832*18.5/100
  2. 708.92
  3. [root@Zabbix_19F ~]# ./process_check.sh pre mem mysqld #输出mysqld进程内存的使用率
  4. 18.5
  5. [root@Zabbix_19F ~]# ./process_check.sh avg cpu mysqld #单个CPU的mysqld进程使用率
  6. 3.9
  7. [root@Zabbix_19F ~]# ./process_check.sh pre cpu mysqld #所有CPU的mysqld进程的使用率
  8. 0.004875

 

配置zabbix_agentd,在agentd客户端的etc/zabbix_agentd.conf中增加userparameter配置,增加进程自动发现的key,和进程资源检测的key。

  1. hmracdb2:/opt/zabbix # vim etc/zabbix_agentd.conf.d/userparameter_script.conf
  2. UserParameter=discovery.process,/opt/zabbix/scripts/discovery_process.sh
  3. UserParameter=process.check[*],/opt/zabbix/scripts/process_check.sh $1 $2 $3

 

配置完之后重启agentd服务

  1. hmracdb2:/opt/zabbix # service zabbix_agentd restart
  2. Shutting down zabbix_agentd done
  3. Starting zabbix_agentd done

在zabbix服务器端手动获取监控项key值数据

  1. [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'discovery.process' -s 10.xxx.xxx.xxx
  2. {
  3. "data":[
  4. {"{#PROCESS_NAME}":"ohasd.bin"},
  5. {"{#PROCESS_NAME}":"ocssd.bin"},
  6. {"{#PROCESS_NAME}":"oracle"},
  7. {"{#PROCESS_NAME}":"oraagent.bin"},
  8. {"{#PROCESS_NAME}":"crsd.bin"},
  9. {"{#PROCESS_NAME}":"orarootagent.bi"},
  10. {"{#PROCESS_NAME}":"watchdog/3"},
  11. {"{#PROCESS_NAME}":"watchdog/2"},
  12. {"{#PROCESS_NAME}":"watchdog/1"},
  13. {"{#PROCESS_NAME}":"watchdog/0"}
  14. ]
  15. }
  16. [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,mem,oracle]' -s 10.xxx.xxx.xxx
  17. 2.9
  18. [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,mem,oracle]' -s 10..xxx.xxx.xxx
  19. 111.186
  20. [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,cpu,oracle]' -s 10..xxx.xxx.xxx
  21. 4
  22. [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,cpu,oracle]' -s 10..xxx.xxx.xxx
  23. 0.01

 

配置完agentd后,在zabbix服务器配置Web端的模版与监控项目item

Configuration --> Templates --> Create template -->

创建完模版之后,添加自动发现规则

Discovery rules -->Create discovesy rule

 

 

Item prototypes --> Create item prototype

 

也可以继续添加监控的主机和所需监控项,添加完后我们可以查看下监控的历史数据

 

添加一个进程的CPU使用率的监控项

 

查看历史数据

 

当然还可以获取进程内存使用的具体大小情况

 

   至此,zabbix自动发现进程内存和CPU使用情况并实时监控配置就完成了

转载自HMLinux >>> 原帖http://blog.51cto.com/7424593/1908930

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/161280
推荐阅读
相关标签
  

闽ICP备14008679号