只需10行脚本就可监控你的操作系统?

前言
大家好,这里是浩道linux,主要给大家分享linux、python、网络通信相关的it知识平台。
今天浩道跟大家分享硬核shell实战干货,利用10行shell脚本监控你的linux操作系统!
监控我们的环境对于服务器运维来说至关重要,尤其是在部署新的应用程序时。如今,公司每天都使用开源解决方案来监控系统资源。但是,当出于测试的目的来监控一定时间时,bash 脚本会派上用场。
在本教程中,我们将编写一个 bash shell 脚本,它将输出一个三列表,来显示我们机器上的内存、磁盘和 cpu 的百分比。
让我们开始吧!
该脚本基本上由三个主要部分组成:
1. 监控内存:
free -m | awk 'nr==2{printf %.2f%% , $3*100/$2 }'9.24%  
free -m 是用于显示已使用和空闲内存的命令,输出如下:
[root@localhost tmp]# free -m             total       used       free     shared    buffers     cachedmem:           996         92        904          0         11         31-/+ buffers/cache:         49        947swap:         1583          0       1583  
但是,我们需要从上面的输出中获取第二行的总内存和已用内存。我们可以使用 awk 来从给定输出中提取数据。
awk 是一种用于文本处理和数据提取的编程语言。它是大多数 unix 系统的标准功能。awk ‘nr==2’ 从第二行提取数据。$3 和 $2 分别充当已用量和总量。
监控磁盘
df -h | awk '$nf==/{printf %s , $5}'7%  
第二个命令输出使用的磁盘百分比。df -h 输出与磁盘使用情况和分区相关的数据。
[root@localhost tmp]# df -hfilesystem                    size  used avail use% mounted on/dev/mapper/volgroup-lv_root   14g  814m   12g   7% /tmpfs                         499m     0  499m   0% /dev/shm/dev/sda1                     485m   32m  428m   7% /boot  
awk $nf 输出字段数。但是,df -h | awk '$nf==/ 将转到包含字符 / 的那一行。$5 将从该行中选择第 5 个字段。这可确保该命令能够提取正确的磁盘使用百分比(在我们的示例中为 %7)。
监控 cpu
top -bn1 | grep load | awk '{printf %.2f%% , $(nf-2)}'  
top -bn1 命令将只执行一次 top 命令(n1 = 一次迭代),当我们想在 bash 脚本中使用 top 或将其数据输出到文件时使用可以使用 -b 选项。
grep load 将输出包含字符串 load 的行。$(nf-2) 将计算该行上的字段数并减 2。
[root@localhost tmp]# top -bn1 | grep loadtop - 1925 up  1:47,  1 user,  load average: 0.00, 0.00, 0.00  
在浏览完 bash 脚本的基本部分之后,我们需要将这些命令保存到变量 memory、disk 和 cpu 中:
memory=$(free -m | awk 'nr==2{printf %.2f%% , $3*100/$2 }')disk=$(df -h | awk '$nf==/{printf %s , $5}')cpu=$(top -bn1 | grep load | awk '{printf %.2f%% , $(nf-2)}')  
我们需要脚本运行一段时间(比如,一个小时)。为了做到这一点,我们需要使用 while do 循环,每次循环后延迟 x 秒(取决于您的测试):
end=$((seconds+3600))while [ $seconds -lt $end ]; doecho $memory$disk$cpusleep 5done  
为了在一定时间内运行一次循环,我们可以定义一个变量 $end,它从 bash 脚本开始的时间开始计算当前的秒数,因此是 seconds,并在当前秒数上加上一个数字。所以一个小时就是 3600 秒。
上述代码片段的第二行指出,只要$seconds(当前秒数)小于 $seconds+3600,while 循环就会继续执行。因此,我们定义了循环的开始时间和结束时间,以及将每个循环暂停 5 秒的睡眠时间。循环内部是每 5 秒将那三个变量分配一次新值,以及将输出三个资源使用情况的 echo $memory$disk$cpu。
完整代码如下:
#! /bin/bashprintf memory disk cpuend=$((seconds+3600))while [ $seconds -lt $end ]; domemory=$(free -m | awk 'nr==2{printf %.2f%% , $3*100/$2 }')disk=$(df -h | awk '$nf==/{printf %s , $5}')cpu=$(top -bn1 | grep load | awk '{printf %.2f%% , $(nf-2)}')echo $memory$disk$cpusleep 5done  
上面的代码将输出以下内容:
[root@localhost tmp]# ./stats.shmemory disk cpu9.34% 7% 0.00%9.34% 7% 0.00%9.34% 7% 0.00%9.34% 7% 0.00%^c[root@localhost tmp]#  
您始终可以将数据输出到日志文件:
[root@localhost tmp]# ./stats.sh >> log.txt  
stress 测试
由于机器上几乎没有任何负载,我们可以使用 stress 来使 cpu 和内存负载一段时间。
使用以下命令安装(在 centos 上):
[root@localhost tmp]# yum install stressfailed to set locale, defaulting to cloaded plugins: fastestmirrordetermining fastest mirrorsepel/metalink                                                               | 4.2 kb     00:00      * base: ba.mirror.garr.it * epel: ftp.riken.jp * extras: centos.fastbull.org * updates: centos.fastbull.orgbase                                                                        | 3.7 kb     00:00     epel                                                                        | 4.3 kb     00:00     epel/primary_db                                                             | 5.9 mb     00:37     extras                                                                      | 3.4 kb     00:00     extras/primary_db                                                           |  37 kb     00:00     updates                                                                     | 3.4 kb     00:00     updates/primary_db                                                          | 5.2 mb     00:30     setting up install processresolving dependencies--> running transaction check---> package stress.x86_64 0:1.0.4-4.el6 will be installed--> finished dependency resolutiondependencies resolved=================================================================================================== package               arch                  version                     repository           size===================================================================================================installing: stress                x86_64                1.0.4-4.el6                 epel                 36 ktransaction summary===================================================================================================install       1 package(s)total download size: 36 kinstalled size: 89 kis this ok [y/n]: ydownloading packages:stress-1.0.4-4.el6.x86_64.rpm                                               |  36 kb     00:01     running rpm_check_debugrunning transaction testtransaction test succeededrunning transaction  installing : stress-1.0.4-4.el6.x86_64                                                       1/1   verifying  : stress-1.0.4-4.el6.x86_64                                                       1/1 installed:  stress.x86_64 0:1.0.4-4.el6                                                                      complete!  
现在我们可以使用命令 stress 来负载我们的机器。例如,通过指定两个 cpu 密集型进程、一个 i/o 密集型进程和一个内存分配器进程,对系统施加 4 个平均负载,如下所示。以下压力测试将运行 1 小时。
[root@localhost tmp]# stress -c 2 -i 1 -m 1 --vm-bytes 128m -t 3600sstress: info: [1574] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hddstress: info: [1574] successful run completed in 3600s[root@localhost tmp]# ./stats.sh memory  disk  cpu20.48%  7%  1.21%  20.48%  7%  1.02%  20.48%  7%  0.94%  21.89%  7%  1.18%  20.68%  7%  1.41%  22.09%  7%  1.62%  24.10%  7%  1.81%  24.90%  7%  1.98%  32.93%  7%  2.14%  30.32%  7%  2.29%  20.58%  7%  2.63%  27.91%  7%  2.82%  20.48%  7%  2.59%  20.48%  7%  2.38%  20.48%  7%  2.19%  20.48%  7%  2.02%  20.48%  7%  1.86%  


汽车电子神经系统的架构设计和小线径化
史上最低价!能取代主机的超小型电脑芯片
编码器是什么?编码器有哪些分类及应用
助力汽车智能驾驶再升级!IR-Pilot红外热成像全场景解决方案
网络部署改善网络覆盖的方法都有哪些
只需10行脚本就可监控你的操作系统?
5G手机渗透率在持续提升,已占据国内市场的半壁江山
PS5将在2022年迎来真正的划时代游戏
在生物质锅炉中烟气分析仪应用到的气体传感器
TP4222X移动电源芯片概述及特点
穿线器怎么用_穿线器的使用方法图解
硅料的清洗方法讲解(图文)
Passbook应用程序正式登陆App Store
兆芯首款自主SoC通用处理器产品实现大规模落地部署和实际应用
印度又出神操作:用牛粪造芯片
瑞信:2016中国智能手机预计销售5亿部 占全球份额31%
74ls160构成24进制计数器
使用光隔离的调制器在电机控制中进行安全、准确的隔离电流传感
基于SOGI的虚拟阻抗方法
智能扫地机器人哪个牌子好?选对能给生活减负!