A maneira mais fácil de verificar automaticamente o espaço em disco do EC2 e ser alertado se estiver com pouca carga?

25

Executando a Amazon Linux AMI. Parece que o CloudWatch não verifica se há espaço livre em disco. Eu tenho vários servidores e, idealmente, não quero configurar cada um com um servidor de email, script para verificar o espaço em disco etc.

Existe uma maneira mais simples de fazer isso?

DaBeeeenster
fonte

Respostas:

13

A Amazon fornece scripts para isso em março de 2012:

Scripts de monitoramento do Amazon CloudWatch para Linux : http://aws.amazon.com/code/8720044071969977

qerub
fonte
Os scripts parecem bastante diretos. O que me preocupa é que ele precisa de um par conhecido de chave e segredo de acesso da AWS. Alguém sabe se ele também procurará na função de instância do EC2 obter um par temporário ou se eu mesmo precisarei codificá-lo?
Sergiopereira 13/06/2015
Para responder minha própria pergunta. Sim! Os scripts usarão a função IAM da instância do EC2 (se houver). O problema é que a função que você escolheu deve ter as permissões necessárias do CloudWatch.
Sergiopereira 13/06/2015
5

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 como seria ruim se um software fora do seu computador pudesse vasculhar os arquivos nos seus discos rígidos!

Aqui está uma maneira discreta de fazer com que o cron (instalado na maioria dos sistemas de qualquer maneira) verifique esses dados periodicamente. Seus sistemas devem ter os requisitos mínimos para lidar com as notificações de email raiz de qualquer maneira. Eu recomendo ter pelo menos um agente de correio de saída materialista e configurar o alias raiz ou administrador para encaminhar a você em todos os sistemas que você administra. Muitos programas, inclusive, cronesperam 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

  • Cria um trabalho que é executado uma vez por dia às 00:00.
  • O Cron manipula automaticamente o e-mail do administrador do sistema com a saída dos trabalhos. Este trabalho só produz saída se houver um erro ou se o espaço em disco estiver baixo
  • O testcomando configura uma comparação simples do shell usando o -ltoperador less than e um valor fixo equivalente ao espaço livre de 1Gb.
  • O dfcomando testa espaço livre no /sistema de arquivos
  • A grepvocê fica apenas a linha de saída que você precisa, em vez dos cabeçalhos dfinclui.
  • O awkget é apenas a quarta coluna na saída, o número do espaço livre.
  • O &&comando diz para executar o próximo comando somente se o primeiro (o test x -lt y) retornar verdadeiro.
Caleb
fonte
4

Escrevi um script conforme necessário para verificar vários servidores no meu grupo EC2. Ele precisa de um arquivo com uma lista de cada nome de IP / domínio 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
DaBeeeenster
fonte
2
Os "Scripts de monitoramento do Amazon CloudWatch para Linux" podem inserir o uso do disco no CloudWatch como métricas personalizadas. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@LaurionBurchall, coloque isso como resposta. A IMO é a resposta correta, pois oferece a capacidade de usar alertas do CloudWatch.
Joe Constant
0

Cron é seu amigo. Coloque esse arquivo no 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 indica que os CDROMs montados estão cheios.

djangofan
fonte
0

Este é um script rápido do PowerShell que escrevi que é executado em nosso controlador de domínio na AWS e envia um email a um grupo de destinatários se uma unidade estiver cheia. É necessário um csv com 2 colunas - um nome intitulado com um nome de computador e um drive intitulado com uma letra de unidade. Como não temos um servidor de email em nosso ambiente da AWS, configurei-o para enviar através do SES. Você também pode modificar levemente o script para enviar um relatório de vez em quando sobre a utilização da unidade, se desejar. Apenas pensei em publicar 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
    } 


}
Benjamin Girard
fonte