目录
性能指标监控与通知
linux系统性能指标监控与通知shell开发自动化脚本
本篇文章主要讲解linux操作系统的性能指标监控与通知,并利用shell开发自动化脚本
系统的性能指标监控室比较常见的针对系统的管理场景,比如系统有挖矿程序,或者系统本身存在高CPU进程(正常应用),除了CPU以外,也可以监控内存,硬盘,网络流量等使用情况。通过监控和发送通知,可以及时对系统的运行情况进行把控,进而实现正确的处置。如果发现某些异常CPU消耗,甚至可以直接结束掉进程。
(1)通过相应的命令能够输出需要的指标
(2)通过awk对输出结果进行过滤,找到对应的值
(3)根据对应的值进行判断,进而决定后续处理方式
一、使用yes程序监控CPU
1.通过总cpu来测试
top -n 1 #查看cpu使用情况 top -n 1 | grep ^%Cpu #找到以%Cpu开头的行 top -n 1 | grep ^%Cpu | awk '{print int($8)}' #在以%Cpu开头的行中筛选出cpu的使用情况 cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') #将筛选出的结果赋值给cpu这个变量,注意,这里需要将$8这个变量的值转为整数,通过 int() 这是一种方法,还有一种方法是 再次使用 awk ,演示如下: `cpu=$(top -n 1 | grep ^%Cpu | awk '{print int$8}' | awk -F . '{print $1}')` [ $cpu -lt 85 ] echo $? #两条命令判断结果是不是小于85
2.通过cpu的进程消耗测试
top -n 1 | sort -k 9 -r #按 `top -n 1` 中第9栏的结果降序排列,最终得到的最小号的进程就在最上面 或 ps aux | sort -k 3 -r #和上面的意思差不多,也是降序排列,第一行的就是cpu进程消耗最高的 ps aux | sort -k 3 -r | head -n 2 | tail -n 1 #这个结果就是将上面的cpu进程消耗最高的过滤出来 ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}' #打印出cpu的最消耗的进程率 ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $2}' #打印出最消耗cpu的进程id pcpu=`ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}'` echo $pcpu / 4 | bc #两条命令计算出真正的cpu使用率,因为总的cpu使用率和电脑核数有关,这里的这个4就是核数
如图,这里所展示的 98.2 是cpu的使用率,但也只是一个核的使用率,要想计算总的cpu的使用率,还需要将 98.2 除以 4。不然为什么最上面图中总的cpu还剩下 86.5 但是到了这里却变成了 使用了 98.2 ,就是因为还需要除以核数,而我的核数是 8 ,也就是说 单核cpu 和 总cpu 我们看结果
结果是使用了 24% 的cpu 和 86%一加刚好就是 100%
3.如何收集内存使用信息
方法一:
获取空闲内存大小
在这里我就写的简单一点了 top -n 1 | grep "^KiB Mem" | awk '{print $6}'
方法二:
free指令中直接就有空闲内存空间大小,像什么总共的,使用了的,空闲的,共享的,缓存的,可使用的都有
4.如何收集硬盘信息
df -h | grep ^/dev/mapper
5.如何收集网卡流量情况
首先我们需要知道如何查看网卡上的流量情况
ip -s link #查看网卡的收发数据报大小, RX:收,TX:发 ifconfig -s #同上
其他的情况和上面的的使用方法就是一样的
我们现在来综合一下:
cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') if [ $cpu -lt 85 ]; then pcpu=$(ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}') ppcpu=$(echo $pcpu / 4 | bc) pid=$(ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $2}') echo "CPU is lower , $pid consume $ppcpu%" else echo "CPU is OK" fi 或 cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') if [ $cpu -lt 85 ]; then pcpu=`ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}'` ppcpu=$(echo $pcpu / 4 | bc) pid=`ps aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $2}'` echo "CPU is lower , $pid consume $ppcpu%" else echo "CPU is OK" fi 二者区别在于给 ppcpu 和 pid 赋值的时候 上面使用的是 $() 而下面使用的是 `` 这个符号,表示计算表达式
二、发送邮件通知
1.安装 mailx 邮件客户端
yum install -y mailx
早期的邮件客户端客户通常使用sendmail来发送邮件,而新版本上使用的是 postfix 进行有限的发送和接收。在Linux中,只要配置好有限客户端及SMTP账号后,不仅可以向当前系统的任意账号发送内部邮件,即我们看到的 /var/spool/mail/user 的文本型邮件,也可以向外网正常的邮箱地址发送邮件,如向 123456789@qq.com 发送邮件。
确定 postfix 的服务是开启的
systemctl status postfix #查看postfix的服务状态 systemctl list-unit-files | grep postfix #统计出postfix服务是否自启动,通过改变postfix的这个服务名称可以查看其他服务是否自启动,如果不是自启动我么可以使用 `systemctl enable postfix` 指令来设置自启动 systemctl start postfix #开启postfix服务
2.向本地系统用户发送邮件
systemctl start postfix #先确保postfix邮件发送服务是启动的 echo "This is eamil body" | mail -s "test mail" root # -s 表示 发邮件 该邮件的标题是 " " 后面跟用户。直接使用管道发送简单正文 mail -s "test email" root < /etc/passwd #使用 < 输入重定向将 /etc/passwd 文件作为邮件正文内容 cp /dev/null /var/spool/mail/root #可以用来删除系统中的邮件 使用 mail 命令可以直接查看邮件,输入 序号 查看有邮件正文,输入 q 退出,输入 h 回到邮件列表
邮件系统中 N 表示新邮件,内容就在最下面
3.向外部邮件地址发邮件
(1)确定邮件账号的SMTP信息,可以使用蜗牛学院的测试邮箱账号,或使用QQ邮箱账号
(2)编辑 .etc.mail.rc , 将下述SMTP信息输入
set from=2811403517@qq.com #代表发件人的邮箱地址,即我的qq账户名 set smtp=smtp.qq.com #邮件服务器 set smtp-auth-user=2811403517@qq.com # 邮件服务器的邮箱账号,也就是我的qq账户名 set smtp-auth-password=Student123 #发送邮件的密码 这是在qq邮箱中生成的授权码 set smtp-auth=login #代表发送邮件使用的密码登录的方式
(3)使用以下命令发送邮件
mail -s "test email" 15903523@qq.com < /etc/passwd mail -s "test eamil" -a /opt/picture.png 15903523@qq.com < /etc/passwd #带附件
那么如何在命令行中发送图片呢,我们可以使用发送附件是图片的方式
第一步:下载图片在电脑中
复制图片地址然后使用wget命令下载: wget http://www.woniuxy.com/page/img/banner/shenzhen-home.png
下载好之后:
现在使用mail命令发送图片附件:
mail -s "Beautiful Picture" -a /opt/shenzhen-home.png 2811403517@qq.com < /etc/passwd #-a 表示发送附件,这里的附件就是/opt/shenzhen-home.png,后面跟上要发送目标的邮件账户名然后使用输入重定向的方式让正文为/etc/passwd,这个可以根据自己的情况进行更改
三、使用 sysbench
https://github.com/akopytov/sysbench
安装:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash #重新设定yum的库来进行安装 sudo yum -y install sysbench
执行:
sysbench cpu run --threads=50 --time=100 sysbench memory run --threads=50 #cpu 表示测试的目标 #--threads=50 表示测试使用的线程数 #--time=100 表示测试持续的时间 使用该方法,我们可以将这个放入crontab中,每隔一段时间就对cpu进行一次测试,实际情况中我们并不需要模拟消耗cpu的情况