实验环境 某公司随着业务的不断发展,所使用的linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件。 需求藐视 编写监控脚本sysmon.sh,存在异常时邮件告警 监控cpu使用率、内存使用率、根分区的占用率 百分比精确到个位 出现以下情况时告警:磁盘占用率超过90%、CPU占用率超过80%、内存使用率超过90% 结合计划任务,每半个小时检查一次
时间: 2024-02-06 17:10:10 浏览: 82
监控linux性能脚本
5星 · 资源好评率100%
方案实现:
1. 监控cpu使用率、内存使用率、根分区的占用率
可以使用命令 top 或者 free 来获取 CPU 和内存的使用率。使用 df 命令获取根分区的占用率。
具体实现方法如下:
```bash
#!/bin/bash
# 获取CPU使用率
cpu_usage=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 获取根分区的占用率
disk_usage=$(df -h / | awk '/\//{print $(NF-1)}')
# 判断是否需要告警
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
mail -s "CPU usage alert" admin@example.com <<< "CPU usage is over 80%!"
fi
if (( $(echo "$mem_usage > 90" | bc -l) )); then
mail -s "Memory usage alert" admin@example.com <<< "Memory usage is over 90%!"
fi
if (( $(echo "${disk_usage%%%} > 90" | bc -l) )); then
mail -s "Disk usage alert" admin@example.com <<< "Disk usage is over 90%!"
fi
```
2. 发送告警邮件
使用 mail 命令可以发送邮件。需要先安装 sendmail 或者 postfix 等邮件服务。
具体实现方法如下:
```bash
# 发送邮件
mail -s "Subject" recipient@example.com <<< "Message"
```
3. 结合计划任务
可以使用 crontab 命令来定时执行脚本。每半个小时执行一次。
具体实现方法如下:
```bash
# 编辑计划任务
crontab -e
# 添加以下内容
*/30 * * * * /path/to/sysmon.sh >/dev/null 2>&1
```
完整的脚本如下:
```bash
#!/bin/bash
# 获取CPU使用率
cpu_usage=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 获取根分区的占用率
disk_usage=$(df -h / | awk '/\//{print $(NF-1)}')
# 判断是否需要告警
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
mail -s "CPU usage alert" admin@example.com <<< "CPU usage is over 80%!"
fi
if (( $(echo "$mem_usage > 90" | bc -l) )); then
mail -s "Memory usage alert" admin@example.com <<< "Memory usage is over 90%!"
fi
if (( $(echo "${disk_usage%%%} > 90" | bc -l) )); then
mail -s "Disk usage alert" admin@example.com <<< "Disk usage is over 90%!"
fi
```
将脚本保存为 sysmon.sh,设置可执行权限:
```bash
chmod +x sysmon.sh
```
编辑计划任务:
```bash
crontab -e
```
添加以下内容:
```bash
*/30 * * * * /path/to/sysmon.sh >/dev/null 2>&1
```
其中 /path/to 是脚本的绝对路径。这样就完成了基于计划任务的性能监控脚本。
阅读全文