web-dev-qa-db-ja.com

EC2のディスク容量を自動的にチェックし、残量が少なくなった場合にアラートを受け取る最も簡単な方法は?

Amazon Linux AMIを実行します。 CloudWatchは空きディスク容量をチェックしないようです。私はいくつかのサーバーを持っていますが、理想的には、各サーバーにメールサーバーやディスク容量をチェックするスクリプトなどを設定する必要はありません。

これを行う簡単な方法はありますか?

25
DaBeeeenster

Amazonは、2012年3月の時点でこのためのスクリプトを提供しています。

Linux用Amazon CloudWatch監視スクリプトhttp://aws.Amazon.com/code/8720044071969977

13
qerub

インスタンスのファイルシステムはインスタンス自体によってのみアクセス可能であるため、EC2制御および監視ツールがこのデータを提供する方法はありません。ハードウェアの基本アーキテクチャとセキュリティモデルの両方で、この制限が必要です。コンピュータの外部にあるソフトウェアがハードドライブのファイルに侵入する可能性があるとしたら、それがどれほど悪いことか考えてみてください。

Cron(ほとんどのシステムにインストールされています)がこのデータを定期的にチェックするための重要な方法を次に示します。いずれにしても、システムにはルートメール通知を処理するための最小要件が必要です。少なくとも実体的な発信メールエージェントを用意し、管理するすべてのシステムで転送するようにルートまたは管理者のエイリアスを構成することをお勧めします。 cronを含む多くのプログラムは、この構成を想定しています。

これをcrontabに追加できます:

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

それを打破するために、これは

  • 1日1回00:00に実行されるジョブを作成します。
  • Cronは、ジョブの出力をシステム管理者に電子メールで送信します。このジョブは、エラーがある場合、またはディスク容量が少ない場合にのみ出力を生成します
  • testコマンドは、-ltより小さい演算子と1Gbの空き容量に等しい固定値を使用して、単純なシェル比較を設定します。
  • dfコマンドは、/ファイルシステムの空き領域をテストします
  • grepを使用すると、dfに含まれているヘッダーの代わりに、必要な出力行だけを取得できます。
  • awk getは、出力の4番目の列である空き領域番号です。
  • &&は、最初のコマンド(test x -lt y)がtrueを返した場合にのみ、次のコマンドを実行するよう指示します。
5
Caleb

EC2グループ内のいくつかのサーバーをチェックする必要があるため、スクリプトを作成しました。各サーバーのIP /ドメイン名のリストが1行に記載されたファイルが必要です。

#! /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
DaBeeeenster

これをCloudWatchを使用してEC2インスタンスに設定するための詳細な手順:

http://docs.aws.Amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html

2
Kyle Chadha

クロンはあなたの友達です。このファイルを/ etc/cron.dailyディレクトリに配置すると、1日に1回実行されます。

#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron    
ADMIN="[email protected]"
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
djangofan

これは、私が書いた簡単なPowerShellスクリプトで、AWSでDCを実行し、ドライブがいっぱいの場合に受信者のグループに電子メールを送信します。2列の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
    } 


}
0
Benjamin Girard
0
Pete White