web-dev-qa-db-ja.com

イベントID 2013(ディスクが容量に近い、または容量に近い)がログに記録されない

サーバー(Windows Server 2008 R2 Enterprise、SP1)のディスク容量が少ない場合のアラートを設定しようとしています。これを行うには、イベントID 2013がシステムイベントログに記録されるたびに、タスクスケジューラを介して電子メールをトリガーします。

問題は、イベントID 2013が発生していないように見えることです。 LowDiskSpaceMinimumおよびDiskSpaceThresholdレジストリキーは存在しません。これは、パーティション2013のディスク領域が10%を下回るとイベント2013が発生することを理解しているはずです。

このイベントを、システムドライブ(C :)またはデータドライブ(E :)の3つのサーバーでトリガーしようとしました。

私には3つの理論があります。

  • 2008 R2のデフォルトのしきい値は10%をはるかに下回っています(ただし、テストでこれらのドライブをどれだけいっぱいにするかを考えると、非常に低いはずです)。
  • システムはディスク容量をたまにチェックするだけで、私は十分に長く待っていません
  • 他の何かが原因で、このイベントがログに記録されません。

誰かが私に何か提案を与えることができるならば、私は感謝するでしょう。

2
paulH

私は最終的にこれを機能させました。 LowDiskSpaceMinimumおよびDiskSpaceThresholdレジストリキーを具体的に追加する必要があり、それが機能し始めました。

多くの場合、サーバー監視ソフトウェアをインストールする方がおそらくより良い方法であり、私がシステム管理者であれば、それを一元化してすべてのサーバーを監視することに同意します。しかし、私の懸念は1つのシステムにのみ関係するので、このアプローチは私のニーズに十分に機能します(そして、システム管理者が実際に何かをするのを待つ必要がないことを意味します!!)

他の誰かが同様の何かを設定したい場合は、レジストリ設定をここに示します(DiskSpaceThresholdを10%に設定)。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters]
"DiskSpaceThreshold"=dword:0000000a
"LowDiskSpaceMinimum"=dword:00000000

これがタスクスケジューラジョブです。これは、xmlファイルとして保存してインポートできます。 [ServerName]、[YourDomain]、[YourUserName]とメールアドレスを変更するだけです。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.Microsoft.com/windows/2004/02/mit/task">
  <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>[email protected]</To>
      <From>[email protected]</From>
      <Body>Disk space is running low on server: [ServerName] - please investigate.</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
3
paulH

私は過去にポールのアプローチを使用して成功しました。しかし、今日、私はWindows 2016 Serverで問題に遭遇しました:タスクを保存するときに、電子メールは非推奨の機能であり、Windowsは新しいタスクを保存できないというエラーを受け取りました。

この作業を行うために、私は別のアプローチを見つけました https://www.netwoven.com/2017/04/28/send-an-e-mail-windows-server-2012-task-scheduler-deprecated -feature-solved / 以下のようにPowershellを使用します:

以下のようにPowershellスクリプトを作成し、smtpscript.ps1としてC:\Users\Public\Documentsなどの既知のフォルダーに保存します。

$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = "mail.yourserver.com"
$SmtpClient.Port = 587
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential( "[email protected]", "pw" );
$mailmessage.from = ("[email protected]")
$mailmessage.To.add("[email protected]")
$mailmessage.Subject = “An appropriate subject”
$mailmessage.Body = “An appropriate message body.”
$smtpclient.Send($mailmessage)

そのスクリプトを保存して、上記のようにタスクを作成しますが、[アクション]タブでStart a programを使用して、次の詳細を入力します。

プログラム/スクリプト:powershell.exe

引数を追加(オプション):C:\Users\Public\Documents\smtpscript.ps1

タスクを保存すると、電子メールアラートが届きます。

0
Jeff Mergler