Follow

Sunucu Sağlık Taraması: CPU, RAM ve Disk Doluluk Oranlarını Otomatik HTML Raporuna Çeviren Script Mimarisi

Onlarca sunucunun CPU, RAM ve disk durumunu her sabah otomatik olarak derleyip HTML rapor haline getiren PowerShell script mimarisini paylaşıyorum.
PowerShell Sunucu Sağlık Taraması HTML Rapor makalesi kapak görseli

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

  1. Veri Toplama: Her sunucudan CPU, RAM, disk verisini topla
  2. Değerlendirme: Eşik değerlerine göre durumu renklendir (yeşil/sarı/kırmızı)
  3. 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$4KRİ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.

Comments
Join the Discussion and Share Your Opinion
Add a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Newsletter
Join Design Community
Get the latest updates, creative tips, and exclusive resources straight to your inbox. Let’s explore the future of design and innovation together.