> 文档中心 > 【linux shell】服务器系统自动化巡检脚本资源状况统计

【linux shell】服务器系统自动化巡检脚本资源状况统计

        运维服务器系统的时候需要定期检查服务器系统资源状况,如CPU、内存、硬盘这些资源消耗信息统计,在这种情况下也可以用开源的监控系统导出相应的需求信息或者直观的通过监控平台去查看资源状况。

        本文将介绍另一种方式通过Linux shell脚本实现服务器系统资源状况信息统计;因在项目上服务器上不允许安装与项目无关的服务(监控软件),所以只能通过自动化脚本解决。

1.服务器系统资源状况统计巡检脚本:

vim system_check_server_auto.sh #!/bin/bashtime_day=`date  +%Y-%m-%d_%H:%M:%S`time_cront=`date  +%Y%m%d%H%M%S`time_cront_day=`date  +%Y%m%d`time_file=`date +%Y-%m-%d`system_hostname=$(hostname | awk '{print $1}')#获取服务器IPsystem_ip=$(hostname -I| awk '{print $1}')#获取总内存mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')#获取剩余内存mem_free=$(free -m | grep "Mem" | awk '{print $4}')#获取已用内存mem_use=$(free -m | grep Mem| awk -F " " '{print $2-$4-$6}')#系统进程数load_1=`ps -ef |wc -l`#僵尸进程数load_5=`top -b -n 1 |grep Tasks |awk '{print $10}'`#CPU空闲idload_15=`top -b -n 1 |grep Cpu |awk -F',' '{print $4}' |awk -F'id' '{print $1}'`#过滤磁盘使用率大于60%目录,并加入描述#disk_1=$(df -Ph | awk '{if(+$5>15) print "分区:"$6,"总空间:"$2,"使用空间:"$3,"剩余空间:"$4,"磁盘使用率:"$5}')disk_most=$(df -P | awk '{if(+$5>0) print $2,$6,$1}'|grep -v ":/"|sort -nr|awk '{print $2}'|head -1)disk_f=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $6}')disk_total=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $2}')disk_free=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $4}')disk_per=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $5}')disk_ux=$(df -P | awk '{if(+$5>0) print $5,$1}'|grep -v ":/"|sort -nr|awk -F"%" '{print $1}'|head -1)if [[ $disk_ux -gt 60 ]]     then#分区disk_f_60=$(df -P | awk '{if(+$5>0) print $5,$1,$6}'|grep -v ":/"|sort -nr|awk  '{print $3}'|head -1)#磁盘使用率disk_per_60=$(df -P | awk '{if(+$5>0) print $5,$1,$6}'|grep -v ":/"|sort -nr|awk  '{print $1}'|head -1)disk_status=不正常     else#分区 disk_f_60=无 #磁盘使用率 disk_per_60=无disk_status=正常     fi#文件路径CHECK_HOME="$(cd "`dirname "$0"`"; pwd)"path="$CHECK_HOME"/monitor_system_check_"$time_file".txt#内存阈值mem_mo='70' PERCENT=$(printf "%d%%" $(($mem_use*100/$mem_total))) PERCENT_1=$(echo $PERCENT|sed 's/%//g') if [[ $PERCENT_1 -gt $mem_mo ]]     then      mem_status_total="$mem_total"MB      mem_status_use="$mem_use"MB      mem_status_per=$PERCENT      mem_status=不正常    else      mem_status_total="$mem_total"MB      mem_status_use=$"$mem_use"MB      mem_status_per=$PERCENT      mem_status=正常 fiif [[ ! -s $path ]] || [[ `grep 统计时间 $path|wc -l` -eq 0 ]];then echo -e  "统计时间 服务器IP 系统进程数 CPU空闲id 僵尸进程数 总内存大小 已用内存 内存使用率 内存巡检状态 分区 数据盘总空间 数据盘剩余空间 数据盘磁盘使用率 磁盘超60使用分区 磁盘超60使用率 磁盘状况" >> $pathfiecho -e  "$time_day $system_ip $load_1 $load_15 $load_5 $mem_status_total $mem_status_use $mem_status_per $mem_status $disk_f $disk_total $disk_free $disk_per $disk_f_60 $disk_per_60 $disk_status" >> $path

2.给脚本赋执行权限

chmod -x system_check_server_auto.sh

3.执行巡检脚本:

sh system_check_server_auto.sh

4.添加计划任务定时自动执行脚本:

        这里使用的每分钟执。根据自己需求而定,比如每小时,每天,每周等。

crontab -l
* * * * *  /bin/sh /opt/shell/system_check_server_auto.sh > /dev/null 2>&1

5.自动巡检脚本执行结果:

统计时间 服务器IP 系统进程数 CPU空闲id 僵尸进程数 总内存大小 已用内存 内存使用率 内存巡检状态 分区 数据盘总空间 数据盘剩余空间 数据盘磁盘使用率 磁盘超60使用分区 磁盘超60使用率 磁盘状况2022-03-17_16:19:07 17.17.80.103 205  90.0% 0 24031MB 14724MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:19:47 17.17.80.103 205  90.0% 0 24031MB 14724MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:21:06 17.17.80.103 205  90.0% 0 24031MB 14728MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:21:09 17.17.80.103 203  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:21:11 12.17.80.103 203  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:37:10 12.17.80.103 205  90.0% 0 24031MB 14742MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:40:01 12.17.80.103 208  90.0% 0 24031MB 14749MB 61% 正常 / 256G 181G 26% 无 无 正常2022-03-17_16:41:01 12.17.80.103 206  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常

6.通过以上结果汇总到Excel更加直观

通过制表结果可以进行筛选处理