inux系统CPU内存磁盘监控-邮件提醒脚本2

这段代码是一个 Bash 脚本,用于监控 Linux 服务器的 CPU 和内存使用情况,并在达到特定阈值时发送邮件通知。下面是对代码的详细分析:

1. 环境设置

export PATH
export LANG=zh_CN.UTF-8
  • export PATH:确保脚本可以使用系统的命令。
  • export LANG=zh_CN.UTF-8:设置系统语言为简体中文。

2. 依赖检查和安装

ping -c 2 www.baidu.com || exit 5
[ `echo "1 > 2"|bc` ] || yum install bc -y
sleep 3
[ `rpm -qa|grep dos2unix` ] || yum install dos2unix -y
sleep 3
  • 先用 ping 命令检查网络连接。如果不能连接到 www.baidu.com,脚本将退出(返回状态码5)。
  • 检查 bc 工具是否安装。如果未安装,将通过 yum 安装它。
  • 检查 dos2unix 是否安装,并安装它。

3. 监控变量定义

readonly times=$(date +%Y"/"%m"/"%d" "%k":"%M)
readonly machine=$(ip add | grep inet|grep -v 'inet6\|127.0.0.1'|awk '{ print $2 }' | sed 's/\/.*$//')
readonly names=$(hostname)
readonly cpuinfos=$(cat /proc/cpuinfo|grep processor|wc -l)
readonly onlines='2'
readonly cpuload='80'
  • readonly 声明了多个只读变量,用于存储当前时间、机器 IP、主机名、CPU 数量、在线用户数阈值和 CPU 负载阈值。

4. 在线用户检查

userd=$(top -n 1|grep users|awk -F '[, ]+' '{print $6}')
whos=$(who)
if [ $userd > $onlines ];then
    echo "$times   $machine   当前在线用户数: $whos"
fi
  • 使用 top 命令获取当前在线用户数并与设定阈值比较,如果超过设定阈值,则输出当前在线用户信息。

5. 监控函数

  • top_check():获取 CPU 使用情况。
  • load_time():获取 CPU 负载信息(1、5、15 分钟负载)。
  • load_mem():获取内存和 swap 使用情况。
  • echo_run(), echo_cpu(), echo_mem(), echo_load():打印运行时间、CPU 使用情况、内存使用情况和 CPU 负载信息。

6. 监控结果处理与邮件发送

top_check
load_time
load_mem()

if [ `echo "$load1 > $cpuinfos"|bc` -eq 1 ];then
    readonly runlog="/tmp/runs.log"
    echo_run >$runlog
    readonly loadlog="/tmp/load.log"
    echo_load >$loadlog
    readonly cpulog="/tmp/cpus.log"
    echo_cpu >$cpulog
    readonly memlog="/tmp/mems.log"
    echo_mem >$memlog

    dos2unix -k $runlog
    dos2unix -k $loadlog
    dos2unix -k $cpulog
    dos2unix -k $memlog

    mailx -s "服务器$names $machine" lumia98@vip.qq.com < $runlog
    mailx -s "服务器$names $machine" lumia98@vip.qq.com < $loadlog
    mailx -s "服务器$names $machine" lumia98@vip.qq.com < $cpulog
    mailx -s "服务器$names $machine" lumia98@vip.qq.com < $memlog
fi
  • 执行监控函数并生成日志文件,如果 1 分钟负载超过 CPU 数量,则将各项监控信息写入日志文件,并使用 mailx 命令发送邮件通知。

7. I/O 等待时间和磁盘空间检查

if [ `echo "$cpuwa > 60"|bc` -eq 1 ];then
    readonly ioslogs="/tmp/wa.log"
    iostat -cdx 3 > $ioslogs
    dos2unix -k $ioslogs
    mailx -s "服务器$names $machine的负载wa%" lumia98@vip.qq.com < $ioslogs    
fi

disks=$(df | grep /dev|grep -v "shm\|boot\|devtmpfs"|awk '{print $5}'|sed 's/\%.*$//')
for x in $disks
do
    if [ $x -gt 70 ]; then
        disklog="/tmp/disk.log"
        df -h >$disklog
        dos2unix -k $disklog
        mailx -s "服务器$names $machine" lumia98@vip.qq.com < $disklog    
    fi
done
  • 如果 CPU 的 I/O 等待时间超过 60%,则记录信息并发送邮件。
  • 检查各个磁盘的使用情况,若使用率超过 70%,则生成磁盘使用日志并发送邮件。

总结

该脚本主要用于监控服务器的性能和资源使用情况,及时发送通知以防止资源耗尽。它使用了 topiostatdf 等命令来获取系统状态,并通过 mailx 发送报告邮件。为了保证脚本的稳定性,它还进行了环境依赖的检查和安装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值