在Linux系统中,我们可以结合Systemd和Crontab来实现全面的服务器监控自动化。Systemd适合运行持续性的监控服务,而Crontab则适合定时执行检查任务。以下是具体实现方案:
首先创建一个监控脚本,例如/usr/local/bin/server_monitor.sh
:
#!/bin/bash
# 监控CPU、内存、磁盘使用率
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=90
# 检查CPU使用率
check_cpu() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
echo "CPU使用率过高: ${cpu_usage}%" | mail -s "服务器告警" admin@example.com
fi
}
# 检查内存使用率
check_mem() {
local mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
echo "内存使用率过高: ${mem_usage}%" | mail -s "服务器告警" admin@example.com
fi
}
# 检查磁盘使用率
check_disk() {
df -h | awk -v threshold=$DISK_THRESHOLD '$5+0 > threshold {print "分区 " $1 " 使用率过高: " $5}' | \
mail -s "磁盘空间告警" admin@example.com
}
# 主循环
while true; do
check_cpu
check_mem
check_disk
sleep 300 # 每5分钟检查一次
done
给脚本添加执行权限:
chmod +x /usr/local/bin/server_monitor.sh
创建/etc/systemd/system/server-monitor.service
文件:
[Unit]
Description=Server Monitoring Service
After=network.target
[Service]
ExecStart=/usr/local/bin/server_monitor.sh
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable server-monitor
systemctl start server-monitor
创建/usr/local/bin/daily_server_check.sh
:
#!/bin/bash
# 每日服务器健康检查
REPORT_FILE="/var/log/server_health_$(date +%Y%m%d).log"
{
echo "===== 服务器健康检查报告 $(date) ====="
echo ""
echo "----- 系统信息 -----"
uname -a
echo ""
echo "----- 内存使用情况 -----"
free -h
echo ""
echo "----- 磁盘使用情况 -----"
df -h
echo ""
echo "----- 最近登录用户 -----"
last | head -n 10
echo ""
echo "----- 运行时间 -----"
uptime
} > $REPORT_FILE
# 发送报告
mail -s "每日服务器健康报告" admin@example.com < $REPORT_FILE
给脚本添加执行权限:
chmod +x /usr/local/bin/daily_server_check.sh
编辑root用户的crontab:
crontab -e
添加以下内容:
# 每天凌晨1点执行健康检查
0 1 * * * /usr/local/bin/daily_server_check.sh
# 每周一凌晨2点清理旧日志
0 2 * * 1 find /var/log/server_health_*.log -mtime +30 -exec rm {} \;
对于更专业的监控,可以部署Prometheus和Node Exporter:
# 下载并安装Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
cd node_exporter-1.3.1.linux-amd64
./node_exporter &
然后创建Systemd服务单元来管理Node Exporter。
创建/etc/logrotate.d/server_monitor
:
/var/log/server_health_*.log {
weekly
missingok
rotate 4
compress
delaycompress
notifempty
create 0640 root root
}
检查Systemd服务状态:
systemctl status server-monitor
检查Crontab日志:
grep CRON /var/log/syslog
手动触发测试:
/usr/local/bin/server_monitor.sh
/usr/local/bin/daily_server_check.sh
通过以上配置,您的Linux服务器将实现全面的自动化监控,包括实时资源监控和定期健康检查报告。