Sunucu filosunun sağlık durumunu her sabah manuel kontrol etmek yerine, otomatik oluşturulan ve gelen kutunuza düşen bir HTML rapor, hem zaman kazandırır hem de sorunları proaktif olarak fark etmenizi sağlar.
Script Mimarisi: Üç Katman
- Veri Toplama: Her sunucudan CPU, RAM, disk verisini topla
- Değerlendirme: Eşik değerlerine göre durumu renklendir (yeşil/sarı/kırmızı)
- Raporlama: HTML formatında derle ve e-posta ile gönder
Veri Toplama
$sunucular = @("SRV-WEB01", "SRV-DB01", "SRV-APP01", "SRV-FILE01")
$rapor = foreach ($sunucu in $sunucular) {
$cpu = Get-CimInstance Win32_Processor -ComputerName $sunucu |
Measure-Object -Property LoadPercentage -Average | Select -ExpandProperty Average
$ram = Get-CimInstance Win32_OperatingSystem -ComputerName $sunucu
$ramKullanim = [math]::Round((($ram.TotalVisibleMemorySize - $ram.FreePhysicalMemory) / $ram.TotalVisibleMemorySize) * 100, 1)
$disk = Get-CimInstance Win32_LogicalDisk -ComputerName $sunucu -Filter "DeviceID='C:'"
$diskKullanim = [math]::Round((($disk.Size - $disk.FreeSpace) / $disk.Size) * 100, 1)
[PSCustomObject]@{
Sunucu = $sunucu
CPU = "$cpu%"
RAM = "$ramKullanim%"
Disk = "$diskKullanim%"
Durum = if ($cpu -gt 85 -or $ramKullanim -gt 90 -or $diskKullanim -gt 90) {"KRİTİK"} else {"Normal"}
}
}
Renkli HTML Rapor Oluşturma
$htmlHead = @"
<style>
table { border-collapse: collapse; width: 100%; font-family: Arial; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #2c3e50; color: white; }
.kritik { background-color: #ffcccc; }
.normal { background-color: #ccffcc; }
</style>
"@
$htmlBody = $rapor | ConvertTo-Html -Head $htmlHead -Property Sunucu, CPU, RAM, Disk, Durum |
ForEach-Object { $_ -replace '(.*?) (.*?) (.*?) (.*?) KRİTİK ', '$1 $2 $3 $4 KRİTİK ' }
Send-MailMessage -From "[email protected]" -To "[email protected]" `
-Subject "Günlük Sunucu Sağlık Raporu - $(Get-Date -Format 'dd.MM.yyyy')" `
-Body ($htmlBody | Out-String) -BodyAsHtml -SmtpServer "smtp.sirket.com"
Zamanlanmış Görev Olarak Otomatikleştirme
$eylem = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scriptler\SaglikRaporu.ps1" $tetikleyici = New-ScheduledTaskTrigger -Daily -At "07:00" Register-ScheduledTask -TaskName "GunlukSunucuSagligi" -Action $eylem -Trigger $tetikleyici -RunLevel Highest
Sahadan Bir Not: Eşik Değerleri Ortama Göre Ayarlayın
%85 CPU eşiği her ortam için doğru olmayabilir — sürekli yüksek CPU ile çalışan bir veritabanı sunucusu için normal olan bir değer, bir dosya sunucusu için kritik bir uyarı olabilir. Eşikleri sunucu rolüne göre özelleştirmek, “yanlış alarm yorgunluğunu” (alert fatigue) önler.
Sonuç
Bu script mimarisi, “her şey yolunda mı?” sorusuna her sabah otomatik cevap veren, düşük maliyetli ama yüksek getirili bir otomasyon örneğidir. Zamanla e-posta yerine bir Teams/Slack kanalına bildirim gönderecek şekilde de genişletilebilir.