A Amazon fornece scripts para isso a partir de março de 2012:
Scripts de monitoramento do Amazon CloudWatch para Linux : link
Executando o Amazon Linux AMI. Parece que o CloudWatch não verifica o espaço livre em disco. Eu tenho um número de servidores e, idealmente, não quero ter que configurar cada um com um servidor de e-mail, script para verificar o espaço em disco, etc.
Existe uma maneira mais simples de fazer isso?
A Amazon fornece scripts para isso a partir de março de 2012:
Scripts de monitoramento do Amazon CloudWatch para Linux : link
Não há como as ferramentas de controle e monitoramento do EC2 fornecerem esses dados porque o sistema de arquivos de suas instâncias é SOMENTE acessível pela própria instância . Tanto a arquitetura básica do hardware quanto o modelo de segurança exigem essa limitação. Pense em quão ruim seria se um software fora do seu computador pudesse pesquisar os arquivos em seus discos rígidos!
Aqui está uma maneira discreta de fazer o cron (instalado na maioria dos sistemas de qualquer maneira) verificar esses dados periodicamente. Seus sistemas devem ter os requisitos mínimos para lidar com notificações de correio raiz de qualquer maneira. Recomendo ter pelo menos um agente de correspondência de saída materialista e configurar o alias da raiz ou do administrador para encaminhar a você em todos os sistemas que você administra. Muitos programas, incluindo cron
, esperam essa configuração.
Você pode adicionar isso ao seu crontab:
0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"
Para quebrar isso, isso
test
configura uma comparação de shell simples usando o operador -lt
less than e um valor fixo equivolente para o espaço livre de 1 Gb. df
testa o espaço livre no sistema de arquivos /
grep
fornece apenas a linha de saída de que você precisa, em vez dos cabeçalhos df
. awk
get é apenas a quarta coluna na saída, o número do espaço livre. &&
diz para executar o próximo comando somente se o primeiro (o test x -lt y
) retornar verdadeiro. Eu escrevi um script porque precisava checar vários servidores dentro do meu grupo EC2. Ele precisa de um arquivo com uma lista de cada nome de domínio / IP do servidor em uma única linha.
#! /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
Instruções passo a passo para configurar isso em uma instância do EC2 com o CloudWatch:
Eu uso este script: link
Cron é seu amigo. Coloque este arquivo em seu diretório /etc/cron.daily e ele será executado uma vez por dia:
#!/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
NOTA: Este script diz que os CDROMs montados estão cheios.
Este é um script PowerShell rápido que escrevi, executado em nosso controlador de domínio na AWS e que envia um e-mail para um grupo de destinatários, se uma unidade estiver cheia. Leva um csv com 2 colunas - um nome intitulado com um nome de computador, e uma unidade titulada com uma letra de unidade. Nós não temos um servidor de e-mail em nosso ambiente da AWS, então eu o configurei para enviar através do SES. Você também pode modificar ligeiramente o script para apenas enviar um relatório de vez em quando da utilização da unidade, se desejar. Só pensei que eu iria postar isso aqui, já que todas as soluções que encontrei foram para instâncias do 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
}
}