自动检查 EC2 磁盘空间并在空间不足时发出警报的最简单方法是什么?

自动检查 EC2 磁盘空间并在空间不足时发出警报的最简单方法是什么?

运行 Amazon Linux AMI。CloudWatch 似乎不检查可用磁盘空间。我有许多服务器,理想情况下不想为每个服务器配置邮件服务器、检查磁盘空间的脚本等。

有没有更简单的方法可以做到这一点?

答案1

截至 2012 年 3 月,亚马逊提供了此脚本:

适用于 Linux 的 Amazon CloudWatch 监控脚本http://aws.amazon.com/code/8720044071969977

答案2

EC2 控制和监控工具无法向您提供这些数据,因为实例的文件系统只能由实例本身访问硬件的基本架构和安全模型都要求有这种限制。想想看,如果计算机外部的软件可以随意查看硬盘上的文件,那将是多么糟糕!

这里有一个低调的方法,可以让 cron(大多数系统上都安装了)定期检查这些数据。无论如何,您的系统应该具有处理 root 邮件通知的最低要求。我建议至少有一个实用的外发邮件代理,并配置 root 或管理员别名以在您管理的所有系统上转发给您。许多程序(包括)都cron期望此配置。

您可以将其添加到您的 crontab 中:

0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"

为了打破这一点,

  • 创建一个每天 00:00 运行一次的工作。
  • Cron 会自动通过电子邮件向系统管理员发送作业的输出。此作业仅在出现错误或磁盘空间不足时才产生输出
  • 该命令使用小于运算符和相当于 1Gb 可用空间的固定值test设置一个简单的 shell 比较。-lt
  • 该命令测试文件系统df上的可用空间/
  • grep只会获取您需要的输出行,而不是df包含的标题。
  • 得到awk的只是输出中的第四列,即可用空间数量。
  • 表示仅当第一个命令( )返回 true&&时才运行下一个命令。test x -lt y

答案3

我编写了一个脚本,因为我需要检查 EC2 组中的多个服务器。它需要一个文件,其中每行列出每个服务器的 IP/域名。

#! /bin/bash

ADMIN="[email protected]"
ALERT=85

for SERVER in `cat ~/scripts/servers.txt` do
ssh -i ~/.ssh/yourkey.pem $SERVER df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $SERVER as on $(date)" | 
mail -s "Alert: Almost out of disk space $usep" $ADMIN
fi
done done

答案4

相关内容