У меня есть виртуальная машина Центра обработки данных Windows Server 2012 R2, работающая в Azure.
Недавно, один из моих дисков исчерпал пространство.
Как я могу установить систему уведомления для предупреждения меня, когда один из дисководов испытывает нехватку дискового пространства?
Единственная вещь, которая приходит на ум, состоит в том, чтобы записать powershell сценарий, но я задаюсь вопросом, существует ли лучший способ сделать это, например, через что-то на Диспетчере серверов / Панель инструментов Windows Server? Я не вижу способа сделать это через Azure также.
Спасибо!
Вы можете сделать это за пределами ВМ, вызвав Powershell за пределами ВМ для проверки дискового пространства жесткого диска ВМ. Это хорошая статья об использовании Remote Powershell http://michaelwasham.com/windows-azure-powershell-reference-guide/introduction-remote-powershell-with-windows-azure/
Это прямо здесь сделает вам:
Event ID 2013 (Disk Is At Or Near Capacity) не регистрируется
Чтобы подвести итог, убедитесь, что вы регистрируете предупреждения о дисковом пространстве в журнале событий:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters]
"DiskSpaceThreshold"=dword:0000000a
"LowDiskSpaceMinimum"=dword:00000000
(Вы должны добавить оба эти предупреждения, а не только одно или другое.)
Тогда вы должны прикрепить задачу к событию. И вот немного XML, который вы можете импортировать в планировщик задач, который прикрепит указанную задачу к указанному событию:
<?xml version="1.0" encoding="UTF-8"?>
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.3">
<RegistrationInfo>
<Date>2013-02-05T14:37:17.165247</Date>
<Author>[YourDomain]\[YourUserName]</Author>
<Description>Send an emailed warning when a low disk space event is recorded.</Description>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="System"&gt;&lt;Select Path="System"&gt;*[System[Provider[@Name='srv'] and EventID=2013]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-20</UserId>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<SendEmail>
<Server>smtpServer.YourCompany.co.uk</Server>
<Subject>Low disk space warning on server: [ServerName]</Subject>
<To>Admin@YourCompany.co.uk</To>
<From>noreply@YourCompany.co.uk</From>
<Body>Disk space is running low on server: [ServerName] - please investigate.</Body>
<HeaderFields />
<Attachments />
</SendEmail>
</Actions>
</Task>
Вам нужно отредактировать SMTP сервер и другие переменные в соответствии с вашими потребностями. Это вызовет сообщение электронной почты всякий раз, когда это событие (небольшое место на диске) произойдет на вашем сервере.
Стоит отметить, что по умолчанию Server 2008, 2012 и т.д. должен автоматически генерировать это оповещение на 10%, так что, вероятно, нет необходимости изменять реестр, если только вы не хотите что-то пользовательское вместо 10%.
В качестве альтернативы, вы можете сделать это с помощью Powershell.
$Threshold = 10 #Percent
Foreach($Disk In Get-CimInstance Win32_LogicalDisk | Where DriveType -EQ 3)
{
$PercentFree = [Math]::Round(($Disk.FreeSpace / $Disk.Size) * 100, 1)
If ($PercentFree -LT $Threshold)
{
Send-MailMessage -From $From -To $To -Subject "Low Disk Space on $Servername" -Body "Low Disk Space on $Servername" -SmtpServer $SMTPServer
}
}
Запланируйте это и запустите его через определенный промежуток времени. (Я только что высмеял это, но вы поняли.)