Geçenlerde bir arkadaşım “her sabah tek tek sunuculara bağlanıp disk doluluğuna bakıyorum” dediğinde, ilk sorduğum şey şu oldu: neden bunu script yapmıyorsun? Sunucu filosunun sağlık durumunu manuel kontrol etmek yerine, otomatik oluşturulan ve gelen kutunuza düşen bir HTML rapor hem zaman kazandırıyor hem de sorunları proaktif olarak fark etmenizi sağlıyor.
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
Buradaki eşik değerlerini (%85 CPU, %90 RAM/disk) olduğu gibi kopyalamayın — her ortam için doğru sayı farklı. 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) baştan önlüyor.
Bir Adım Sonrası
Bu mimari “her şey yolunda mı?” sorusuna her sabah otomatik cevap veren, düşük maliyetli ama yüksek getirili bir otomasyon örneği. İsterseniz bir sonraki adım olarak e-posta yerine bir Teams veya Slack kanalına bildirim gönderecek şekilde de genişletebilirsiniz.