Назад | Перейти на главную страницу

Могу ли я организовать отправку электронного письма, когда диск почти заполнен?

Предыстория: я разработчик, который неохотно «присматривает» за машиной, на которой развернуто мое приложение. Мой заказчик - совершенно отдельная компания, которая платит нам за написание кода для них - у нас нет общих начальников или чего-то подобного. У них есть системные администраторы, но они находятся в другом отделе, и когда они просят о том, что, как я думаю, системные администраторы должны быть в состоянии сделать за них, они не получают того, о чем просили. Это не в моих руках. Затем меня просят написать код для выполнения вещей, которые, как я подозреваю, обученный человек может настроить с помощью нескольких строк PowerShell или отметив что-то в диалоговом окне. Это установка Windows Server 2003 с установленными SQL и IIS.

Это приводит к сегодняшней проблеме: как узнать, что диски заполняются. (Рост базы данных, экспортированные файлы не очищены и тому подобное.) В идеале электронное письмо должно выходить с сообщением: «Диск E находится на уровне abc от xyz (84%)». Это легко сделать? Я точно не хочу писать службу для мониторинга дискового пространства и отправки электронных писем - должно быть, кто-то делал это раньше. Один из дисков на самом деле является подключенным диском, представляющим папку на другом компьютере, чего бы это ни стоило.

Если вы используете Server 2003 R2, у вас есть доступ к инструменту управления ресурсами файлового сервера. Это позволяет создавать квоты каталогов с прикрепленными уведомлениями. Вас могут заинтересовать мягкие квоты, которые не препятствуют добавлению новых данных. Вы можете добавить уведомления, чтобы предупредить вас, когда заранее установленный порог превышен.

Если вы используете Server 2003 без R2, то вы попали в мир инструментов или сценариев внешнего мониторинга.

Хотя многие ответы включают сценарии (и если вы пойдете по этому пути, я также предложу PowerShell), вы также можете выполнять предупреждения с помощью perfmon. Видеть КАК: настроить предупреждение о нехватке дискового пространства с помощью функции журналов производительности и предупреждений в Windows Server 2003

Обратите внимание, что действие, которое вы хотите предпринять, - это запустить powershell или vbscript, чтобы отправить вам электронное письмо (или, возможно, более предпочтительно, выполнить некоторые базовые задачи очистки на диске, а затем отправить электронное письмо с указанием, в чем проблема и какое действие публикации номер)

Для подключенного диска вы должны использовать сценарий. В счетчике WMI используется win32_mappedlogicaldisk. (Get-WmiObject win32_mappedlogicaldisk) .freespace. НАПРИМЕР:

$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) 
    } 
    }

(большая часть предыдущего кода бодро скопирована из squillman, иначе мне пришлось бы вводить этот код самостоятельно)

Это может сработать для вас. Если вы создадите сценарий (я рекомендую Powershell), который проверяет свободное дисковое пространство во время выполнения и отправляет электронное письмо, если оно опускается ниже вашего порогового значения, вы можете создать запланированную задачу на сервере, на котором выполняется этот сценарий. Запланируйте это на каждые X минут, и вы получите решение для мониторинга для бедняков. По общему признанию, он более подвержен ошибкам, чем другие решения, такие как Nagios или диспетчер ресурсов R2, но эй ...

Ваш сценарий Powershell может выглядеть примерно так:

$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)
}

Вы можете использовать этот сценарий PowerShell v2 для отправки электронного письма, когда диск достигает определенного уровня.

Вы можете запланировать это, используя «Запланированные задачи», вам нужно будет изменить детали smtp в нижней части скрипта для вашей сети.

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}

Есть хорошие рекомендации здесь.

Я администрирую довольно большую установку Nagios, но это, вероятно, будет излишним для того, что вам нужно. В любом случае Nagios (ссылка: NRPE_NT) содержит различные плагины, которые делают именно то, что вы запрашиваете. Однако вам все равно придется написать код и, возможно, задание планировщика Windows, чтобы связать все это вместе.

До сих пор у меня не было причины;), чтобы исследовать единственный инструмент, который позаботился бы обо всем этом одним махом, поэтому, к сожалению, я не могу указать вам на одну программу.

В зависимости от того, сколько времени вы хотите потратить на это, вы можете использовать простой сервис, например http://monguard.com что просто делает недорогую модель Saas подходом к простому системному мониторингу. Несколько кликов - и все готово.

Поскольку они работают в облаке, вам не нужно беспокоиться о брандмауэрах и т. Д. Мы являемся консалтинговой службой, поэтому этот подход отлично подходит для нас, но может не подойти в зависимости от вашей ситуации.