Linux服务器巡检脚本,支持日志记录、定时巡检、邮箱预警(AI)

功能说明

以下是一个完整的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"

使用说明

  1. 将上述脚本保存为 server_check.sh
  2. 给脚本执行权限:chmod +x server_check.sh
  3. 设置定时任务(如每天检查一次):
# 编辑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权限获取所有信息)
  • 根据实际环境调整告警阈值和邮件接收地址
  • 邮件发送功能需要服务器能正常发送邮件
  • 可以根据需要调整检查频率和日志保留天数

你可能感兴趣的:(AI创造,服务器,linux)