EC2 disk alanını otomatik olarak kontrol etmenin ve azalıyorsa uyarılmanın en kolay yolu?


25

Amazon Linux AMI’nın çalıştırılması. Görünüşe göre CloudWatch boş disk alanı kontrolü yapmıyor. Çok sayıda sunucum var ve ideal olarak her birini bir posta sunucusu, disk alanını kontrol etmek için komut dosyası ile yapılandırmak zorunda kalmak istemiyorum.

Bunu yapmanın daha basit bir yolu var mı?

Yanıtlar:


13

Amazon bu konuda mart 2012'den itibaren senaryolar sunar:

Linux için Amazon CloudWatch İzleme Komut Dosyaları : http://aws.amazon.com/code/8720044071969977


Senaryolar dümdüz ileri görünüyor. Beni endişelendiren şey, bilinen bir çift AWS erişim anahtarına ve sırrına ihtiyaç duyması. Geçici bir çift elde etmenin EC2 örneği rolüne bakıp bakmayacağını veya bunu kendim kodlamak zorunda kalacağımı bilen var mı?
sergiopereira

Kendi soruma cevap vermek için. Evet! Betikler, EC2 örneğinin IAM Rolünü (varsa) kullanacaktır. Yakalama, seçtiğiniz rolün gerekli CloudWatch izinlerine sahip olması gerektiğidir.
sergiopereira

5

EC2 kontrol ve izleme araçlarının size bu verileri vermesi mümkün değildir , çünkü örneklerinizin dosya sistemine SADECE bu örnek tarafından erişilebilir . Hem donanımın temel mimarisi hem de güvenlik modeli bu sınırlamayı gerektirir. Bilgisayarınızın dışındaki bir yazılımın sabit sürücülerinizdeki dosyalara zarar vermesinin ne kadar kötü olacağını düşünün!

İşte cron (zaten çoğu sistemde yüklü) periyodik olarak sizin için bu verileri kontrol etmek için düşük bir anahtar yoludur. Sistemleriniz yine de kök posta bildirimlerini işlemek için minimum gereksinimlere sahip olmalıdır. En azından materyalist bir giden posta aracısına sahip olmanızı ve kök veya yönetici diğer adını yönettiğiniz tüm sistemlerde size iletmek üzere yapılandırmanızı öneririm. Dahil olmak üzere birçok program cronbu yapılandırmayı beklemektedir.

Bunu crontab'ınıza ekleyebilirsiniz:

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

Bunu yıkmak için, bu

  • 00: 00'da günde bir kez çalışan bir iş yaratır.
  • Cron, sistem yöneticisine e-posta göndermeyi işlerin çıktısıyla otomatik olarak işler. Bu iş yalnızca bir hata olduğunda veya disk alanı azsa çıktı üretir
  • testKullanarak basit bir kabuk karşılaştırma yukarı komut setleri -ltaz operatörü ve 1Gb boş alan için sabit değer equivolent.
  • dfKomut üzerinde boş alan testleri /dosya sistemi
  • grepSize çıkış Şimdi çizgiyi alır yerine başlıkları gerekmez dfiçerir.
  • awkOlsun çıktısında sadece dördüncü sütun, boş alan numarası.
  • Bir &&sonraki komutu yalnızca ilk ( test x -lt y) doğru döndürdüğünde çalıştırma diyor .

4

EC2 grubumdaki birkaç sunucuyu kontrol etmem gerektiğinden bir senaryo yazdım. Tek bir satırda her sunucu IP / etki alanı adının listesini içeren bir dosyaya ihtiyaç duyar.

#! /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 için Amazon CloudWatch İzleme Komut Dosyaları", disk kullanımını CloudWatch'a özel ölçümler olarak zorlayabilir. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall

@LurionBurchall bunu bir cevap olarak koyun. IMO, CloudWatch uyarılarını kullanma yeteneği verdiği için doğru cevaptır.
Joe Constant



0

Cron senin arkadaşın. Bu dosyayı /etc/cron.daily dizininize koyun; günde bir kez çalışacaktır:

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

Not: Bu komut dosyası takılı CDROM'ların dolu olduğunu söyleyecektir.


0

Bu, AWS'deki DC'mizde çalışan ve bir sürücü doluysa bir alıcı grubuna e-posta gönderen yazdığım hızlı bir PowerShell betiğidir. 2 sütunlu bir csv alır - bir bilgisayar adı ile bir başlık ve bir sürücü harfi ile bir başlık ile. AWS ortamımızda bir posta sunucumuz yok, bu yüzden SES üzerinden gönderecek şekilde yapılandırdım. İsterseniz, sürücü kullanımından her sık ​​sık bir rapor göndermek için komut dosyasını biraz değiştirebilirsiniz. Buraya göndereceğimi düşündüm, çünkü bulduğum tüm çözümler Linux örnekleri içindi.

$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
    } 


}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.