压力测试下的服务器动态监控脚本

本文介绍了博主在进行CPU性能测试时遇到的问题,以及为了解决这些问题,如何编写一个shell脚本来实时动态监控服务器的CPU、内存、系统盘和风扇状态。文章详细讲解了脚本的软硬件环境配置、脚本开发过程以及各部分监控的实现方法。
摘要由CSDN通过智能技术生成

实战背景

博主在进行CPU的性能测试时,发现CPU的性能不达标初步怀疑四点。一跟服务器的散热有关因为CPU表面很烫有可能FAN自适应温控有问题。二测试过程中有的时候CPU loading很高有的时候但是会随机在2秒左右降下来怀疑跟OS与CPU的保护机制有关理论上应该会持续一段高loading时间。三是怀疑跟挂载的硬盘容量不够有关(os层面)因为跑相关性能测试会在系统盘下生成大量缓存问题(已知问题)。四跟内存容量不足有关。因此博主为了想抓住四个变量在实时动态下的横向以及纵向关系由此生成编写该脚本的背景。本文将深入浅出整个脚本的制作过程。

一 软硬件环境配置

硬件环境:带有BMC功能可用的服务器

软件环境:ipmitool

1.1 impitool安装

在线安装: 前提是能上网且配置好yum源,因为重点不在这方面所以本文不做详细赘述

redhat/centos系
[root@localhost ~]# yum install ipmi*

debian系
[root@localhost ~]# apt-get install ipmi*

#如果你安装了ipmitool运行时依然报错,那是因为你的系统没有自动加载IPMI服务,使用ipmitool前需要打开IPMI服务
[root@localhost ~]# modprobe ipmi_si
[root@localhost ~]# systemctl restrt ipmi.service

离线方式: 可参看该链接下载

https://sourceforge.net/projects/ipmitool/files/latest/download

#解压安装包
[root@localhost ~]# tar -zxvf ipmitool-1.8.16.tar.gz
# 进入解压后的目录
[root@localhost ~]# cd ipmitool-1.8.16
# 对ipmitool进行编译配置
[root@localhost ~]# ./configure
# 编译ipmitool
[root@localhost ~]# make -j 64
# 编译安装
[root@localhost ~]# make install
# 对IPMI模块进行导入且启动ipmi服务
[root@localhost ~]# modprobe ipmi_si
[root@localhost ~]# systemctl restrt ipmi.service
————————————————

被正确安装后ipmi服务起来后应该是如下图所示
在这里插入图片描述

1.2 脚本监控模块

脚本用于动态监控四个变量,如下图所示
在这里插入图片描述

二 shell 脚本开发及解析

2.1 定义脚本测试实际

定义变量time_run,用于进行测试时间的管控

read -p "Input working time (seconds): " time_run

在这里交替使用制表符跟换行符用于内容的输出

printf "Memory\t\tDisk\t\tCPU\t\tFAN1\t\t\tFAN2\t\t\tFAN3\n"

2.2 定义脚本循环体

这里使用交互式while循环用于脚本运行时间的管控

i=0
while (($i <= $time_run))
do
循环体..
done
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
FAN1=$(ipmitool sdr list | grep -i FaN1 | awk -F "|" '{printf "%s\t", $2}')
FAN2=$(ipmitool sdr list | grep -i FaN2 | awk -F "|" '{printf "%s\t", $2}')
FAN3=$(ipmitool sdr list | grep -i FaN3 | awk -F "|" '{printf "%s\t\t", $2}')
echo "$MEMORY$DISK$CPU$FAN1$FAN2$FAN3"
sleep 1
let "i++"

2.3 解析主题的监控部件编写

内存监控:
awk 后面的 NR2 从第二行提取数据。如果NR1表示是第一行。 $3*100/$2 表示used值/total值再乘以100%
在这里插入图片描述

系统盘监控:
awk后面的awk $NF==“/”‘表示’非贪婪’找到仅仅带有’/'的行,而这个就是根目录,其中$1…$5值如下图所示
CPU监控:
top -bn : 参数n 表示更新的次数,完成后将会退出 top;参数b表示批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内。在这里n1表示记录一次
awk ‘{printf “%.2f%%\t\t\n”, $(NF-2)}’: 这里表示我将倒数第2列的平均每5分钟的系统负载作为CPU的负载png)
小知识点NF NR $NF $NR的区别与联系

NF 每行字段总数(Number of Font)

[~/AWK_learning]$ cat test.txt
111 222
333 444
555 666
[~/AWK_learning]$ awk '{print NF}' test.txt
2
2
2
[~/AWK_learning]$ awk '{print $NF}' test.txt
222
444
666
NR 当前行数(Number of Row)

[~/AWK_learning]$ cat test.txt
111 222
333 444
555 666 777
[~/AWK_learning]$ awk '{print NR}' test.txt
1
2
3
[~/AWK_learning]$ awk '{print $NR}' test.txt
##表示找当前行代表第当前行的元素的位置比如为什么是777那是因为系统去做第三行的第三个元素
111
444
777

风扇监控:
这里博主仅抓取前3个风扇的转速作为散热策略的层面反馈
awk -F “|” ‘{printf “%s\t”, $2}’: 这里表示以’|'为分隔符抓取第二个值也就是转速
在这里插入图片描述
最终的输出形式如下所示:
在这里插入图片描述

总结

这里博主仅仅做一个抛砖引玉的作用,大家可以根据自己的实际需求进行定制化修改。其详细脚本如以下链接可以随意进行修改

https://mp.csdn.net/mp_download/manage/download/UpDetailed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

berlus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值