Sistem/DevOps•7 dk okuma

Sunucu Disk Doluluğu, RAM Tüketimi ve Kritik Servis Kesintilerini Telegram ve Teams Kanalına Bildiren PowerShell Botu

Pahalı SIEM veya monitoring ajanları kurmadan kritik sunucuların C: disk doluluğunu, duran Windows servislerini ve aşırı RAM kullanımını Telegram/Teams botu ile cebinize anlık bildiren PowerShell scripti.

AE

Ahmet Ertekin

02 September 2023

Sunucu Disk Doluluğu, RAM Tüketimi ve Kritik Servis Kesintilerini Telegram ve Teams Kanalına Bildiren PowerShell Botu

Sunucu Disk Doluluğu, RAM Tüketimi ve Kritik Servis Kesintilerini Telegram ve Teams Kanalına Bildiren PowerShell Botu

Bir sistem yöneticisinin en büyük rahatlığı, sistemlerin durumunu öğrenmek için sürekli monitörün başına geçmek zorunda kalmaması; bir sorun çıktığında sistemin yöneticinin cebine mesaj atmasıdır. Ağır ve lisanslı izleme araçlarının olmadığı ortamlarda, PowerShell 7 ve ücretsiz Telegram Bot API (veya Microsoft Teams Webhook) entegrasyonuyla 15 dakikada kurumsal bir erken uyarı sistemi inşa edebilirsiniz.

1. Telegram Bot Token ve Sohbet Kimliği (Chat ID) Alma

  1. Telegram uygulamasında @BotFather araması yapılır ve /newbot komutuyla yeni bir bot üretilir (Örn: HoldingInfraAlertBot).
  2. BotFather size gizli bir erişim anahtarı verir (Bot Token).
  3. IT ekibiyle özel bir Telegram grubu açılır, bot bu gruba yönetici olarak eklenir ve grubun Chat ID'si alınır.

2. PowerShell Sunucu Sağlık Taraması ve Mesaj Formatı

Aşağıdaki betik her 15 dakikada bir çalışarak kritik metrikleri denetler:

$BotToken = "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
$ChatID = "-100123456789"
$TelegramAPI = "https://api.telegram.org/bot$BotToken/sendMessage"

function Send-TelegramAlert {
    param([string]$Message)
    $Payload = @{
        chat_id = $ChatID
        text = $Message
        parse_mode = "HTML"
    } | ConvertTo-Json
    
    Invoke-RestMethod -Uri $TelegramAPI -Method Post -Body $Payload -ContentType "application/json; charset=utf-8"
}

# 1. Disk Doluluk Kontrolü (Boş Alan %10'un Altına Düşerse)
$Disks = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"
foreach ($disk in $Disks) {
    $FreePercent = [math]::Round(($disk.FreeSpace / $disk.Size) * 100, 1)
    if ($FreePercent -lt 10) {
        $AlertMsg = "🚨 <b>DİSK DOLULUK ALARMI!</b>%0A" +
                    "<b>Sunucu:</b> $env:COMPUTERNAME%0A" +
                    "<b>Sürücü:</b> $($disk.DeviceID)%0A" +
                    "<b>Kalan Alan:</b> %$FreePercent ($([math]::Round($disk.FreeSpace/1GB, 1)) GB)%0A" +
                    "<i>Acil müdahale gerekiyor!</i>"
        Send-TelegramAlert -Message $AlertMsg
    }
}

# 2. Kritik Servis Kontrolü (SQL veya Spooler Durmuşsa)
$CriticalServices = @("MSSQLSERVER", "W3SVC", "LanmanServer")
foreach ($svcName in $CriticalServices) {
    $svc = Get-Service -Name $svcName -ErrorAction SilentlyContinue
    if ($svc -and $svc.Status -ne "Running") {
        $AlertMsg = "🔥 <b>KRİTİK SERVİS DURDU!</b>%0A" +
                    "<b>Sunucu:</b> $env:COMPUTERNAME%0A" +
                    "<b>Servis:</b> $svcName ($($svc.DisplayName))%0A" +
                    "<b>Durum:</b> $($svc.Status)%0A" +
                    "<i>Servis otonom yeniden başlatılıyor...</i>"
        Send-TelegramAlert -Message $AlertMsg
        Start-Service -Name $svcName -ErrorAction SilentlyContinue
    }
}

3. Microsoft Teams Entegrasyonu (Alternatif Webhook)

Aynı mantık Teams kanalındaki "Incoming Webhook" bağlayıcısına JSON formatında bir Adaptive Card gönderilerek şirket içi Teams kanalına da entegre edilebilir.

Karşılaşılan Kritik Hatalar ve Çözüm İpuçları

  • Alarm Fırtınası (Alert Fatigue): Disk %9.9'a düştüğünde script her 15 dakikada bir mesaj atarsa ekip mesajları sessize alır. Çözüm: Script bir durum dosyası (alert_state.json) tutmalı; aynı hata için 4 saat boyunca ikinci kez bildirim fırlatmamalıdır.
  • İnternet Çıkışı Kısıtı: Sunucu internete kapalıysa doğrudan Telegram API'sine gidemez. Çözüm: Şirket içi bir proxy sunucu (-Proxy "http://proxy:8080") üzerinden trafiği yönlendirmektir.

Mühendis Notu

Gece saat 03:00'te bir veritabanı diski dolduğunda sabah işe gelip felaketle karşılaşmak yerine, 03:02'de telefonunuza gelen bir Telegram bildirimiyle sorunu yatağınızdan uzaktan çözebilmek gerçek sistem yöneticiliği konforudur.