Posso mandar um email para ser enviado quando uma unidade estiver quase cheia?

3

Histórico: Sou um desenvolvedor que relutantemente "cuida" da máquina na qual meu aplicativo é implantado. Meu cliente é uma empresa totalmente separada que nos paga para escrever código para eles - não temos chefes em comum nem nada parecido. Eles têm administradores de sistemas, mas eles estão em um departamento diferente e quando eles pedem o tipo de coisas que eu acho que os administradores de sistemas devem ser capazes de fazer por eles, eles não conseguem o que pediram. Fazer isso acontecer está fora das minhas mãos. Eu então acabo sendo solicitado a escrever código para fazer coisas que eu suspeito que uma pessoa treinada poderia configurar com algumas linhas de powershell ou marcando algo em um diálogo. Esta é uma instalação do Windows Server 2003 com SQL e IIS instalados.

O que leva ao problema de hoje: como saber se as unidades estão ficando cheias. (O crescimento do banco de dados, arquivos exportados não limpos, esse tipo de coisa.) Idealmente, um e-mail iria sair dizendo "A unidade E está em abc de xyz (84%)." Isso é fácil de fazer? Tenho certeza que não quero escrever um serviço para monitorar o espaço em disco e enviar e-mails - alguém deve ter feito isso antes. Uma das unidades é, na verdade, uma unidade mapeada que representa uma pasta em outra máquina para o que vale a pena.

    
por Kate Gregory 02.09.2010 / 21:15

7 respostas

2

Embora muitas das respostas incluam scripts (e, se você seguir esse caminho, eu também sugiro o powershell), você também pode executar o alerta usando o perfmon. Consulte COMO: Configurar um alerta de pouco espaço em disco usando o recurso Logs e alertas de desempenho no Windows Server 2003

Observe que a ação que você deseja executar seria executar um powershell ou vbscript para enviar um e-mail (ou talvez mais preferível, executar algumas tarefas básicas de limpeza na unidade e enviar um e-mail informando qual era o problema e o número da ação post é)

Para a unidade mapeada, você precisa usar um script. No contador WMI a ser usado, está o win32_mappedlogicaldisk. (Get-WmiObject win32_mappedlogicaldisk) .freespace. EG:

$mythreshold = 10GB
Get-WmiObject win32_mappedlogicaldisk | select-object deviceid, freespace | foreach { 
    if ($_.freespace -lt $mythreshold){

        $from = "[email protected]" 
        $to = "[email protected]" 
        $subject = "Low Disk Space!" 
        $body = "Free Space Remaining: " + $_.FreeSpace + "Drive" + $_.deviceid 
        $smtpServer = "smtp.mycompany.com" 
        $smtp = new-object Net.Mail.SmtpClient($smtpServer) 
        $smtp.Send($from,$to,$subject,$body) 
    } 
    }

(muito do código anterior foi copiado alegremente do squillman, caso contrário eu teria que digitar este código eu mesmo)

    
por 03.09.2010 / 05:23
2

Se você estiver executando o Server 2003 R2, terá acesso à ferramenta Gerenciamento de recursos do servidor de arquivos. Isso permite criar cotas de diretório com notificações anexadas. Você estaria interessado nas cotas flexíveis nas quais não impede que novos dados sejam adicionados. Você pode adicionar notificações para alertá-lo quando o limite pré-definido for ultrapassado.

Se você está no Server 2003 sem R2, então você está na terra de ferramentas de monitoramento externas ou scripts.

    
por 02.09.2010 / 21:37
1

Isso pode funcionar para você. Se você criar um script (o Powershell seria minha recomendação) que verifica o espaço livre em disco em tempo de execução e dispara um email se ele ficar abaixo do limite, você pode criar uma tarefa agendada no servidor que executa esse script. Programe para cada X minutos e você terá uma solução de monitoramento para um homem pobre. É reconhecidamente mais propenso a erros do que outras soluções como o Nagios ou o gerenciador de recursos do R2, mas ei ...

Seu script do Powershell pode ser parecido com isto:

$freeSpaceThreshold = 5GB
$computerName = "mycomputer"
$drive = "C:"

$driveData = Get-WmiObject -class win32_LogicalDisk -computername "$computerName" -filter "Name = '$drive'"

if ($driveData.FreeSpace -lt $freeSpaceThreshold)
{
    $from = "[email protected]"
    $to = "[email protected]"
    $subject = "Low Disk Space!"
    $body = "Free Space Remaining: " + $driveData.FreeSpace
    $smtpServer = "smtp.mycompany.com"
    $smtp = new-object Net.Mail.SmtpClient($smtpServer)
    $smtp.Send($from,$to,$subject,$body)
}
    
por 02.09.2010 / 22:45
1

Você pode usar este script do PowerShell v2 para enviar um email quando uma unidade atingir um determinado nível.

Você pode programá-lo usando "Tarefas agendadas", você precisará alterar os detalhes do smtp na parte inferior do script da sua rede.

Function DispDisk
{
$server=$server.toupper()
[float]$tempfloat = ($_.freespace/$_.size)*100
$Body= "'r'n$Server - Drive: $($_.Deviceid) has only $([math]::round(($tempfloat),1))% free" 
$Body+="'r'nTotal Size: $([math]::truncate($_.size / 1gb)) GB"
$Body+="'r'nFree Space: $([math]::truncate($_.freespace /1gb)) GB"
IF ($tempfloat -lt $PercenttoEmail)
{
Send-MailMessage -SmtpServer $SMTPServer -To $To -From $From -Subject "Disk Space Issue $Server $($_.Deviceid) is below $percenttoemail%" -Body $Body
}
}

#
# SMTP Settings, you will need to change these.
#

# The Server you want to check, this is the first arguments (example .\getdspace yourserver) would check the YourServer server
$server = $args[0]
# Percent to send an email, if its below this you should get an email
$PercenttoEmail =15
# Your SMTP Server
$SMTPServer="smtprelay.YourDomain.co.nz"
# Who gets the email
$To="[email protected]"
# What address does the email Come From
$From="[email protected]"

get-wmiobject win32_logicaldisk -filter "DriveType=3" -computer $server | foreach-object {DispDisk}
    
por 02.09.2010 / 23:07
1

Link para o script do powershell:

link

    
por 02.09.2010 / 23:10
0

Há algumas boas recomendações aqui .

Eu administro uma configuração bastante grande do Nagios, mas isso provavelmente será um exagero para o que você precisa. De qualquer maneira, o Nagios (referência: NRPE_NT) contém vários plugins que fazem exatamente o que você está solicitando. No entanto, você ainda teria que escrever algum código e possivelmente um trabalho do agendador do Windows para vinculá-lo.

Eu não tive razão, até agora;), para investigar uma única ferramenta que cuidaria de tudo isso em uma só penada, então infelizmente eu não posso apontar você para um único programa.

    
por 02.09.2010 / 21:35
0

Dependendo da quantidade de tempo que você deseja gastar, você pode usar um serviço simples como o link , que faz uma abordagem de modelo de saa barato monitoramento simples do sistema. Alguns cliques e você está funcionando.

Como eles são executados na nuvem, você não precisa se preocupar com firewalls, etc. Somos uma consultoria, então essa abordagem funciona muito bem para nós, mas pode não ser adequada dependendo da sua situação.

    
por 02.09.2010 / 22:16