【分享一个最基础的运维监控脚本-CPU-内存-磁盘-IO-网络】

 

 

 

 

 

[标签]: shell数值计算    shell浮点数计算    shell百分比计算    shell数值比大小    top只打印一页    ping一次

 

 

问题详情的描述或方案目标的预期:

本来不想分享这种过于基础的帖子,不过还是发现了一些值得分享的地方,加上基础监控是运维最基础的东西,来一贴吧。

 

 

 

【解决方案】

整体思路:简单的东西就要做到细致,完整,漂亮。

  

  

  

[脚本内容分享]

#!/bin/bash

#用于获取服务器基础监控信息,包括CPU-内存-磁盘-IO-网络等信息

#wm_ddup@20230921

  

# 全局变量

TIME=$(date +"%Y%m%d_%H%M%S")

echo;echo "当前时间为 $TIME"

  

  

# 01.获取CPU资源及状态 -- top -bn1取一页

get_cpu()

{

CPU_ID=`top -bn1 |egrep -i "Cpu.*us.*sy.*ni.*id"|egrep -o "[0-9. ]*id" |awk '{print$1}'|sed 's/id//g'`

CPU_USAGE=`echo "100 - $CPU_ID"|bc `

echo "当前服务器CPU资源使用率:${CPU_USAGE}% "

}

get_cpu

  

  

# 02.获取内存使用情况 -- echo "2.2 - 1.1|bc" , awk计算百分比

get_mem()

{

MEM_ALL=`free |egrep -i "mem:" |awk '{print$2}'`

MEN_AVA=`free |egrep -i "mem:" |awk '{print$NF}'`

MEM_USAGE=`echo "$MEM_ALL - $MEN_AVA"|bc`

PERCENT_USAGE=`awk 'BEGIN{printf "%.2f%%\n",('"$MEM_USAGE"'/'"$MEM_ALL"')*100}'`

echo "内存使用率为:$PERCENT_USAGE"

}

get_mem

  

  

# 03.获取磁盘使用情况 -- 使用rev更准确可靠的截取内容

get_disk()

{

PAR_BOOT=`df -h |egrep "/$" |rev|awk '{print$2}'|rev`

echo "服务器根分区/使用率:$PAR_BOOT"

}

get_disk

  

  

# 04.获取服务器读写IO繁忙度 -- %util:值越高,表I/O请求太多,IO负荷越高(统计时间内处理IO时间/总共统计时间,多磁盘时该值可以超过100%)

get_io()

{

VALUE_UTIL=`iostat -dx|sed '/^[ \t]*$/d'|tail -n1|awk '{print$NF}'`

echo "磁盘繁忙度:${VALUE_UTIL}%"

}

get_io

  

  

# 05.网络联通性测试

get_net()

{

TIME_EXE=`timeout 1 ping 223.5.5.5 -c1 |grep icmp |egrep -o "time=.*"`

if [ -z "$TIME_EXE" ];then

echo "网络联通测试失败"

else

echo "网络ping包耗时: $TIME_EXE"

fi

}

get_net

echo

  

  

  

总结:shell有三个命令bc、expr、let可用于数值计算;百分比计算可用awk命令;top命令截取数据只需要打印一页的参数top -bn1;ping一次 -c1。

 

 

 

百度一下    谷歌翻译

 

 

 

 

 

 

【书君方案】 简洁、完整、漂亮、记忆深刻

 

 

 

 

 

 

©2022 BLUBN.HonL   京ICP备15053931号   书君   bookfooked.com V1.1