shell脚本作业
需求:
shell脚本需求说明:
1、监控系统中的cpu、内存、硬盘、、使用率超过80%进行邮件告警(可使用邮箱163、QQ、139等)
2、监控系统中的IO await大于50进行邮件告警(可使用邮箱163、QQ、139等)
3、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警(可使用邮箱163、QQ、139等)
实例:
#!/bin/bash# 配置参数
THRESHOLD=80 # 阈值%
IO_AWAIT_THRESHOLD=50 # IO await阈值ms
NETWORK_THRESHOLD=100 # 网络流量阈值MB
INTERFACE="ens33" # 网络接口名,请根据实际情况修改# QQ邮箱配置
SMTP_SERVER="smtp.qq.com"
SMTP_PORT="587"
EMAIL_FROM="2463230702@qq.com" # 发件人QQ邮箱
EMAIL_PASSWORD="lxgjuprnpolvdhgj" # QQ邮箱授权码,不是密码
EMAIL="2463230702@qq.com" # 收件人邮箱# 获取当前时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")# 日志文件
LOG_FILE="/var/log/zya.log"# 创建日志目录
mkdir -p $(dirname "$LOG_FILE")# 记录日志函数
log_message() {echo "[$TIMESTAMP] $1" >> "$LOG_FILE"
}# 发送邮件函数
send_alert_email() {local subject="$1"local content="$2"echo -e "Subject: $subject\n\n$message" | \
SMTP_PASSWORD="$SMTP_PASS" msmtp \--from="$SMTP_USER" \--host="$SMTP_SERVER" \--port="$SMTP_PORT" \--auth=on \--user="$SMTP_USER" \--passwordeval="echo \$SMTP_PASSWORD" \--tls=on \--tls-starttls=on \"$EMAIL"if [ $? -eq 0 ]; thenecho "邮件发送成功: $subject"
elseecho "邮件发送失败: $subject"
fi
}# 检查CPU使用率
check_cpu() {local cpu_usage_int=$(printf "%.0f" "$cpu_usage")if [ "$cpu_usage_int" -gt "$THRESHOLD" ]; thensend_alert_email "CPU" "$cpu_usage_int" "CPU使用率过高,请及时处理"return 1elselog_message "CPU使用率正常: ${cpu_usage_int}%"return 0fi
}# 检查内存使用率
check_memory() {local mem_info=$(free | grep Mem)local total_mem=$(echo $mem_info | awk '{print $2}')local used_mem=$(echo $mem_info | awk '{print $3}')local mem_usage=$(awk "BEGIN {printf \"%.2f\", $used_mem/$total_mem*100}")local mem_usage_int=$(printf "%.0f" "$mem_usage")if [ "$mem_usage_int" -gt "$THRESHOLD" ]; thensend_alert_email "内存" "$mem_usage_int" "内存使用率过高,可能需要释放内存或增加内存"return 1elselog_message "内存使用率正常: ${mem_usage_int}%"return 0fi
}# 检查磁盘使用率
check_disk() {local disk_usage=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g')if [ $disk_usage -ge $THRESHOLD ]; thenlocal subject="磁盘使用率告警"local message="根目录磁盘使用率过高: $disk_usage%,超过阈值$THRESHOLD%。\n时间: $(date)"send_alert "$subject" "$message"echo "磁盘告警已发送: $disk_usage%"fi
}# 检查IO await
check_io_await() {local io_await=$(iostat -x 1 2 | awk '/^avg-cpu/ {getline; getline; print $10}' | tail -n1)local io_await_int=$(printf "%.0f" "$io_await")if [ "$io_await_int" -ge "$IO_AWAIT_THRESHOLD" ]; thenlocal message="IO await过高: ${io_await_int}ms (阈值: ${IO_AWAIT_THRESHOLD}ms)"log_message "警告: $message"send_alert_email "IO await告警 - $TIMESTAMP" "$message\n服务器: $(hostname)"fi
}# 检查网络流量
check_network() {local interface=$(ip route | grep default | awk '{print $5}' | head -n1)local rx_bytes_prev=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)local tx_bytes_prev=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)sleep 1local rx_bytes_next=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)local tx_bytes_next=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)local rx_speed=$(echo "scale=2; ($rx_bytes_next - $rx_bytes_prev) / 1024 / 1024" | bc)local tx_speed=$(echo "scale=2; ($tx_bytes_next - $tx_bytes_prev) / 1024 / 1024" | bc)if [ $(echo "$rx_speed > $NETWORK_THRESHOLD" | bc) -eq 1 ]; thenlocal message="网络下载流量过高: ${rx_speed}MB/s (阈值: ${NETWORK_THRESHOLD}MB/s)"log_message "警告: $message"send_alert_email "网络流量告警 - $TIMESTAMP" "$message\n接口: $interface\n服务器: $(hostname)"fiif [ $(echo "$tx_speed > $NETWORK_THRESHOLD" | bc) -eq 1 ]; thenlocal message="网络上载流量过高: ${tx_speed}MB/s (阈值: ${NETWORK_THRESHOLD}MB/s)"log_message "警告: $message"send_alert_email "网络流量告警 - $TIMESTAMP" "$message\n接口: $interface\n服务器: $(hostname)"fi
}# 主监控函数
main_monitor() {log_message "开始系统监控检查..."check_cpucheck_memorycheck_diskcheck_io_awaitcheck_networklog_message "系统监控检查完成"
}# 执行监控
main_monitor
echo "监控检查完成:$(date)"
问题:
一、 MSMTP邮件安装与配置:
我将帮您创建MSMTP配置文件。以下是配置步骤和说明:
1. 创建配置文件
使用以下命令创建并编辑配置文件:
sudo yum install msmtp
nano ~/.msmtprc
2. 配置文件内容
将以下内容复制到文件中(请替换为您的实际信息):
# 默认账户配置
account default# QQ邮箱SMTP服务器设置
host smtp.qq.com
port 587# 发件人邮箱地址
from your-qq@qq.com# 认证设置
auth on
user your-qq@qq.com
password your-authorization-code# TLS加密设置
tls on
tls_starttls on# 日志文件(可选)
logfile ~/.msmtp.log
3. 重要说明
需要修改的参数:
your-qq@qq.com
→ 您的QQ邮箱地址your-authorization-code
→ 授权码(不是QQ密码)
获取授权码步骤:
- 登录QQ邮箱网页版
- 进入"设置" → “账户”
- 开启"POP3/SMTP服务"
- 按照提示获取授权码
4. 设置文件权限
为了保护您的密码安全,需要设置正确的文件权限:
chmod 600 ~/.msmtprc
5. 测试配置
使用以下命令测试配置是否正常工作:
echo "Test message" | msmtp -a default recipient@example.com
可选的高级配置
如果您需要更多自定义选项,可以添加以下配置:
# 超时设置
timeout 30# 域名(通常不需要修改)
domain localhost# 邮件格式
auto_from on
maildomain qq.com
这样就完成了MSMTP的配置。您现在可以使用msmtp通过QQ邮箱发送邮件了。