自动检查EC2磁盘空间并在其电量不足时收到警报的最简单方法?


25

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

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

Answers:


13

截至2012年3月,Amazon为此提供了脚本:

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


这些脚本看起来相当简单。让我担心的是,它需要一对已知的AWS访问密钥和密钥。有谁知道它是否还会充当EC2实例角色来获得临时对,或者我是否必须自己编写代码?
sergiopereira 2015年

回答我自己的问题。是! 这些脚本将使用EC2实例的IAM角色(如果存在)。要注意的是,您选择的角色必须具有必要的CloudWatch权限。
sergiopereira

5

EC2控制和监视工具无法向您提供此数据,因为实例的文件系统只能由实例本身访问。硬件的基本体系结构和安全模型都需要此限制。想一想,如果计算机外部的软件可以猛击硬盘驱动器上的文件,将会有多严重!

这是使cron(无论如何安装在大多数系统上)定期检查此数据的一种低调方法。您的系统应具有最低要求,无论如何都应处理根邮件通知。我建议至少拥有一个实质性的外发邮件代理,并配置根或管理员别名以在您管理的所有系统上转发给您。许多程序都包括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会自动通过作业输出向系统管理员发送电子邮件。仅当出现错误或磁盘空间不足时,此作业才会产生输出
  • test命令使用-lt小于运算符和等于1Gb可用空间的固定值来设置简单的Shell比较。
  • df命令测试/文件系统上的可用空间
  • grep让你输出的只是线,你需要的不是头df包括。
  • awkGET只是在输出第四列,自由空间数。
  • &&说只运行,如果第一个(对下一个命令test x -lt y)返回true。

4

我需要检查EC2组中的多台服务器时编写了一个脚本。它需要一个文件,其中在一行上包含每个服务器IP /域名的列表。

#! /bin/bash

ADMIN="serveralerts@youraddress.com"
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

2
“用于Linux的Amazon CloudWatch监视脚本”可以将磁盘使用情况作为自定义指标推送到CloudWatch中。docs.amazonwebservices.com/AmazonCloudWatch/latest/...
Laurion Burchall

@LaurionBurchall,请回答。IMO是正确的答案,因为它可以使用CloudWatch警报。
Joe Constant



0

Cron是你的朋友。将此文件放到/etc/cron.daily 目录中,它将每天运行一次:

#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron    
ADMIN="jdoe@maildomain.com"
ALERT=90    
df -PkH | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
  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 $(hostname) as on $(date)" |
    mail -s "Alert: Almost out of disk space $usep%" $ADMIN
  fi
done

注意:此脚本将表明已安装的CDROM已满。


0

这是我编写的快速PowerShell脚本,可在AWS的DC上运行,如果驱动器已满,则会发出一封电子邮件给一组收件人。它需要两列的csv-一列带计算机名称的名称,一列带驱动器号的驱动器。我们的AWS环境中没有邮件服务器,因此我将其配置为通过SES发送。如果愿意,您也可以稍微修改脚本以仅每隔一段时间发送一次有关驱动器利用率的报告。只是以为我会将其发布在这里,因为我发现的所有解决方案都是针对Linux实例的。

$CSVPath = "c:\Scripts\computerNames.csv"
$computerName = new-object System.Data.DataSet
$computerName = Import-CSV $CSVPath
$AwsUn = "" 
$AwsPw = ConvertTo-SecureString "" -AsPlainText -Force

$cred = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $AwsUn, $AwsPw

Foreach($name in $computerName)
{

    $dl = $name.drive

    $Utilization = Get-WmiObject win32_Volume -ComputerName $name.computerName -Filter "DriveLetter = '$($dl)'"|   Foreach{ “{0:N2}” -f ((1-$_.FreeSpace / $_.Capacity)*100) } 

    if($Utilization -gt 90)
    {
        Send-MailMessage -From Sender to Recipients -subject (
    "$($name.computerName) Disk utilization" )-Body "The $dl drive on the AWS instance $($name.computerName) has $utilization% disk utilization.   Please log in and delete log files or contact the Network Operations team to increase the storage allocated to this instance"  -SmtpServer email-smtp.us-west-2.amazonaws.com -Credential $cred -useSSL -port 25
    } 


}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.