当前位置: 首页 > news >正文

监控 Linux 服务器资源

使用 Bash 脚本监控 Linux 服务器资源并发送告警邮件

  • 前言
  • 一、🛠️ 脚本功能概览
  • 二、 📜 脚本核心逻辑分解
        • 2.1. 变量初始化
        • 2.2. CPU 使用率监控
        • 2.3. 内存使用率监控
        • 2.4. 磁盘使用率监控
        • 2.5. 磁盘 IO 延迟监控(await)
        • 2.6. 网络流量监控
    • 在这里插入图片描述
  • 三、📤 告警通知机制
  • 四、📁 日志文件说明
  • 五、✅ 使用建议
        • 5.1. 配置定时任务(Cron)
        • 5.2. 邮件发送配置
        • 5.3. 安全性建议
        • 5.4. 扩展功能建议
  • 六、🧩 总结

前言

  在现代 IT 运维中,及时掌握服务器的运行状态至关重要。当 CPU、内存、磁盘、IO 或网络等关键指标出现异常时,快速告警能够帮助运维人员第一时间响应,避免服务中断或性能下降。

  本文将介绍一个用 Bash 脚本编写的轻量级服务器资源监控工具,它能够实时检测以下指标:

  • CPU 使用率
  • 内存使用率
  • 磁盘使用率
  • 磁盘 IO 延迟(await)
  • 网络流量(接收/发送速率)
    当任意一项指标超过设定的阈值时,脚本将通过 邮件 发送告警信息,同时在本地日志文件中记录状态,便于后续排查与审计。

一、🛠️ 脚本功能概览

监控项指标说明阈值参数告警方式
CPUCPU 使用率百分比CPUMAX=80%邮件 + 本地日志
内存内存使用率百分比MEMMAX=80%邮件 + 本地日志
磁盘根分区使用率百分比DISK_MAX=80%邮件 + 本地日志
IO(磁盘)IO await(读/写)THRES_AWAIT=50ms邮件 + 本地日志
网络接收/发送流量(MB/s)NETWORK=10MB/s邮件 + 本地日志

二、 📜 脚本核心逻辑分解

2.1. 变量初始化

脚本开头定义了日志路径、邮箱配置、SMTP 信息以及各项监控阈值:

#日志
LOG_CPU="/var/log/cpu.log"
LOG_MEM="/var/log/mem.log"
LOG_DISK="/var/log/disk.log"
LOG_IO="/var/log/io_await.log"
LOG_NET="/var/log/net.log"
#邮箱
EMAIL="you_mail@.com"
SMTP_HOST="smtp.163.com"
SMTP_PORT=465
SMTP_USER="you_mail@.com"
SMTP_PASS="授权码"
#告警阈值
CPUMAX=80
MEMMAX=80
DISK_MAX=80
THRES_AWAIT=50
NETWORK=10

📌 注意:脚本使用了 mail 命令发送邮件,背后需配置好如 ssmtpsendmail 或者通过 mutt 等工具结合 SMTP 服务发送。默认 mail 命令可能无法直接使用,需要额外配置。

2.2. CPU 使用率监控

通过 top 命令提取 CPU 空闲率,再计算使用率,并与阈值比较:

CPU=$(top -bn1|grep "Cpu(s)"|awk '{print $2}')
if (( $(echo "$CPU > $CPUMAX" | bc -l))); thenCPU_ALERT="CPU使用率: ${CPU}%(超过${CPUMAX}%)${TIME}"
elseCPU_ALERT=""echo "${TIME} :OK"   >> /var/log/cpu.log
fi

在这里插入图片描述

2.3. 内存使用率监控

通过 free 命令获取已用和总内存,计算使用率:

MEM_USE=$(free | awk '/Mem:/ {print $3}')
MEM_TOTAL=$(free |awk '/Mem:/ {print $2}')
MEM_USAGE=$(echo "scale=2; $MEM_USE * 100/ $MEM_TOTAL "| bc)

在这里插入图片描述
同样与 MEMMAX 比较,超过则告警。

2.4. 磁盘使用率监控

使用 df -h / 获取根分区使用百分比,去掉 % 后与 DISK_MAX 比较:

DISK_INFO=$(df -h / | grep / | awk '{print $5}'|sed 's/%//g')

在这里插入图片描述

2.5. 磁盘 IO 延迟监控(await)

使用 iostat -x 1 2 获取磁盘 sda 的读写 await 值(第 10 和 11 列),判断是否超过 50ms:

IO_AWAIT_R=$(iostat -x 1 2|grep sda|tail -1 |awk '{print $10}')
IO_AWAIT_W=$(iostat -x 1 2|grep sda|tail -1 |awk '{print $11}')

🧠 小知识:await 表示每次 IO 请求的平均等待时间(单位:毫秒),数值过高可能意味着磁盘存在性能瓶颈。

在这里插入图片描述

2.6. 网络流量监控

通过 /proc/net/dev 获取指定网卡(默认第一个非 lo 网卡)的接收(RX)和发送(TX)字节数,转换为 MB/s,与 NETWORK 阈值(10MB/s)对比:

NIC=$(ifconfig | grep -B1 "inet" | grep -v 'lo' |head -n1 |awk '{print $1}'|sed 's/://g')
RX_BYTES=$(grep "$NIC" /proc/net/dev |awk '{print $2}')
TX_BYTES=$(grep "$NIC" /proc/net/dev |awk '{print $10}')

⚠️ 注意:该网络监控逻辑是瞬时流量,如果要监控带宽速率(比如每秒流量),需要两次采样做差值计算,这里简化处理,仅作参考。

在这里插入图片描述

三、📤 告警通知机制

当任一监控项超过阈值时,脚本会:

  1. 拼接告警信息,包括时间与具体异常项;
  2. 通过 mail 命令发送邮件给指定邮箱;
  3. 将状态写入对应的日志文件(如 /var/log/cpu.log)。
    示例告警邮件内容:
告警时间: 2025-09-07 20:12:36
【CPU】CPU使用率: 85.6%(超过80%)2025-09-07 20:12:36
【硬盘】硬盘使用率: 87%(超过80%)2025-09-07 20:12:36

四、📁 日志文件说明

脚本会在 /var/log/ 目录下生成如下日志,用于记录每次检测的结果,便于后续分析:

  • cpu.log:CPU 告警或正常信息
  • mem.log:内存告警或正常信息
  • disk.log:磁盘使用率告警或正常信息
  • io_await.log:IO await 告警信息
  • net.log:网络流量告警信息
    每个日志文件在检测正常时都会追加一行 :OK,方便做定时任务监控和统计。

五、✅ 使用建议

5.1. 配置定时任务(Cron)

可以将此脚本保存为 /usr/local/bin/server_monitor.sh,然后添加到 crontab 中,例如每分钟执行一次:

* * * * * /bin/bash /usr/local/bin/server_monitor.sh
5.2. 邮件发送配置

脚本中使用的是 mail 命令发送邮件,但要使其真正可用,通常需要:

  • 安装并配置 mailxmutt 或者 ssmtp
  • 或者使用 curl 调用第三方邮件 API(如阿里云邮件推送、SendGrid 等)
    推荐使用 mutt 或配置好 sendmail 与 SMTP 服务对接。
5.3. 安全性建议
  • 不要将邮箱密码明文写在脚本中,建议使用环境变量或配置文件(并限制权限)
  • 脚本中涉及敏感信息(如 SMTP_PASS),建议设置文件权限为仅 root 可读:
    chmod 700 /usr/local/bin/server_monitor.sh
    chmod 600 /var/log/*.log
    
5.4. 扩展功能建议
  • 增加更多网卡支持或多维度网络流量统计
  • 增加进程级别的监控(如 MySQL、Nginx 是否在运行)
  • 使用更专业的监控工具集成,如 Prometheus + Grafana,但本脚本胜在轻量和易部署

六、🧩 总结

通过上述 Bash 脚本,我们可以快速搭建一套轻量级的服务器基础资源监控和告警系统。虽然不如专业监控软件功能全面,但对于小型环境、个人服务器或临时监控需求,它简单、有效、即插即用。

适用场景:

  • 个人 VPS 监控
  • 小公司内网服务器巡检
  • 临时排查性能问题
  • 学习 Linux 系统监控的入门实践

技术栈:

  • Bash 脚本
  • Linux 命令(top, free, df, iostat, ifconfig, awk, bc)
  • 邮件发送(mail / mutt / SMTP)
  • Crontab 定时任务

💡 提示: 如果你首次使用 iostat,可能需要安装 sysstat 包:

sudo apt install sysstat   # Debian / Ubuntu
sudo yum install sysstat   # CentOS / RHEL

文章转载自:

http://Nb7QObBO.qxjck.cn
http://Dbur8zc2.qxjck.cn
http://fkN5zVCA.qxjck.cn
http://aZFr1VEY.qxjck.cn
http://fJRyThpr.qxjck.cn
http://vScoXJYK.qxjck.cn
http://GNU8sbX2.qxjck.cn
http://UwbIpgqV.qxjck.cn
http://KYkVRvCT.qxjck.cn
http://9iaCYa4j.qxjck.cn
http://fv77wdFi.qxjck.cn
http://SLeCdzJt.qxjck.cn
http://TFeES0Ug.qxjck.cn
http://dtS6XOVp.qxjck.cn
http://6KwhMaLc.qxjck.cn
http://D8yyHPoE.qxjck.cn
http://09VDCanC.qxjck.cn
http://szrp7MLq.qxjck.cn
http://G2vhgdmn.qxjck.cn
http://qrWg0Mtn.qxjck.cn
http://uwSx8lNO.qxjck.cn
http://SwrRujb4.qxjck.cn
http://r0hY7lCE.qxjck.cn
http://IRB0ixpK.qxjck.cn
http://DOdFXHSq.qxjck.cn
http://ZztnQJg4.qxjck.cn
http://yZsnDmgB.qxjck.cn
http://WEbCmpo3.qxjck.cn
http://apy06Ygw.qxjck.cn
http://bXM2tJfI.qxjck.cn
http://www.dtcms.com/a/371843.html

相关文章:

  • HTTP原理
  • 【WebApi】什么情况开启如何开启缓存
  • 中国金融机构数据库2.0-许可证、机构设立、退出、失控信息2007-2023.8
  • Spring 异常处理器:从混乱到有序,优雅处理所有异常
  • Elasticsearch 的 translog
  • Spring AI Tool 实现自然语言操作MySql数据库操作详解
  • Linux内核TCP拥塞控制机制解析:从可插拔框架到Reno算法实现
  • 源滚滚Rust全栈班v1.02 无符号整数详解
  • 2025最新超详细FreeRTOS入门教程:第四章 FreeRTOS消息队列
  • Rust 登堂 之 Drop 释放资源(十一)
  • 开关电源的原理、结构和实物入门篇-超简单解读
  • Environments
  • 上架商品合规流程有多条,有的长,有的短,有的需要审核,校验商品的合规性
  • 简单聊一聊js
  • 合格齿轴工艺工程师要修炼哪些功法?
  • LwIP入门实战 — 5 LwIP 的内存管理
  • 【三维生成】Matrix-3D:全向可探索的三维世界生成
  • DispatcherServlet 初始化过程:SpringMVC 的 “启动引擎” 详解
  • Simulink中使用Test sequence单元测试
  • 20250907-02:LangChain 架构和LangChain 生态系统包是什么
  • 大数据(非结构化数据,Spark,MongoDB)
  • FastAPI + LangChain 和 Spring AI + LangChain4j
  • Python基础语法篇:整数和浮点数,加减乘除怎么算?
  • 现成的AI模型:训练+评估框架汇总
  • 服务器断电引起的一例ORA-01207故障处理----惜分飞
  • 《MySQL基础——用户管理》
  • 【Linux】系统部分——进程间通信2(共享内存)
  • 【温室气体数据集】全球协作碳柱观测网络 COCCON
  • STM32 JLINK下载失败解决方案
  • JavaScript 中十种数组拷贝方法(从浅拷贝到深拷贝)