Linux服务器巡检脚本,支持日志记录、定时巡检、邮箱预警(AI)
以下是一个完整的Linux服务器巡检脚本,包含磁盘、内存、CPU使用情况的检查,机器名称和IP地址的获取,磁盘使用率超过70%时发送邮件通知,以及日志记录功能(保留3天日志)。日志默认保存在 /var/log/server_check/ 目录下,每天一个日志文件,自动保留最近3天的日志。安装完成后需要配置邮件发送服务(如使用本地sendmail或配置外部SMTP服务器)。脚本使用系统的 mail
·
功能说明
以下是一个完整的Linux服务器巡检脚本,包含磁盘、内存、CPU使用情况的检查,机器名称和IP地址的获取,磁盘使用率超过70%时发送邮件通知,以及日志记录功能(保留3天日志)。
#!/bin/bash
# 配置部分
EMAIL="自己邮箱地址" # 接收告警邮件的邮箱
LOG_DIR="/var/log/server_check" # 日志目录
LOG_FILE="$LOG_DIR/server_check_$(date +%Y%m%d).log" # 日志文件
MAX_LOG_DAYS=3 # 保留日志天数
DISK_WARNING_THRESHOLD=70 # 磁盘使用率告警阈值(%)
# 创建日志目录
mkdir -p "$LOG_DIR"
# 清理超过3天的日志文件
find "$LOG_DIR" -name "server_check_*.log" -type f -mtime +$MAX_LOG_DAYS -exec rm -f {} \;
# 获取服务器信息
HOSTNAME=$(hostname)
IP_ADDRESS=$(hostname -I | awk '{print $1}')
# 获取系统信息
DATE_TIME=$(date "+%Y-%m-%d %H:%M:%S")
UPTIME=$(uptime -p)
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}')
# 获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
# 获取内存使用情况
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
MEM_USAGE_PERCENT=$(free | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
# 获取磁盘使用情况
DISK_INFO=$(df -h | awk -v threshold=$DISK_WARNING_THRESHOLD '
/^\/dev\// {
if ($5+0 > threshold) {
warn_disks = warn_disks "分区: " $6 " 使用率: " $5 " 总大小: " $2 " 已用: " $3 " 可用: " $4 "\n"
}
all_disks = all_disks "分区: " $6 " 使用率: " $5 " 总大小: " $2 " 已用: " $3 " 可用: " $4 "\n"
}
END {
print "警告磁盘:\n" warn_disks "\n所有磁盘:\n" all_disks
}
')
# 提取警告磁盘信息
WARNING_DISKS=$(echo "$DISK_INFO" | awk '/警告磁盘:/{flag=1;next}/所有磁盘:/{flag=0}flag')
# 如果有磁盘超过阈值,发送邮件
if [ -n "$WARNING_DISKS" ]; then
MAIL_SUBJECT="[磁盘告警] 服务器 $HOSTNAME ($IP_ADDRESS) 磁盘使用率超过 ${DISK_WARNING_THRESHOLD}%"
MAIL_BODY="服务器名称: $HOSTNAME
服务器IP: $IP_ADDRESS
当前时间: $DATE_TIME
以下磁盘分区使用率超过 ${DISK_WARNING_THRESHOLD}%:
$WARNING_DISKS
请及时处理!
"
echo "$MAIL_BODY" | mail -s "$MAIL_SUBJECT" "$EMAIL"
fi
# 记录日志
{
echo "============================= 服务器检查报告 ============================="
echo "检查时间: $DATE_TIME"
echo "服务器名称: $HOSTNAME"
echo "服务器IP: $IP_ADDRESS"
echo "运行时间: $UPTIME"
echo "系统负载: $LOAD_AVG"
echo ""
echo "------------------------------ CPU 使用情况 ------------------------------"
echo "CPU 使用率: ${CPU_USAGE}%"
echo ""
echo "------------------------------ 内存使用情况 ------------------------------"
echo "总内存: ${MEM_TOTAL}MB"
echo "已用内存: ${MEM_USED}MB"
echo "内存使用率: ${MEM_USAGE_PERCENT}%"
echo ""
echo "------------------------------ 磁盘使用情况 ------------------------------"
echo "$DISK_INFO" | sed -n '/所有磁盘:/,$p'
echo ""
echo "=========================================================================="
echo ""
} >> "$LOG_FILE"
echo "============================= 服务器检查报告 ============================="
echo "检查时间: $DATE_TIME"
echo "服务器名称: $HOSTNAME"
echo "服务器IP: $IP_ADDRESS"
echo "运行时间: $UPTIME"
echo "系统负载: $LOAD_AVG"
echo ""
echo "------------------------------ CPU 使用情况 ------------------------------"
echo "CPU 使用率: ${CPU_USAGE}%"
echo ""
echo "------------------------------ 内存使用情况 ------------------------------"
echo "总内存: ${MEM_TOTAL}MB"
echo "已用内存: ${MEM_USED}MB"
echo "内存使用率: ${MEM_USAGE_PERCENT}%"
echo ""
echo "------------------------------ 磁盘使用情况 ------------------------------"
echo "$DISK_INFO" | sed -n '/所有磁盘:/,$p'
echo ""
echo "=========================================================================="
echo ""
echo "服务器检查完成,日志已记录到: $LOG_FILE"
使用说明
- 将上述脚本保存为 server_check.sh
- 给脚本执行权限:chmod +x server_check.sh
- 设置定时任务(如每天检查一次):
# 编辑crontab
crontab -e
添加以下内容(每天凌晨1点执行):
0 1 * * * /path/to/server_check.sh
邮件发送配置
脚本使用系统的 mail 命令发送邮件。如果系统没有安装邮件服务,需要先安装:
对于基于Debian的系统(如Ubuntu):
sudo apt-get install mailutils
对于基于RHEL的系统(如CentOS):
sudo yum install mailx
安装完成后需要配置邮件发送服务(如使用本地sendmail或配置外部SMTP服务器)。
日志位置
日志默认保存在 /var/log/server_check/ 目录下,每天一个日志文件,自动保留最近3天的日志。
注意事项
- 确保脚本有足够的权限执行(可能需要root权限获取所有信息)
- 根据实际环境调整告警阈值和邮件接收地址
- 邮件发送功能需要服务器能正常发送邮件
- 可以根据需要调整检查频率和日志保留天数
更多推荐
所有评论(0)