Amazon Linux AMIを実行します。 CloudWatchは空きディスク容量をチェックしないようです。私はいくつかのサーバーを持っていますが、理想的には、各サーバーにメールサーバーやディスク容量をチェックするスクリプトなどを設定する必要はありません。
これを行う簡単な方法はありますか?
Amazonは、2012年3月の時点でこのためのスクリプトを提供しています。
Linux用Amazon CloudWatch監視スクリプト: http://aws.Amazon.com/code/8720044071969977
インスタンスのファイルシステムはインスタンス自体によってのみアクセス可能であるため、EC2制御および監視ツールがこのデータを提供する方法はありません。ハードウェアの基本アーキテクチャとセキュリティモデルの両方で、この制限が必要です。コンピュータの外部にあるソフトウェアがハードドライブのファイルに侵入する可能性があるとしたら、それがどれほど悪いことか考えてみてください。
Cron(ほとんどのシステムにインストールされています)がこのデータを定期的にチェックするための重要な方法を次に示します。いずれにしても、システムにはルートメール通知を処理するための最小要件が必要です。少なくとも実体的な発信メールエージェントを用意し、管理するすべてのシステムで転送するようにルートまたは管理者のエイリアスを構成することをお勧めします。 cron
を含む多くのプログラムは、この構成を想定しています。
これをcrontabに追加できます:
0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"
それを打破するために、これは
test
コマンドは、-lt
より小さい演算子と1Gbの空き容量に等しい固定値を使用して、単純なシェル比較を設定します。df
コマンドは、/
ファイルシステムの空き領域をテストしますgrep
を使用すると、df
に含まれているヘッダーの代わりに、必要な出力行だけを取得できます。awk
getは、出力の4番目の列である空き領域番号です。&&
は、最初のコマンド(test x -lt y
)がtrueを返した場合にのみ、次のコマンドを実行するよう指示します。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
これをCloudWatchを使用してEC2インスタンスに設定するための詳細な手順:
http://docs.aws.Amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
クロンはあなたの友達です。このファイルを/ 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がいっぱいであることを示します。
これは、私が書いた簡単な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
}
}