Отчет о выполнении бэкапов Veeam Backup

A. Vasiliev рассказал нам, как он борется с множеством серверов Veeam Backup.

Виртуальная инфраструктура нашей организации распределена по 40 филиалам в различных городах. Соответственно, в каждом городе имеется свой сервер. Однажды, мы озадачились проблемой сбора данных о результатах выполнения бэкапа в консолидированном виде.

E-mail оповещение с каждого сервера не подходит. Слишком много ненужной информации и будет приходить столько e-mail, сколько задач по всем нашим серверам, то есть как минимум 40 штук. Поднимать ради простого отчета Enterprise сервер тоже не хотелось, к тому же его отчет не совсем то, что мы хотели видеть.

Было принято решение написать центральный скрипт мониторинга, который бы опрашивал все серверы бэкапов и выдавать консолидированную красивую картинку. С задачей успешно справился мой коллега, A.Shabalin. Результат его плодотворной работы ниже.

Собственно сам скрипт:

Script.ps1

param(
$xml_param_file= "VeeamBackupMonitoring.xml",
$smtpServer= "mail"
)

$script= {
function Fun_4{
get-vbrjob | select name, lateststatus, @{Name=»LatestRun»; Expression={(get-vbrjobschedule (get-vbrjob $_.name)).latestrun}}
}

function Fun_5{
get-vbrjob | select name, @{Name=»LatestStatus»; Expression={$_.info.lateststatus}}, @{Name=»LatestRun»; Expression={(get-vbrjobscheduleoptions $_).latestrun}}
}

function Def{
Get-process -name «Veeam.Backup.Service» | select @{Name=»Name»; Expression={«Information»}}, @{Name=»LatestStatus»; Expression={$_.ProductVersion}}, @{Name=»LatestRun»; Expression={«You need add this version to script»}}
}

get-pssnapin -registered | add-pssnapin
Get-process -name «Veeam.Backup.Service» | select ProductVersion | foreach-object {
switch ($_.productversion){
«5.0.1.198» {Fun_5}
«5.0.2.224» {Fun_5}
«5.0.2.230» {Fun_5}
«4.1.1.105» {Fun_4}
«4.1.0.96» {Fun_4}
«4.0.0.80» {Fun_4}
default {Def}
}
}
}

$xml_param= [xml](Get-Content $xml_param_file)

$xml_param.root.item | foreach-object{

$body= «»
$stat_war= 0
$stat_err= 0
$stat_all= 0
$stat_ic_error= 0
$_.host | foreach-object{
$body += «n$_
$IC_error = «»
$jobs = Invoke-Command -ComputerName $_.ToString() -scriptblock $script -errorvariable IC_error

if ($IC_error -ne «») {
$body += «$IC_errorn"
$stat_ic_error ++
}
elseif ($jobs -eq $null) {$body +="Нет заданий
n»}
else {
$jobs | foreach-object {
$body +=»$($_.lateststatus.tostring()): $($_.name), прошлый запуск $(get-date $_.LatestRun -f ‘dd-MM-yy HH:mm:ss’)n"
$stat_all++
if($_.lateststatus.tostring() -eq "Failed") {$stat_err ++}
if($_.lateststatus.tostring() -eq "Warning") {$stat_war ++}
}
}
}

if (($stat_err + $stat_war + $stat_ic_error) -eq 0) {
$subject = "Всё OK,ошибок нет"
$mail ="Любимый город может спать спокойно ...
nn"
}
else
{$subject = "VeeamBackup: ошибок - $stat_err, предупреждений - $stat_war из $stat_all"
if ($stat_ic_error -ne 0) {$subject +=", ошибок соединения - $stat_ic_error"}
$mail = "Ошибки резервного копирования VeeamBackup.
nn"
}

$mail += $body
$footer = "
n`n» + $(hostname) + »                         From RUSSIA with love»
$mail += $footer

$_.email | foreach-object {
send-mailmessage -to (‘Administrator <‘ + $_ + ‘>’) -from ‘VeeamBackup monitoring<script@domain.ru>’ -body $mail -subject $subject -smtpServer $smtpServer -Encoding ([System.Text.Encoding]::UTF8)
}
}

И файл параметров к нему:

VeeamBackupMonitoring.xml
<root>
<item>
<email>mail@domain.ru</email>
<host>perm-bckp-01</host>
<host>backup.oren</host>
<host>ulsk-bckp-01</host>
</item>
</root>

Как вы заметили, используется функционал Powershell Remoting (WinRM), который, соответственно, необходимо включить и настроить на серверах бэкапов:
Winrm qc –q

Особо пытливые умы заметили наличие оператора switch с перечислением возможных версий Veeam. Все потому, что разработчики Veeam переписали интерфейс оснастки powershell для версии 5. На 6-ой версии работа скрипта еще не проверялась.

P.S. Кстати, классная идея использовать в качестве файла параметров для скриптов powershell файл xml, который прекрасно разбирается в коде левой задней пяткой:
$xml_param = [xml](Get-Content $xml_param_file)

И на выходе получается объект, свойствами которого являются указанные параметры.

Отчет о выполнении бэкапов Veeam Backup: 1 комментарий

  1. Что делает поиск… Ничто не забыто! )))
    Приветствую!
    а не приходилось ли вам задаваться таким вот вопросом:
    как одним взглядом оценить ЧТО и КОГДА (во сколько) запланировано бэкапить?
    Вот в виде простого такого отчёта:
    — хх: хх
    — хх: хх
    — хх: хх
    Безусловно, приветствуются всяческие изыски (диаграмма Ганта и т.п.),
    но и такой минимум — гут.
    Проблема в том, что кроме VEEAM BACKUP & REPLICATION™ у нас ничего, никакого ONE. А бэкапим много всего, листать настройки несподручно, нужен отчёт.
    За любую помощь — гранмерси и вообще брильянт в карму 🙂

Добавить комментарий для Дмитрий Отменить ответ

Ваш адрес email не будет опубликован.