EC2のディスク容量を自動的にチェックし、空き容量が少なくなった場合に警告を受ける最も簡単な方法は?


25

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

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

回答:


13

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

Linux用Amazon CloudWatchモニタリングスクリプトhttp : //aws.amazon.com/code/8720044071969977


スクリプトはかなり単純です。心配なのは、AWSアクセスキーとシークレットの既知のペアが必要なことです。一時的なペアを取得するためにEC2インスタンスの役割も調べるのか、それとも自分でコーディングする必要があるのか​​、誰もが知っていますか?
セルジオペレイラ

私自身の質問に答えるため。はい!スクリプトは、EC2インスタンスのIAMロール(存在する場合)を使用します。問題は、選択したロールに必要なCloudWatchアクセス許可が必要であることです。
セルジオペレイラ

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 /"

それを壊すために、これ

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

4

EC2グループ内の複数のサーバーを確認する必要があるため、スクリプトを作成しました。各サーバーのIP /ドメイン名のリストを1行で含むファイルが必要です。

#! /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アラートを使用する機能を提供するため、正しい答えです。
ジョー定数



0

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

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

これは、AWSのDCで実行され、ドライブがいっぱいの場合に受信者のグループに電子メールを送信する、簡単なPowerShellスクリプトです。これには、2つの列を持つcsvが必要です。1つは名前がコンピューター名で、もう1つはドライブ名がドライブ文字です。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
    } 


}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.