понедельник, 28 июля 2014 г.

Мониторинг служб Windows в SCOM

1) Необходимо создать группу серверов, на которых необходимо мониторить нужную службу. В меню Authoring, выделить Groups, нажать кнопку "Create new group".
2) Назвать группу осознанным именем, в management pack выбрать services.
3) Добавить необходимые сервера и создать группу.
4) В меню Authoring, выделить  Windows Service, нажать кнопку "Add Monitoring Wizard".
5) Выбрать Windows Service из меню
6) Дать осознанное название и выбрать "services" в management pack
7) Задать имя службы с нужного сервера и выбрать группу, которую создали ранее в Targeted group
8) Создать монитор. При желании остановить некритичную службу и проверить работу монитора (как правило срабатывает через 5-10 минут)

Мониторинг доступности виртуальных серверов Xen в Citrix provisioning console при помощи powershell

В Citrix provisioning console есть несколько виртуалок. Нужно мониторить доступность каждой из них.

Сделаем скрипт на powershell, причем его будем запускать удаленно, на удаленной машине.

На удаленной машине запустить powershell от имени администратора и выполнить команды:
get-service winrm - чтобы была запущена
Enable-PSRemoting –force

Далее подключим mcli для PVC:
В командной строке выполняем
32bits
“C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”
64bits:
“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”

Проверим, что связка powershell - Citrix provisioning console работает:

Добавим
Add-PSSnapin -Name McliPSSnapIn

Теперь команда, которая проверяет статус сервера в Citrix provisioning console (1 - активен, 0 - неактивен)
mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active

Далее создаем скрипт на нашей машине (создаем сессию, выполняем проверку, завершаем сессию).

$client_sess = New-PSSession -ComputerName name_of_my_remote_pc

Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}

$res = Invoke-Command -session $client_sess {mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active}

Remove-PSSession $client_sess



Теперь полный скрипт:
В файле Servers.txt находится список серверов, которые мы должны мониторить в Citrix provisioning console. В каждой строке один сервер. Пробегаем каждый сервер в файле и в Citrix
provisioning console, если все доступны, то высылаем письмо на почту, что все ок, иначе - шлем письмо с ошибкой.

$EmailFrom = “from@yourmail”
$EmailTo = “to@yourmail”

$Encoding = [System.Text.Encoding]::UTF8
$SmtpServer = “10.x.x.x”
 [string]$Encoding="utf-8"
 $messageParameters = @{                      
Encoding = [System.Text.Encoding]::GetEncoding($Encoding)
            }

$client_sess = New-PSSession -ComputerName name_of_my_remote_pc
Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}

$count = 0
$f = "C:\Servers.txt"
$file = get-content $f
$sum_str = $file.length
$xx = ""
$text = ""

for ($i = 0; $i -le ($sum_str - 1); $i++) {
        $xx = $file[$i]

$res = Invoke-Command -session $client_sess -scriptblock { param($xx)  mcli-Get DeviceInfo -p deviceName=$xx -f active} -ArgumentList $xx

    if($res -match "active: 1") {
$text += "Норма: сервер " +$file[$i]+ " активен " +"`n"
    }
    else {
     $count ++
     $text += "Ошибка: сервер " +$file[$i]+ " неактивен " +"`n"
    }
}

if($count -eq 0)
{
    $Subject = "Проверка Citrix Provisioning - норма"
}
else
{
    $Subject = "Проверка Citrix Provisioning - ошибка"
}

Remove-PSSession $client_sess

Try
{
    get-content -Path $f -ErrorAction Stop
    Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
}
Catch
{
    $Subject = "Проверка Citrix Provisioning - ошибка"
    $text += "`n `n"+"Что-то не так"
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
    Break
}