Sql Server Always On ortamımızda nodelar arası failover cluster senaryosu gerçekleştikçe bu işlemleri bizlere bildirmesi için bir script ihtiyacımız doğdu. SQL üzerinden bu işlemler yapılabiliyor ancak powershell ile ilerlemeyi tercih ettik.
Aşağıdaki scripti task scheculer üzerine ekleyip 10 dakika da bir çalışacak şekilde yapılandırdık.
Scriptimize smtp bilgilerimizi mail alacak ve atacak adres değerlerini düzelterek kullanmayı ihmal etmeyin.
Son 10 dakika içerisinde ilgili Failover Cluster nodları üzerinde 1641 eventid si oluşursa mail atma işlemi gerçekleştirecek. Mail içeriğinde hangi node üzerinde bulunan db ler hangi noda taşınmakta, hangi AO Grup bu taşıma işleminde etkilenmte olduğuna dair bilgileri içerecek şekilde gerçekleştirmektedir. İşlem saati, node bilgisi gibi değerleri içermektedir.
$smtpServer = "10.x.x.x" $smtpPort = 25 $sender = "xxx@onurbabur.com" $recipient = "infra-alert@onurbabur.com" $subject = "Failover Cluster Alert" $startTime = (Get-Date).AddMinutes(-10) $endTime = Get-Date $eventID = 1641 $logName = 'Application' $events = Get-winEvent -filterHashTable @{logname ='Microsoft-Windows-FailoverClustering/Operational'; id=$eventID; StartTime=$startTime; EndTime=$endTime}| ft -AutoSize -Wrap if ($events) { $body = $events | Out-String $smtp = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort) $mailMessage = New-Object System.Net.Mail.MailMessage($sender, $recipient, $subject, $body) try { $smtp.Send($mailMessage) Write-Host "E-posta gönderildi!" } catch { Write-Host "E-posta gönderirken hata oluştu: $_.Exception.Message" } } else { Write-Host "Belirtilen filtrelerle uyumlu olay bulunamadığından e-posta gönderilmedi." }