背景
相信每一位运维人员手里都掌握着不少的服务器,少则几十台,多则成百上千,线上服务器跑的服务五花八门,每台服务器资源消耗都不同,如果能够对资源消耗较高的进程实现自动发现监控将对排查问题有很大的帮助。
实现
导出数据
在zabbix客户端下新建一个专门存放脚本的文件夹,新建一个脚本文件top.sh。
mkdir -p /opt/zabbix_agent/scripts
vi top.sh
使用 top 命令获取服务器当前运行状态,将结果重定向到一个文本文件中。
- cat top.sh
#!/bin/sh
top -n -b 1 > /tmp/top.txt
注: 该命令的意思是执行一次top命令并将结果重定向到top.txt文件中去
创建定时任务
将该命令添加到zabbix用户的计划任务中去,每分钟执行一次并清空,使文本中保证一份数据。
crontab -e
*/1 * * * * /opt/zabbix_agent/scripts/top.sh > /dev/null
放进去之后在tmp目录下会生成一个top.txt文件
- head -10 /tmp/top.txt
获取进程名
获取到数据后,对数据进行处理,获取占用资源高的进程名
- cat check_process.sh
#!/bin/bash
TABLESPACE=`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$6}END{for(k in a)print a[k]/1024,k}'|sort -gr|head -10|cut -d" " -f2`
COUNT=`echo "$TABLESPACE" |wc -l`
INDEX=0
echo '{"data":['
echo "$TABLESPACE" | while read LINE; do
echo -n '{"{#PROCESSNAME}":"'$LINE'"}'
INDEX=`expr