У меня есть виртуальная машина Windows Server 2012 R2 Datacenter, работающая в Azure.
Недавно на одном из моих дисков закончилось место.
Как я могу настроить систему уведомлений, чтобы предупреждать меня, когда на одном из дисков заканчивается дисковое пространство?
Единственное, что приходит в голову, - это написать сценарий PowerShell, но мне интересно, есть ли лучший способ сделать это, например, через что-то в диспетчере сервера / панели инструментов Windows Server? Я тоже не вижу способа сделать это через Azure.
Спасибо!
Это прямо здесь сделает тебя:
Событие с кодом 2013 (диск почти заполнен) не регистрируется
Подводя итог, убедитесь, что вы регистрируете предупреждения о дисковом пространстве в журнале событий:
[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
}
}
Запланируйте это и запускайте с интервалом. (Я просто выдумал это из головы, но вы поняли идею.)
Это можно сделать извне виртуальной машины, вызвав Powershell извне виртуальной машины, чтобы проверить дисковое пространство жесткого диска виртуальной машины. Это хорошая статья о том, как использовать Remote Powershell. http://michaelwasham.com/windows-azure-powershell-reference-guide/introduction-remote-powershell-with-windows-azure/