暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Shell 脚本案例【8】CPU 邮件告警

皮皮克克 2024-10-07
227

关注+星标,干货第一时间送达


稍不留神,

国庆即将结束了

小编都还没休息够...

回头再看,中秋节都已经过去半个月了。

其实,每当假期前,都是运维小伙伴忙的时候,

因为,他们非常担心,假期间系统发生故障!

那时候大家都在休假,摇人很难。。。

那么,监控告警就显得十分重要了。

一旦出现问题,直接呼到对应系统负责人头上,

岂不美哉!

今天看个简单的案例,

如何监控系统CPU状态,

并且将可能出现的告警信息,

通过邮件发送至指定人手中。


一、解决方案

演示工具:Centos7.9 + MobaXterm

Linux系统中,有多种监控分析CPU状况的工具,

如 top、mpstat、vmstat 等。

任君挑选。

本次咱们选择使用 vmstat 来监控CPU。

如下图所示,

其中的参数分别是:

  • us:用户空间占用CPU的百分比。us值越高,说明用户进程消耗CPU时间比多,如果长期超过50%,则需要考虑优化程序算法或加速。

  • sy:内核空间占用CPU的百分比。sy值越高,说明系统内核消耗CPU资源多,需要检查原因。

  • id:CPU空闲的百分比。

  • wa:CPU等待IO的百分比。wa值越高,说明CPU等待IO时间较多,可能是大量的磁盘随机访问,或者磁盘出现瓶颈。

  • st:来自虚拟机偷取的CPU所占的百分比。


这次,咱们只关注 us、sy 两个数值。

看看代码:

#!/bin/bash

#1, 日期
DATE=$(date +%F" "%H:%M)
#2,ip
IP=ifconfig ens33 | awk 'NR==2 {print $2}'
#3,邮箱
MAIL=自己的邮箱@qq.com

#4, 判断当前环境是否安装了vmstat
if [ ! which vmstat &>/dev/null ];then

    echo "vmstat not found..."
    exit 1

fi

#5,获取监控数值
US=$(vmstat | awk 'NR==3 {print $13}')
SY=$(vmstat | awk 'NR==3 {print $14}')
STATE=$(($US+$SY))

#6, 发送邮件
# 这里为了显示告警效果,阈值设置成1
if [ $STATE -ge 1 ];then

    echo "
        Date: $DATE
        HOST: $IP
        Problem:
          CPU alert us:$US sy:$SY
    "
 | mail -s "CPU告警" $MAIL

fi


执行效果:

图片提示的信息不用管,

去看看QQ邮箱:

而系统实际的cpu状态是:

说明我们的这个监控脚本是有效的!


二、脚本解析

上面的脚本,用到了一些指令,

如果,直接看脚本代码,就能够理解了,

那么恭喜你们,后面的可以不用看了

如果,有小伙伴不了解的,可以看下这里。

(1)date +%F

这里是Linux里面的日期转换方法,

具体用法看下图:

再拼接时间:


(2)ifconfig ens33 | awk ...

ifconfig 是打印网卡信息,ens33 是当前小编机器的主网卡名字:

再通过 awk 过滤出里面的ip地址,

由上图可知,是在第二行,第二列,所以awk过滤:

awk 'NR==2 {print $2}'

NR是awk里面的关键词,指明行数,

还有其他的关键字,此处不再赘述。


(3)mail -s '' $MAIL

是直接发送邮件,

关于如何在Linux系统中发送邮件到邮箱,

可以翻看之前的文章:

Linux 脚本案例【1】发送邮件


OK,这就是本期的内容了,下期再见!

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论