[标签]: 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。