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

23

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?

    
por DaBeeeenster 08.05.2011 / 12:28

7 respostas

12

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

Scripts de monitoramento do Amazon CloudWatch para Linux : link

    
por 11.02.2013 / 23:56
4

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

  • Cria um trabalho que é executado uma vez por dia às 00:00.
  • O Cron manipula automaticamente o email do administrador do sistema com a saída de tarefas. Este trabalho só produz saída se houver um erro ou se o espaço em disco estiver baixo
  • O comando 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.
  • O comando df testa o espaço livre no sistema de arquivos /
  • O grep fornece apenas a linha de saída de que você precisa, em vez dos cabeçalhos df .
  • O awk get é apenas a quarta coluna na saída, o número do espaço livre.
  • O && diz para executar o próximo comando somente se o primeiro (o test x -lt y ) retornar verdadeiro.
por 09.05.2011 / 13:58
4

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
    
por 10.05.2011 / 09:47
1

Instruções passo a passo para configurar isso em uma instância do EC2 com o CloudWatch:

link

    
por 08.12.2015 / 17:34
0

Eu uso este script: link

    
por 10.05.2011 / 23:20
0

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.

    
por 17.08.2011 / 01:10
0

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
    } 


}
    
por 28.09.2016 / 19:36