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

shell编程-案例

文章目录

  • 前言
  • 1、环境准备
    • 1.1 配置系统邮件发送功能
    • 1.2 安装证书
  • 2、QQ邮箱配置
    • 2.1 开启SMTP服务
    • 2.2 获取授权码
  • 3、证书配置
  • 4、mailx配置
  • 5、脚本
    • 5.1 监控系统中的cpu、内存、硬盘使用率超过80%进行邮件告警
    • 5.2 监控系统中的IO await大于50进行邮件告警
    • 5.3 监控系统中的网络流量下载上传超过10M进行邮件告警


前言

shell脚本需求说明:
1、监控系统中的cpu、内存、硬盘使用率超过80%进行邮件告警(可使用邮箱163、QQ、139等)
2、监控系统中的IO await大于50进行邮件告警(可使用邮箱163、QQ、139等)
3、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警(可使用邮箱163、QQ、139等)

1、环境准备

1.1 配置系统邮件发送功能

## 安装mailx
sudo yum install mailx -y
## 查看版本
mailx -v

1.2 安装证书

yum install nss-tools openssl -y

2、QQ邮箱配置

2.1 开启SMTP服务

  • 登录QQ邮箱 → 设置 → 账号与安全
  • 找到"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务"
  • 开启"SMTP服务"
    在这里插入图片描述

2.2 获取授权码

开启 SMTP 服务后,根据系统提示生成专属授权码
注意授权码不能泄露,可能会有安全隐患
在这里插入图片描述

3、证书配置

NSS(Network Security Services)数据库在配置mailx邮件发送功能时,主要用于管理加密通信所需的证书和密钥。通过NSS数据库,可以确保邮件传输过程中的安全性和身份验证

## 创建证书目录
mkdir -p /etc/pki/nssdb
## 设置空密码直接按回车
certutil -N -d /etc/pki/nssdb

在这里插入图片描述

4、mailx配置

证书配置

# 获取QQ邮箱465端口的SSL证书
echo -n | openssl s_client -connect smtp.qq.com:465 -servername smtp.qq.com | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/qq_465.crt# 导入证书到NSS数据库
certutil -A -n "QQ Mail SSL Certificate (465)" -t "P,," -i /tmp/qq_465.crt -d /etc/pki/nssdb

mailx配置

sudo vim /etc/mail.rc
## 465端口配置(SSL加密)
## 发件人邮箱地址,用于设置邮件的发件人信息
set from=你的QQ邮箱@qq.com
## SMTP服务器地址,使用smtps协议和465端口(SSL加密连接)
set smtp=smtps://smtp.qq.com:465
## SMTP认证用户名,填写QQ邮箱地址
set smtp-auth-user=你的QQ邮箱@qq.com
## SMTP认证密码,此处填入QQ邮箱生成的授权码(非登录密码)
set smtp-auth-password=你的授权码
## SMTP认证方式,login表示使用用户名密码认证
set smtp-auth=login
## SSL证书验证设置,ignore表示忽略证书验证(测试环境使用,生产环境建议配置正确证书)
set ssl-verify=ignore
## NSS证书数据库路径,指向之前创建的证书存储目录
set nss-config-dir=/etc/pki/nssdb/

邮箱测试

echo "这是一封测试邮件,用于验证邮箱配置是否成功。" | mail -s "邮箱配置测试" 你的邮箱@qq.com

在这里插入图片描述

在这里插入图片描述

5、脚本

5.1 监控系统中的cpu、内存、硬盘使用率超过80%进行邮件告警

#!/bin/bash# 获取当前时间
DATE=$(date "+%Y-%m-%d %H:%M:%S")# 1. 获取CPU使用率(取1秒内的平均值,避免立即返回0)CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')# 2. 获取内存使用率MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')# 3. 获取根分区(/)磁盘使用率
DISK_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')# 设置阈值
THRESHOLD=80# 告警标志和消息体
ALERT_FLAG=0
ALERT_MSG=""# 判断CPU
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); thenALERT_FLAG=1ALERT_MSG="$ALERT_MSG CPU 使用率: ${CPU_USAGE}% > ${THRESHOLD}%\n"
fi# 判断内存
if (( $(echo "$MEM_USAGE > $THRESHOLD" | bc -l) )); thenALERT_FLAG=1ALERT_MSG="$ALERT_MSG 内存 使用率: ${MEM_USAGE}% > ${THRESHOLD}%\n"
fi# 判断硬盘
if [ "$DISK_USAGE" -gt "$THRESHOLD" ]; thenALERT_FLAG=1ALERT_MSG="$ALERT_MSG 根分区磁盘 使用率: ${DISK_USAGE}% > ${THRESHOLD}%\n"
fi# 如果任何一项超标,则发送邮件
if [ $ALERT_FLAG -eq 1 ]; thenecho -e "【系统告警】服务器资源使用超限!\n\n告警时间:$DATE\n$ALERT_MSG\n请及时处理!" | mailx -s "【系统告警】$(hostname) 资源使用率超过 ${THRESHOLD}%" @qq.com
fi

5.2 监控系统中的IO await大于50进行邮件告警

#!/bin/bash# 设置阈值
IOMax=50
# 获取当前时间
DATE=$(date "+%Y-%m-%d %H:%M:%S")
# 消息体
ALERT_MSG=""# 使用 iostat -x 获取sda设备的IO使用率
IOLimit=$(iostat -x | awk '/sda/ {print $NF}' | tail -1)# 判断是否超过阈值
if [[ $IOLimit >  $IOMax ]]; thenALERT_MSG="IO使用率: ${IOLimit}% > ${IOMax}%"echo -e "【系统告警】IO使用率超限!\n\n告警时间:$DATE\n$ALERT_MSG\n请及时处理!" | mailx -s "【系统告警】$(hostname) IO使用率超过 ${IOMax}%" @qq.com
fi

5.3 监控系统中的网络流量下载上传超过10M进行邮件告警

#!/bin/bash# 配置参数
INTERFACE="ens33" # 请替换为你的网卡名
THRESHOLD_MB=10
THRESHOLD_BPS=$(( THRESHOLD_MB * 1024 * 1024 ))# 获取当前流量统计 (接收和发送的字节数)
RX_BYTES_OLD=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES_OLD=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)# 等待1秒
sleep 1# 再次获取流量统计
RX_BYTES_NEW=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES_NEW=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)# 计算1秒内的速率 (Bytes per Second)
RX_BPS=$(( (RX_BYTES_NEW - RX_BYTES_OLD) ))
TX_BPS=$(( (TX_BYTES_NEW - TX_BYTES_OLD) ))# 转换为 MB/s (用于显示和比较)
RX_MBPS=$(echo "scale=2; $RX_BPS / 1024 / 1024" | bc)
TX_MBPS=$(echo "scale=2; $TX_BPS / 1024 / 1024" | bc)# 检查是否超过阈值
HOSTNAME=$(hostname)
ALERT=false
MESSAGE=""if (( $(echo "$RX_BPS > $THRESHOLD_BPS" | bc -l) )); thenALERT=trueMESSAGE="$MESSAGE 流入流量: ${RX_MBPS} MB/s > ${THRESHOLD_MB} MB/s"
fiif (( $(echo "$TX_BPS > $THRESHOLD_BPS" | bc -l) )); thenALERT=trueMESSAGE="$MESSAGE 流出流量: ${TX_MBPS} MB/s > ${THRESHOLD_MB} MB/s"
fi# 如果超过阈值,发送邮件
if [ "$ALERT" = true ]; thenecho "警告:服务器 $HOSTNAME 的网卡 $INTERFACE 流量过高。$MESSAGE 时间:$(date)" | mail -s "【紧急】网络流量告警 - $HOSTNAME" @qq.com
fi

文章转载自:

http://Us2xh87R.jrLxz.cn
http://L8gGpxUL.jrLxz.cn
http://L1vQiziW.jrLxz.cn
http://zf7J2qPg.jrLxz.cn
http://bZr4OrUV.jrLxz.cn
http://VZ2aJEdf.jrLxz.cn
http://08ajd1ZH.jrLxz.cn
http://foDfW4oW.jrLxz.cn
http://smmDBmBe.jrLxz.cn
http://u7WCG6v6.jrLxz.cn
http://7bATKb43.jrLxz.cn
http://mdP0GlLv.jrLxz.cn
http://bkk3uQoS.jrLxz.cn
http://DcoFLckV.jrLxz.cn
http://n7KEgGbV.jrLxz.cn
http://Yg3fEzX8.jrLxz.cn
http://if3d9Nq6.jrLxz.cn
http://3tGLEYyy.jrLxz.cn
http://VrEru2sK.jrLxz.cn
http://GAlGCaBJ.jrLxz.cn
http://wk473b1B.jrLxz.cn
http://1BLcUan4.jrLxz.cn
http://dZ99NWIo.jrLxz.cn
http://0b6HNAvV.jrLxz.cn
http://54neDPNe.jrLxz.cn
http://oWzg72Nd.jrLxz.cn
http://h9KJQukk.jrLxz.cn
http://JeUFVgIC.jrLxz.cn
http://TWLVWqf3.jrLxz.cn
http://nmFlzHlB.jrLxz.cn
http://www.dtcms.com/a/371965.html

相关文章:

  • Docker--宿主机和容器相互拷贝文件
  • 打包成 UMD,通过 CDN静态资源共享:微前端项目中跨项目共享公共组件的最佳实践
  • 关于物料采购合同,付款规则库的程序设计(刘欣)
  • 自然语言处理 基于神经网络的词向量转化模型word2vec
  • 【数据分析】一种用于校正微生物组数据中批次效应的多变量框架
  • Spring WebFlux响应式编程原理深度解析与性能优化实践指南
  • ZYNQ UART中断
  • SimLingo:纯视觉框架下的自动驾驶视觉 - 语言 - 动作融合模型
  • 计算机视觉(十):ROI
  • 【设计模式】UML类图关系中的数量表示(详细版)
  • 利用 SeBackupPrivilege 的最快方法
  • 华为基于IPD的产品质量计划模板
  • leecoede 二分查找 题集
  • 编写第一个程序-Ai8051U-32bit,Keil设置
  • Objective-C方法参数标签怎么设置
  • 国内外最新AI语言模型行情分析2025年9月最新内容
  • [数据结构] 栈和队列
  • 基于moduo库实现protobuf通信
  • Android开发-图像显示
  • OpenHarmony之设备风险管理平台(SecurityGuard)模块源码详解
  • Kotlin 协程之 Flow 的理解使用及源码解析
  • Vue2.x核心技术与实战(六)-Vuex
  • 认知篇#12:基于非深度学习方法的图像特征提取
  • 软考备考①
  • 信息安全工程师软考攻坚:第三章网络安全技术深度解析与实战训练
  • JDK17日期格式‘MMM’导致九月Sept/Sep格式化异常问题❗❗❗
  • Vulkan 学习(20)---- UniformBuffer 的使用
  • 微信小程序中实现AI对话、生成3D图像并使用xr-frame演示
  • 【不背八股】9.MySQL知识点汇总
  • MySQL6