监控系统 | 脚本案例

1、监控系统中的cpu、内存、硬盘、、使用率超过80%进行邮件告警(可使用邮箱QQ)

详细步骤说明:

1. 脚本初始化

  • #!/bin/bash:指定使用bash shell执行

  • dateMax=80:设置资源使用率阈值(80%)

2. 资源监控

  • CPU使用率top -bn1 | grep "Cpu" | awk '{print 100 - $8}'

    • top -bn1:获取一次系统状态

    • grep "Cpu":过滤CPU信息

    • awk '{print 100 - $8}':计算CPU使用率(100% - 空闲百分比)

  • 内存使用率free -m | awk '/Mem:/ {printf "%.2f", $3/$2*100}'

    • free -m:以MB为单位显示内存信息

    • awk计算已用内存占总内存的百分比

  • 磁盘使用率df -h / | awk 'NR==2 {gsub("%","",$5); print $5}'

    • df -h /:显示根分区磁盘使用情况

    • awk提取使用率百分比

3. 日志记录

  • echo "$(date '+%Y-%m-%d %H:%M:%S'): ..." >> /var/log/monitor.log

    • 所有输出都追加到日志文件

    • 包含时间戳便于追踪

4. 条件判断

  • 使用 bc 命令进行浮点数比较

  • 三个条件任一满足即触发告警:

    • CPU使用率 > 80%

    • 内存使用率 > 80%

    • 磁盘使用率 > 80%

5. 告警处理

  • 生成告警描述信息

  • 发送邮件到指定邮箱

  • 记录邮件发送结果(成功/失败)

6. 正常情况

  • 资源使用率正常时记录"系统资源正常"

脚本详情:

#!/bin/bash
#设置阈值
dateMax=80   
#获取系统资源使用率
CPULimit=$(top -bn1 | grep "Cpu" | awk '{print 100- $8}')
RAMLimit=$(free -m | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
#CPU 内存 硬盘监控
if [ $(echo "$CPULimit > $dateMax" | bc) -eq 1 ] || \
[ $(echo "$RAMLimit > $dateMax" | bc) -eq 1 ] || \
[ $DISKLimit -gt $dateMax ]
then

    title="资源告急"
desc="资源告急,CPU使用率高达${CPULimit}%,内存使用率高达${RAMLimit}%,磁盘使用率>高达${DISKLimit}%"
# 记录告警信息到日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> /var/log/monitor.log
#发送邮件
echo "$desc" | mailx -s "$title" "123456@qq.com"
#检查邮件发送结果
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S'): 告警邮件发送成功" >> /var/log/monitor.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): 告警邮件发送失败" >> /var/log/monitor.log
fi
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): 系统资源正常" >> /var/log/monitor.log
fi

2、监控系统中的IO await大于50进行邮件告警(可使用邮箱QQ)

脚本详解

1. 配置参数部分

#!/bin/bash
# 配置参数
IOMax=50
EMAIL="123456@qq.com"
LOG_FILE="/var/log/io_monitor.log"

  • #!/bin/bash: 指定使用Bash shell执行脚本

  • IOMax=50: 设置IO使用率阈值,超过50%触发告警

  • EMAIL: 设置接收告警邮件的邮箱地址

  • LOG_FILE: 设置日志文件路径

2. 获取IO使用率

# 使用 iostat -x 获取sda设备的IO使用率(%util)
IOLimit=$(iostat -x 1 2 | awk '/sda/ {print $NF}' | tail -1 | cut -d'.' -f1)

这条命令的详细解析:

  • iostat -x 1 2: 显示扩展IO统计信息,每秒刷新一次,共显示2次

  • awk '/sda/ {print $NF}': 过滤包含"sda"的行,并打印最后一列(%util)

  • tail -1: 取最后一行(第二次采样的结果)

  • cut -d'.' -f1: 去掉小数部分,只取整数

3. 记录日常日志

# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO使用率 $IOLimit%" >> "$LOG_FILE"

将当前时间和IO使用率记录到日志文件中。

4. 判断和告警逻辑

# 判断是否超过阈值
if [[ $IOLimit -gt  $IOMax ]]
then
title="IO告急"
desc="IO告急,当前IO使用率高达${IOLimit}%,超过阈值${IOMax}%"

    # 记录告警日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> "$LOG_FILE"

    # 发送邮件
echo -e "Subject: $title\n\n$desc" | msmtp "$EMAIL"

    # 检查发送结果
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送成功" >> "$LOG_FILE"
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送失败" >> "$LOG_FILE"
fi
fi

脚本详情:

# 配置参数

#!/bin/bash

IOMax=50
EMAIL="123456@qq.com"
LOG_FILE="/var/log/io_monitor.log"
# 使用 iostat -x 获取sda设备的IO使用率(%util)
IOLimit=$(iostat -x 1 2 | awk '/sda/ {print $NF}' | tail -1 | cut -d'.' -f1)
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO使用率 $IOLimit%" >> "$LOG_FILE"
# 判断是否超过阈值
if [[ $IOLimit -gt  $IOMax ]]
then
title="IO告急"
desc="IO告急,当前IO使用率高达${IOLimit}%,超过阈值${IOMax}%"
# 记录告警日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> "$LOG_FILE"
# 发送邮件
echo -e "Subject: $title\n\n$desc" | msmtp "$EMAIL"
# 检查发送结果
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送成功" >> "$LOG_FILE"
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送失败" >> "$LOG_FILE"
fi
fi


3、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警(可使用邮箱QQ)

详细步骤解析

1. 变量初始化

bash

NIC="ens33"                    # 要监控的网络接口名称
LIMIT=10                       # 限制值(单位:MB/s)
NATLimit=10                    # 用于判断的阈值(单位:MB/s)
EMAIL_TO="123456@qq.com"   # 告警邮件接收地址

2. 获取初始网络统计

bash

rx1=$(cat /sys/class/net/$NIC/statistics/rx_bytes)  # 获取初始接收字节数
tx1=$(cat /sys/class/net/$NIC/statistics/tx_bytes)  # 获取初始发送字节数
sleep 1                                             # 等待1秒

3. 获取第二次网络统计并计算速率

bash

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 ))  # 上传速率

4. 显示当前速率

bash

echo "上传速率: ${tx_rate} MB/s"
echo "下载速率: ${rx_rate} MB/s"

5. 阈值判断与告警处理

bash

if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]]; then
title="网络监控"
desc="网络带宽告急,下行速率高达${rx_rate},上行速率高达${tx_rate}MB/s,已超过 ${LIMIT}MB/s 的限制"
echo "警告: $desc"

6. 邮件发送

bash

# 使用mailx发送邮件
(
echo "Subject: $title"
echo "From: system_monitor@$(hostname)"
echo "To: 123456@qq.com"  # 注意:这里与EMAIL_TO变量不一致
echo ""
echo "$desc"
echo ""
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
echo "网络接口: $NIC"
echo "阈值限制: ${LIMIT}MB/s"
) | mailx -s "$title" "$EMAIL_TO" 2>/dev/null

7. 邮件发送结果检查

bash

if [ $? -eq 0 ]; then
echo "邮件已发送 $EMAIL_TO"
else
echo "邮件发送失败,请检查 mailx 配置"
fi

#!/bin/bash
NIC="ens33"
LIMIT=10  # 单位 M/s
NATLimit=10          # 限制值(用于判断)
EMAIL_TO="123456@qq.com"  
# 取两次字节数差值,算速率
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/s
rx_rate=$(( (rx2 - rx1) / 1024 / 1024 ))
tx_rate=$(( (tx2 - tx1) / 1024 / 1024 ))

#引入上行速度和下行速度
echo "上传速率: ${tx_rate} MB/s"
echo "下载速率: ${rx_rate} MB/s"
#阈值判断
#网络监控
if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]];then
title="网络监控"
desc="网络带宽告急,下行速率高达${rx_rate},上行速率高达${tx_rate}MB/s,已超过 ${LIMIT}MB/s 的限制"
echo "警告: $desc"       
#发送邮件
(
echo "Subject: $title"
echo "From: system_monitor@$(hostname)"
echo "To: 123456@qq.com"
echo ""
echo "$desc"
echo ""
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
echo "网络接口: $NIC"
echo "阈值限制: ${LIMIT}MB/s"
) | mailx -a default "123456@qq.com" 2>/dev/null
# 检查邮件是否发送成功
if [ $? -eq 0 ]; then       
echo "邮件已发送 $EMAIL_TO"
else
echo "邮件发送失败,请检查 mailx 配置"
fi
fi

#!/bin/bash
NIC="ens33"
LIMIT=10  # 单位 M/s
NATLimit=10          # 限制值(用于判断)
# 取两次字节数差值,算速率
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/s
rx_rate=$(( (rx2 - rx1) / 1024 / 1024 ))
tx_rate=$(( (tx2 - tx1) / 1024 / 1024 ))

#引入上行速度和下行速度
echo "上传速率: ${tx_rate} MB/s"
echo "下载速率: ${rx_rate} MB/s"
#阈值判断
#网络监控
if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]];then
title="网络监控"
desc="网络带宽告急,下行速率高达${rx_rate},上行速率高达${tx_rate}MB/s,已超过 ${LIMIT}MB/s 的限制"
echo "警告: $desc"       
#发送邮件
(
echo "Subject: $title"
echo "From: system_monitor@$(hostname)"
echo "To: 1261316341@qq.com"
echo ""
echo "$desc"
echo ""
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
) | msmtp -a default "2654371993@qq.com" 2>/dev/null
# 检查邮件是否发送成功
if [ $? -eq 0 ]; then       
echo "邮件已发送"
else
echo "邮件发送失败,请检查 msmtp 配置"
fi
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921511.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vulkan 学习(20)---- UniformBuffer 的使用

目录UniformBufferDescriptorSetLayout 和 VkBuffer顶点着色器定义描述符布局(DescriptorSetLayout)创建 UniformBuffer描述符池(DescriptorSet Pool)描述符集(DescriptorSet)更新描述符集使用描述符集使用多个 DescriptorUniformBuffer 本篇文档是通过 Uniform Buffer 的使用…

[光学原理与应用-461]:波动光学 - 波片实现偏振态的转换或调整

波片(Wave Plate)是一种基于双折射效应的光学元件,其核心功能是通过控制光波中寻常光(o光)和非寻常光(e光)的相位差,实现偏振态的转换或调整。以下是波片的主要功能及其原理的详细说…

Flutter之riverpod状态管理详解

一、riverpod状态管理中所涉及到的provider对比分析Provider 类型核心用途最佳适用场景优势劣势/注意事项Provider(v1)暴露一个恒定不变的(或不需要Riverpod管理的)对象或值。依赖注入(如:Repository, Logger, ApiClient&#xff…

昇腾310i Pro固件说明

目录 驱动和固件 驱动固件文件 firware固件 24.2版本对应的固件 驱动和固件共同文件 烧结到flash中的固件 总结 启动流程 固件关系猜测 启动关键信息 efuse atu大小 GPU的bar 总结 驱动和固件 以最新的25.2 对应的驱动和固件为例说明: 驱动固件文件…

【LeetCode热题100道笔记】二叉树的右视图

题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入:root [1,2,3,null,5,null,4] 输出:[1,3,4] 解释:示例 2&am…

Redis《RedisSerializer》

文章目录RedisSerializer为什么要使用如何使用RedisSerializer总结RedisSerializer 为什么要使用 RedisTemplate 有默认的序列化器,但默认使用的 JdkSerializationRedisSerializer 存在一些问题: 序列化后的数据包含类信息等额外内容,导致…

基于开源AI大模型AI智能名片S2B2C商城小程序的文案引流与社交传播运营策略研究

摘要:本文聚焦开源AI大模型AI智能名片S2B2C商城小程序,探讨其文案引流与社交传播运营策略。阐述文案在引流中的重要性,分析开源AI大模型AI智能名片S2B2C商城小程序的特性,研究文案设计策略、社交传播机制及运营策略实施与效果评估…

NGINX vs HAProxy vs LVS:优势与选型分析

目录 1. 负载均衡的江湖:三巨头初探 2. NGINX:全能选手的多面魅力 NGINX 核心优势 NGINX 的短板 NGINX 实战案例 3. HAProxy:调度大师的精细之道 HAProxy 核心优势 HAProxy 的短板 HAProxy 实战案例 4. LVS:内核猛兽的极致性能 LVS 核心优势 LVS 的短板 LVS 实…

AI+ 行动意见解读:音视频直播SDK如何加速行业智能化

引言:国家战略、技术基座与行业落地 8 月底,国务院发布了《“人工智能”行动意见》,明确将人工智能提升为继“互联网”之后的新一轮国家级战略抓手。这份文件的关键词已经不再是“连接”与“优化”,而是“重塑”与“跃迁”&#…

2025年华为HCIA人工智能认证发展前景如何?客观分析!

大家好!7月世界人工智能大会即将揭幕首款重载机器人,AI产业化进程再次加速。不少朋友开始转移关注到和它有一点点关系的——华为HCIA-AI Solution认证(人工智能解决方案工程师),但它是否真能搭上这趟技术快车&#xff…

AutoGPT 原理与实践:从AI助理到“自主任务完成者” (人工智能入门系列)

Elon Musk 曾预言,“AIAgent 终将比人类聪明,并能自动完成大部分工作,这既是机遇也是威胁。” 而 AutoGPT,正是当前 AI 领域涌现出的、最能体现这一预言雏形的产品。它不再是那个需要你一句一句精确指令的“AI助手”,而…

自适应滤波器:Ch4 最小均方(LMS)算法

随机梯度下降算法简介 之前的章节中介绍了利用最速下降算法可以实现维纳滤波器的最优解(LMMSE),其最优解的形式为: w0R−1Pw_{0} R^{- 1}Pw0​R−1P 它基于两个假设:环境的联合平稳,即输入u(n)u(n)u(n)以及…

AI生成内容的版权问题解析与实操指南

针对个人使用AI工具生成视频/音乐的版权问题深度解析,从法律归属、侵权边界到确权实操,结合最新司法实践提炼核心要点: 一、版权归属核心逻辑:人类智力投入的可视化 当用户深度参与创作过程时,可主张版权。关键看操作…

4.2 机器学习 - 欠拟合和过拟合

模型训练的核心挑战是让模型既 “学好” 训练数据,又能 “适应” 新数据。欠拟合(Underfitting)和过拟合(Overfitting)是阻碍这一目标的两大典型问题,其本质是 “模型复杂度” 与 “数据复杂度” 不匹配。本…

LeetCode 468. 验证IP地址 - 详细解析

文章目录LeetCode 468. 验证IP地址 - 详细解析题目描述IPv4验证规则:IPv6验证规则:最优Java解决方案(注释完整版)关键变量含义及代码技巧代码技巧详解1. 前导零检查的最佳实践2. IPv6为什么不能用Character.isDigit()3. 针对性注释…

新能源研发,用新型实验记录本:ELN

新能源(材料)研发如火如荼,竞争激烈。以电池为例,新能源汽车的崛起、储能技术的突破,让电池成为了能源领域的“新宠”。电池研发已经成为热门赛场,各研发团队都在与时间赛跑,试图维持优势或弯道…

大语言模型领域最新进展

CSDN大礼包《人工智能大模型课程》 CSDN大礼包《人工智能平台设计开发课程课程》

【网安干货】--计算机网络知识梳理总结(二)

这是计算机网络知识梳理的第二篇,真正去梳理才发现内容好多好多好多好多好多啊…怕是预计要写四篇 注意:如果看不清可以右键复制图片链接到浏览器访问或另存为照片并放大查看 计算机网络2 计算机网络协议2.1 网络协议的定义与核心要素2.1.1 协议的定义2.…

百度前端社招面经二

社招 百度 前端开发 二面 base 北京 react 17 和 18 的差异react的响应式原理,js是如何驱动模块的webpacke 4 和 5 差异webpacke 热更新原理。Tree Shaking 是干嘛的import 和 require 区别,都会被Tree Shaking吗隐藏元素的几种方式三栏布局,…

结合prompt分析NodeRAG的build过程

之前介绍了NodeRAG的节点类型和安装过程。 linux环境conda安装NodeRAG示例-CSDN博客 这里尝试从prompt代码角度分析NodeRAG如何将文档转化为节点、关系。 1 整体处理流程 NodeRAG定义了如下所示状态及处理流程。 # define the state to pipeline mapping self.state_pipelin…