当前位置:   article > 正文

Zabbix监控进程CPU及内存_zabbix 性能计数器获取进程cpu

zabbix 性能计数器获取进程cpu

本文以写脚本至zabbix中的配置思路为主 其中一些必要的脚本及命令经供参考  最后会附上一个自动发现服务器中最占用资源的监控脚本

 

简单的zabbix搭建(docker容器内):

# docker run --name zabbix-appliance -t \
      -p 10051:10051 \
      -p 80:80 \
      -d zabbix/zabbix-appliance:latest

比较简单的4.0版本  5.0版本需要增加一些步骤  官网文档很详细 而且支持简中:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers 

 

以监控nginx进程为例:

1 脚本 截取出现在服务器中nginx的CPU利用率

#!/bin/bash
cpu=`ps aux|grep "nginx"|grep -v "grep"|awk '{sum+=$3}; END{print sum}'`
echo  $cpu

 给1脚本zabbix的权限及可执行权限。

2 进入zabbix配置文件中:/etc/zabbix/zabbix_agentd.conf(此为ubuntu路径 Centos及其他需自行查询)

增加(可在空白处直接增加或者在# UnsafeUserParameters=0下一行增加):

UserParameter=XXX,/opt/zabbix/scripts/脚本名.sh(此处XXX赋值自己起名即可,此赋值以后需要)

 

顺便修改agent的几个参数:
Server=xx.xx.xx.xx(服务端的IP)
Hostname=xx.xx.xx.xx(agent的IP)

重启zabbix_agent

3 去zabbix服务端测试脚本是否能被读取:

 zabbix_get -p10050 -k 'XXX' -s IP

-p的10050是默认端口 如果更改则输入更改后的端口号

-k 'XXX'   这里XXX是刚才在agent端的zabbix配置文件中赋的值 

IP 填写agent端的IP  “这里注意 需要查看agent配置文件中写服务端IP的格式 如果写的公网这里就要用公网 写的内网这里就是用内网

4 上一步在zabbix server端能成功返回值后就可以进入zabbix中设置:

(1)配置模板

在配置--模板--创建模板

 创建完模板后 点击刚创建的模板 然后开始配置监控项

(2)配置监控项:

配置--模板--leo--监控项--创建监控项

这一步中 键值就需要写你在agent中设置的XXX 名称和间隔和新的应用集自己起名即可 

然后去设置模板连接到主机

配置--主机--点击主机名--模板--搜索框--选择自己的模板-确定-更新

 

设置完后就可以查看数据  需要等几分钟  

先去最新数据看是否有数据产生

选择主机 选择应用集 等一分钟左右刷新一下 就可以看到最新数据。然后其他就可以在仪表盘创建图像了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最后附上一个转载的自动发现占资源的脚本及监控:

脚本1:

  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 '}'

执行一下  会输出最占用资源的进程名

 

第二脚本 用于zabbix监控具体项目 

  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

 执行一下第二个脚本试试:

  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

没问题后配置agent 还是在agent的conf中配置UserParameter

UserParameter=discovery.process,/opt/zabbix/scripts/discovery_process.sh
UserParameter=process.check[*],/opt/zabbix/scripts/process_check.sh $1 $2 $3

配置完后重启 

 

 

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

闽ICP备14008679号