4 votes

Puis-je faire en sorte qu'un courriel soit envoyé lorsqu'un disque est presque plein ?

Le contexte : Je suis un développeur qui, à contrecœur, "s'occupe" de la machine sur laquelle mon application est déployée. Mon client est une entreprise totalement distincte qui nous paie pour écrire du code pour elle - nous n'avons pas de patron en commun ni rien de tel. Ils ont des administrateurs système, mais ils sont dans un département différent et lorsqu'ils demandent le genre de choses que, selon moi, les administrateurs système devraient pouvoir faire pour eux, ils n'obtiennent pas ce qu'ils ont demandé. Je ne peux pas faire en sorte que cela se produise. On me demande alors d'écrire du code pour faire des choses qu'une personne réellement formée pourrait mettre en place avec quelques lignes de powershell ou en cochant quelque chose dans une boîte de dialogue. Il s'agit d'une configuration Windows Server 2003 avec SQL et IIS installés.

Ce qui nous amène au problème d'aujourd'hui : comment savoir que les disques sont pleins. (L'idéal serait d'envoyer un e-mail disant "Le lecteur E est à abc de xyz (84%)". Est-ce facile à faire ? Je n'ai certainement pas envie d'écrire un service pour surveiller l'espace disque et envoyer des e-mails - quelqu'un a dû le faire avant. L'un des lecteurs est en fait un lecteur mappé représentant un dossier sur une autre machine pour ce que cela vaut.

2voto

sysadmin1138 Points 129885

Si vous utilisez le serveur 2003 R2, vous avez accès à l'outil de gestion des ressources du serveur de fichiers. Celui-ci permet de créer des quotas de répertoire auxquels sont associées des notifications. Les quotas souples vous intéressent car ils n'empêchent pas l'ajout de nouvelles données. Vous pouvez ajouter des notifications pour vous alerter lorsque des seuils prédéfinis sont franchis.

Si vous êtes sur Server 2003 sans R2, alors vous êtes au pays des outils de surveillance externes ou des scripts.

2voto

Rob Howard Points 636

Bien que la plupart des réponses incluent l'utilisation de scripts (et si vous choisissez cette voie, je vous suggère également d'utiliser powershell), vous pouvez également effectuer des alertes en utilisant perfmon. Voir COMMENT : Configurer une alerte de faible espace disque à l'aide de la fonction Journaux et alertes de performance de Windows Server 2003.

Notez que l'action que vous souhaitez entreprendre serait d'exécuter un powershell ou un vbscript pour vous envoyer un e-mail (ou, ce qui est peut-être plus préférable, d'effectuer quelques tâches de nettoyage de base sur le disque, puis d'envoyer un e-mail indiquant la nature du problème et le numéro de l'action ultérieure).

Pour le lecteur mappé, vous devez utiliser un script. Dans le compteur WMI à utiliser est win32_mappedlogicaldisk. (Get-WmiObject win32_mappedlogicaldisk).freespace. EG :

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

        $from = "myaddr@mycompany.com" 
        $to = "myaddr@mycompany.com" 
        $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) 
    } 
    }

(une grande partie du code précédent a été joyeusement copiée de Squillman car sinon j'aurais dû taper ce code moi-même)

1voto

Warren Blanchet Points 881

Cela pourrait marcher pour vous. Si vous créez un script (Powershell serait ma recommandation) qui vérifie l'espace disque libre au moment de l'exécution et envoie un e-mail s'il tombe sous votre seuil, vous pourriez créer une tâche planifiée sur le serveur qui exécute ce script. Planifiez-la toutes les X minutes et vous obtenez une solution de surveillance pour les pauvres. Il est vrai qu'elle est plus sujette aux erreurs que d'autres solutions comme Nagios ou le gestionnaire de ressources de R2, mais bon...

Votre script Powershell pourrait ressembler à quelque chose comme ceci :

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

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

if ($driveData.FreeSpace -lt $freeSpaceThreshold)
{
    $from = "myaddr@mycompany.com"
    $to = "myaddr@mycompany.com"
    $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)
}

1voto

Gary Fawcett Points 108

Vous pouvez utiliser ce script PowerShell v2 pour envoyer un e-mail lorsqu'un lecteur atteint un certain niveau.

Vous pourriez le programmer en utilisant "Tâches planifiées", vous devrez modifier les détails smtp en bas du script pour votre réseau.

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="You@YourDomain.co.nz"
# What address does the email Come From
$From="service.desk@YourDomain.co.nz"

get-wmiobject win32_logicaldisk -filter "DriveType=3" -computer $server | foreach-object {DispDisk}

1voto

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X