Cara termudah untuk secara otomatis memeriksa ruang disk EC2 dan diperingatkan jika kehabisan?

25

Menjalankan AMI Amazon Linux. Tampaknya CloudWatch tidak memeriksa ruang disk kosong. Saya memiliki sejumlah server dan idealnya tidak ingin harus mengkonfigurasi masing-masing dengan server mail, skrip untuk memeriksa ruang disk, dll.

Apakah ada cara yang lebih sederhana untuk melakukan ini?

DaBeeeenster
sumber

Jawaban:

13

Amazon menyediakan skrip untuk ini pada Maret 2012:

Skrip Pemantauan Amazon CloudWatch untuk Linux : http://aws.amazon.com/code/8720044071969977

qerub
sumber
Skripnya terlihat lurus ke depan. Satu hal yang membuat saya khawatir adalah perlu diketahui kunci akses dan rahasia AWS. Apakah ada yang tahu apakah itu juga akan mencari peran instance EC2 untuk mendapatkan pasangan sementara atau jika saya harus kode itu sendiri?
sergiopereira
Untuk menjawab pertanyaan saya sendiri. Iya nih! Script akan menggunakan Peran IAM dari instance EC2 (jika ada.) Tangkapannya adalah bahwa peran yang Anda pilih harus memiliki izin CloudWatch yang diperlukan.
sergiopereira
5

Tidak ada cara bagi alat kontrol dan pemantauan EC2 untuk memberi Anda data ini karena sistem file instance Anda HANYA dapat diakses oleh instance itu sendiri . Baik arsitektur dasar perangkat keras dan model keamanan menuntut batasan ini. Pikirkan betapa buruknya jika perangkat lunak di luar komputer Anda dapat melihat-lihat file pada hard drive Anda!

Berikut ini adalah cara kunci rendah untuk membuat cron (diinstal pada kebanyakan sistem) memeriksa data ini untuk Anda secara berkala. Sistem Anda harus memiliki persyaratan minimum untuk menangani notifikasi mail root. Saya sarankan memiliki setidaknya agen surat keluar materialistis dan mengkonfigurasi root atau administrator alias untuk meneruskan kepada Anda di semua sistem yang Anda kelola. Banyak program termasuk cronmengharapkan konfigurasi ini.

Anda bisa menambahkan ini ke crontab Anda:

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

Untuk memecahnya, ini

  • Menciptakan pekerjaan yang berjalan sekali sehari pada pukul 00:00.
  • Cron secara otomatis menangani email administrator sistem dengan hasil pekerjaan. Pekerjaan ini hanya menghasilkan output jika ada kesalahan atau jika ruang disk rendah
  • The testset perintah sebuah shell perbandingan sederhana menggunakan -ltkurang dari operator dan nilai equivolent tetap untuk ruang bebas 1Gb.
  • The dfperintah tes ruang bebas pada /sistem file
  • The grepmendapat Anda hanya garis output Anda perlu bukannya header dftermasuk.
  • The awkmendapatkan hanya kolom keempat dalam output, jumlah ruang bebas.
  • The &&mengatakan untuk menjalankan perintah berikutnya hanya jika yang pertama ( test x -lt y) mengembalikan nilai true.
Caleb
sumber
4

Saya menulis sebuah skrip karena saya perlu memeriksa beberapa server dalam grup EC2 saya. Perlu file dengan daftar setiap IP server / nama domain pada satu baris.

#! /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
DaBeeeenster
sumber
2
"Script Pemantauan Amazon CloudWatch untuk Linux" dapat mendorong penggunaan disk ke CloudWatch sebagai metrik khusus. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@ LaurionBurchall harap cantumkan sebagai jawaban. IMO itu adalah jawaban yang benar karena memberikan kemampuan untuk menggunakan peringatan CloudWatch.
Joe Constant
0

Cron adalah temanmu. Masukkan file ini ke direktori /etc/cron.daily Anda dan itu akan berjalan sekali sehari:

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

CATATAN: Skrip ini akan mengatakan bahwa CDROM yang dipasang penuh.

Djangofan
sumber
0

Ini adalah skrip PowerShell cepat yang saya tulis yang beroperasi pada DC kami di AWS dan mengeluarkan email ke sekelompok penerima jika drive penuh. Dibutuhkan csv dengan 2 kolom - satu nama berjudul dengan nama komputer, dan satu judul drive dengan huruf drive. Kami tidak memiliki server surat di lingkungan AWS kami, jadi saya mengonfigurasinya untuk mengirim melalui SES. Anda juga dapat sedikit memodifikasi skrip untuk mengirim laporan setiap kali penggunaan drive sesering mungkin. Hanya berpikir bahwa saya akan memposting ini di sini, karena semua solusi yang saya temukan adalah untuk contoh 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
    } 


}
Benjamin Girard
sumber