CentOS监控脚本编写指南
随着服务器数量的增加,对服务器进行实时监控变得尤为重要,CentOS作为一款流行的Linux发行版,拥有丰富的监控工具和脚本,本文将介绍如何编写一个基本的CentOS监控脚本,以实现对服务器关键性能指标的监控。

监控脚本需求分析
在编写监控脚本之前,我们需要明确以下需求:
- 监控指标:CPU使用率、内存使用率、磁盘使用率、网络流量等。
- 监控频率:根据实际情况设定,如每5分钟、每10分钟等。
- 报警机制:当监控指标超过预设阈值时,发送报警信息。
- 日志记录:记录监控数据,便于后续分析。
监控脚本编写
以下是一个简单的CentOS监控脚本示例:
#!/bin/bash
# 定义监控指标阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=80
NET_THRESHOLD=1000
# 获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 获取内存使用率
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
# 获取磁盘使用率
DISK_USAGE=$(df -h | grep "/dev/sda1" | awk '{print $5}')
# 获取网络流量
NET_IN=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
NET_OUT=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
# 判断监控指标是否超过阈值,并记录日志
if [ $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc) -eq 1 ]; then
echo "$(date) - CPU usage is high: $CPU_USAGE%" >> /var/log/cpu_usage.log
fi
if [ $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc) -eq 1 ]; then
echo "$(date) - Memory usage is high: $MEM_USAGE%" >> /var/log/mem_usage.log
fi
if [ $(echo "$DISK_USAGE > $DISK_THRESHOLD" | bc) -eq 1 ]; then
echo "$(date) - Disk usage is high: $DISK_USAGE" >> /var/log/disk_usage.log
fi
if [ $(echo "$NET_IN > $NET_THRESHOLD" | bc) -eq 1 ]; then
echo "$(date) - Network input is high: $NET_IN" >> /var/log/net_in.log
fi
if [ $(echo "$NET_OUT > $NET_THRESHOLD" | bc) -eq 1 ]; then
echo "$(date) - Network output is high: $NET_OUT" >> /var/log/net_out.log
fi
# 发送报警信息
if [ $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc) -eq 1 ]; then
echo "CPU usage is high: $CPU_USAGE%" | mail -s "CPU Alert" admin@example.com
fi
if [ $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc) -eq 1 ]; then
echo "Memory usage is high: $MEM_USAGE%" | mail -s "Memory Alert" admin@example.com
fi
if [ $(echo "$DISK_USAGE > $DISK_THRESHOLD" | bc) -eq 1 ]; then
echo "Disk usage is high: $DISK_USAGE" | mail -s "Disk Alert" admin@example.com
fi
if [ $(echo "$NET_IN > $NET_THRESHOLD" | bc) -eq 1 ]; then
echo "Network input is high: $NET_IN" | mail -s "Network Alert" admin@example.com
fi
if [ $(echo "$NET_OUT > $NET_THRESHOLD" | bc) -eq 1 ]; then
echo "Network output is high: $NET_OUT" | mail -s "Network Alert" admin@example.com
fi 脚本部署与定时任务

将脚本保存为
monitor.sh,并赋予执行权限:chmod +x monitor.sh
创建定时任务,实现定时执行监控脚本:
crontab -e
添加以下行:
*/5 * * * * /path/to/monitor.sh其中
/path/to/monitor.sh为监控脚本的路径。
FAQs

问题:如何修改监控指标阈值?解答:在脚本中,监控指标阈值分别对应
CPU_THRESHOLD、MEM_THRESHOLD、DISK_THRESHOLD和NET_THRESHOLD,您可以根据实际情况修改这些变量的值。问题:如何修改报警邮箱地址?解答:在脚本中,报警信息通过
mail命令发送,您需要修改mail -s "CPU Alert" admin@example.com中的admin@example.com为您的邮箱地址,确保您的邮件服务器配置正确,以便接收报警信息。

