Follow
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.

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

  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

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.

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.