web-dev-qa-db-ja.com

ドライブがほぼいっぱいになったときに送信される電子メールを手配できますか?

背景:私は、アプリケーションがデプロイされているマシンをしぶしぶ「世話する」開発者です。私の顧客は完全に別の会社であり、彼らのためにコードを書くために私たちにお金を払っています-私たちには共通のボスやそのようなものはありません。彼らにはシステム管理者がいますが、彼らは別の部門にいて、システム管理者が彼らのためにできるはずだと思うようなことを彼らが求めたとき、彼らは彼らが求めたものを手に入れません。それを実現するのは私の手に負えません。次に、実際の訓練を受けた人が数行のPowerShellを使用するか、ダイアログで何かにチェックマークを付けることでセットアップできると思われることを行うためのコードを作成するように求められます。これは、SQLとIISがインストールされたWindowsServer2003のセットアップです。

これが今日の問題につながります。ドライブがいっぱいになっていることを知る方法です。 (データベースの増大、エクスポートされたファイルがクリーンアップされていない、そのようなこと。)理想的には、「ドライブEはxyz(84%)のabcにあります」という電子メールが送信されます。それは簡単ですか?ディスク容量を監視してメールを送信するサービスを作成したくないのは確かです。誰かが以前にこれを行ったことがあるはずです。ドライブの1つは、実際には、その価値がある別のマシン上のフォルダーを表すマップされたドライブです。

3
Kate Gregory

回答の多くにはスクリプトが含まれていますが(そのルートに進む場合は、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 = "[email protected]" 
        $to = "[email protected]" 
        $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から元気にコピーされました。そうでなければ、このコードを自分で入力する必要がありました)

2
Jim B

Server 2003 R2を実行している場合は、ファイルサーバーリソース管理ツールにアクセスできます。これにより、通知が添付されたディレクトリクォータを作成できます。新しいデータの追加を妨げないソフトクォータに興味があるでしょう。事前設定されたしきい値を超えたときに警告する通知を追加できます。

R2を使用せずにServer2003を使用している場合は、外部の監視ツールまたはスクリプトの世界にいます。

2
sysadmin1138

これはあなたのために働くかもしれません。実行時に空きディスク容量をチェックし、しきい値を下回った場合に電子メールを送信するスクリプト(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 = "[email protected]"
    $to = "[email protected]"
    $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)
}
1
squillman

このPowerShellv2スクリプトを使用して、ドライブが特定のレベルに達したときに電子メールを送信できます。

「スケジュールされたタスク」を使用してスケジュールすることができます。ネットワークのスクリプトの下部にある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="[email protected]"
# What address does the email Come From
$From="[email protected]"

get-wmiobject win32_logicaldisk -filter "DriveType=3" -computer $server | foreach-object {DispDisk}
1
Gary Fawcett
1
Juan Tarquino

いくつかの良いものがあります ここでの推奨事項

私はかなり大規模なNagiosセットアップを管理していますが、これは必要なものにはやり過ぎでしょう。いずれにせよ、Nagios(参照:NRPE_NT)には、要求していることを正確に実行するさまざまなプラグインが含まれています。ただし、すべてを結び付けるには、コードと、場合によってはWindowsスケジューラジョブを作成する必要があります。

私は今まで;)、一挙にすべてを処理する単一のツールを調査する理由がなかったので、残念ながら、単一のプログラムに向けることはできません。

0
Matt

それに費やしたい時間に応じて、 http://monguard.com のような単純なサービスを使用できます。これは、単純なシステム監視に対して安価なSaaSモデルアプローチを実行するだけです。数回クリックするだけで、稼働状態になります。

クラウド上で動作するため、ファイアウォールなどを気にする必要はありません。私たちはコンサルティングショップなので、このアプローチはうまくいきますが、状況によっては適さない場合があります。

0
Matt