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

Linux 系统资源监控与告警脚本

脚本功能概述

这两个 Shell 脚本实现了 Linux 系统资源的实时监控,包括 CPU 使用率、内存使用率、磁盘使用率、I/O 负载以及网络带宽使用情况。当任何资源使用率超过预设阈值时,脚本会自动发送邮件告警。

脚本一:网络带宽监控 (getNat.sh)

#!/bin/bash# 网络带宽监控脚本
# 功能:计算指定网络接口的上行和下行速率# 配置参数
NIC="ens33"          # 网卡名称,根据实际系统修改(如 eth0, ens33, enp3s0)
LIMIT=10             # 带宽告警阈值,单位 MB/s# 获取两次字节数差值来计算速率
rx1=$(cat /sys/class/net/$NIC/statistics/rx_bytes)
tx1=$(cat /sys/class/net/$NIC/statistics/tx_bytes)
sleep 1
rx2=$(cat /sys/class/net/$NIC/statistics/rx_bytes)
tx2=$(cat /sys/class/net/$NIC/statistics/tx_bytes)# 计算速率 (字节 → MB)
rx_rate=$(( (rx2 - rx1) / 1024 / 1024 ))
tx_rate=$(( (tx2 - tx1) / 1024 / 1024 ))# 输出结果(供其他脚本调用)
export rx_rate tx_rate

使用说明

  1. 修改 NIC 变量为您的网络接口名称
  2. 调整 LIMIT 变量设置带宽告警阈值
  3. 此脚本会被主监控脚本调用,计算网络带宽使用情况

脚本二:系统资源监控主脚本 (CPUMonitor.sh)

#!/bin/bash# 系统资源监控与告警脚本
# 功能:监控CPU、内存、磁盘、I/O和网络带宽使用情况# 引入网络监控脚本
source ./getNat.sh# 监控阈值配置
dataMax=80    # CPU、内存、磁盘使用率阈值(%) 
IOMax=50      # I/O 使用率阈值(%) 
NATLimit=10   # 网络带宽阈值(MB/s)# 获取各项资源使用率
CPULimit=$(top -bn1 | grep "Cpu"| awk '{print 100- $8}')
RAMLimit=$(free -m | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
DISKLimit=$(df -h / | awk 'NR==2 {gsub("%","",$5); print $5}')
IOLimit=$(iostat -cy 1 1 | awk '/^ /{print $4}')# 网络带宽监控告警
if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]]; thentitle="网络带宽告警"desc="网络带宽使用超限,下行速率: ${rx_rate}MB/s,上行速率: ${tx_rate}MB/s"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com"  # 替换为您的邮箱
fi# I/O 监控告警
if [[ $IOLimit -gt $IOMax ]]; thentitle="磁盘I/O告警"desc="磁盘I/O使用率超限,当前使用率: ${IOLimit}%"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com"  # 替换为您的邮箱
fi# CPU、内存、磁盘监控告警
if [[ $CPULimit -gt $dataMax ]] || [[ $RAMLimit -gt $dataMax ]] || [[ $DISKLimit -gt $dataMax ]]; thentitle="系统资源告警"desc="系统资源使用超限:CPU使用率: ${CPULimit}%,内存使用率: ${RAMLimit}%,磁盘使用率: ${DISKLimit}%"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com"  # 替换为您的邮箱
fi

安装与配置步骤

1. 安装必要工具

# 安装邮件发送工具 msmtp
sudo apt-get install msmtp msmtp-mta  # Ubuntu/Debian
sudo yum install msmtp                # CentOS/RHEL# 安装系统监控工具
sudo apt-get install sysstat          # 包含 iostat 命令

2. 配置邮件发送

创建 msmtp 配置文件 ~/.msmtprc

account default
host smtp.example.com     # 邮件服务器地址
port 587
from your-email@example.com
auth on
user your-email@example.com
password your-email-password
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

3. 设置脚本权限

chmod +x getNat.sh CPUMonitor.sh

4. 配置定时任务

添加 crontab 任务定期执行监控:

# 编辑当前用户的crontab
crontab -e# 添加以下行(每5分钟执行一次监控)
*/5 * * * * /path/to/CPUMonitor.sh

自定义配置指南

  1. 调整监控阈值:根据您的系统配置调整脚本中的阈值变量

    • dataMax:CPU、内存、磁盘使用率阈值
    • IOMax:I/O 使用率阈值
    • NATLimit:网络带宽阈值
  2. 修改网络接口:在 getNat.sh 中修改 NIC 变量为您的实际网络接口名称

  3. 更改告警邮箱:将所有 your-email@example.com 替换为您的实际邮箱地址

  4. 调整监控频率:修改 crontab 中的时间设置来调整监控频率

注意事项

  1. 确保邮件配置正确,可以测试邮件发送功能
  2. 根据实际系统负载调整告警阈值,避免频繁误报
  3. 监控脚本需要适当的执行权限
  4. 对于生产环境,建议添加日志记录功能
  5. 可以考虑添加重复告警抑制机制,避免短时间内重复告警

文章转载自:

http://duboaMLZ.kqbwr.cn
http://MWpsQ0zw.kqbwr.cn
http://ooUe8ZXx.kqbwr.cn
http://zPMh97Nm.kqbwr.cn
http://W3JZaVgx.kqbwr.cn
http://zkpxCQ7q.kqbwr.cn
http://r32xaCBd.kqbwr.cn
http://jRTiCiuF.kqbwr.cn
http://PAeRrSdw.kqbwr.cn
http://PQt64E8I.kqbwr.cn
http://0x25fKlR.kqbwr.cn
http://tgcecmzK.kqbwr.cn
http://dhv48x5F.kqbwr.cn
http://YwNh0NEO.kqbwr.cn
http://ysW6WdH6.kqbwr.cn
http://rGfoTKaQ.kqbwr.cn
http://lykXvrp5.kqbwr.cn
http://m8c5LM9n.kqbwr.cn
http://T2Yq1sJ9.kqbwr.cn
http://yZo6THwY.kqbwr.cn
http://OGJfpCp4.kqbwr.cn
http://MEAIMGgL.kqbwr.cn
http://NKyHxXtv.kqbwr.cn
http://ivcJzOmI.kqbwr.cn
http://q3WCIRgy.kqbwr.cn
http://z9V1Cmv8.kqbwr.cn
http://cyJuzItQ.kqbwr.cn
http://agzLaaRE.kqbwr.cn
http://nc9JfxEr.kqbwr.cn
http://glYcOZhC.kqbwr.cn
http://www.dtcms.com/a/372241.html

相关文章:

  • 记录jilu~
  • 现代云原生数据平台
  • 【Python脚本系列】PyCryptodome库解决网盘内.m3u8视频文件无法播放的问题(三)
  • DuckDB 1.4新增功能提前知道
  • Wi-Fi技术——传播与损耗
  • 管道的优缺点
  • 训练+评估流程
  • 【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架
  • PHP云课堂在线网课系统 多功能网校系统 在线教育系统源码
  • redis的高可用(哨兵)
  • Redis之分布式锁与缓存设计
  • pip常用指令小结
  • Python中进行时区转换和处理
  • CTFshow系列——PHP特性Web97-100
  • Python快速入门专业版(九):字符串进阶:常用方法(查找、替换、分割、大小写转换)
  • MySQL 8.0+ 内核剖析:架构、事务与数据管理
  • 11.2.1.项目整体架构和技术选型及部署
  • [C++刷怪笼]:set/map--优质且易操作的容器
  • zotero扩容
  • 20250907_梳理异地备份每日自动巡检py脚本逻辑流程+安装Python+PyCharm+配置自动运行
  • UserManagement.vue和Profile.vue详细解释
  • Python进阶编程:文件操作、系统命令与函数设计完全指南
  • 【redis 基础】redis 的常用数据结构及其核心操作
  • 美团大模型“龙猫”登场,能否重塑本地生活新战局?
  • nats消息队列处理
  • k8s镜像推送到阿里云,使用ctr推送镜像到阿里云
  • Ubuntu Qt x64平台搭建 arm64 编译套件
  • IO性能篇(一):文件系统是怎么工作的
  • SQL Server——基本操作
  • nginx详解