Скрипт с отчетом об использовании хранилищ ESXI с отправкой на Email
Добрый день! Уважаемые читатели и гости одного из крупнейших IT порталов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали методы изменения MAC-адреса в Windows. Сегодня я хочу с вами поделиться скриптом, который подключается к вашим серверам Vmware ESXI и анализирует дисковые хранилища на объем занятого и свободного пространства и уведомляет вам по почте. Данный скрипт мы повесим в планировщике заданий и будем каждый день получать отчет.
Описание задачи
У меня есть 40 гипервизоров с установленным VMware ESXi 6.5, к ним подключены дисковые хранилища по FC протоколу, задача ставится таким образом:
- Подключиться к vCenter серверу
- Получить список ESXI хостов
- Получить список датасторов
- Произвести расчет объема датасторов, свободного пространства и количества виртуальных машин на нем
- Сформировать HTML отчет
- Отправить отчет по электронной почте
Содержимое скрипта по анализу дисковых хранилищ ESXI
Get-Module -Name VMware* -ListAvailable | Import-Module
#Подключаемся к vCenter Server используя описанные ниже учетные данные
Connect-VIServer XX.XX.XX.XX -User 'domain\username' -Password 'password'
$Result = @()
$Result += Get-Datastore | Where-Object {$_.Name -notmatch "pag"} | Select-Object -Property Name,
@{N="FreeSpaceGB";E={[Math]::Round($_.FreeSpaceMB/1024,0)}},
@{N="CapacityGB"; E={[Math]::Round($_.CapacityMB/1024,0)}},
@{N="ProvisionedSpaceGB";E={[Math]::Round(($_.CapacityMB - $_.FreeSpaceMB)/1024)}},
@{N="FreeSpace";E={[math]::Round(((100* ($_.FreeSpaceMB/1024))/ ($_.CapacityMB/1024)),0)}},
@{N="NumVM";E={@($_ | Get-VM).Count}} | sort -Property "FreeSpace"
$count = ($Result.Name).count
$countPer = ($Result.FreeSpace -lt "15").count
$HTML = @()
$HTML += @"
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
`$(document).ready(function(){
`$( "td:contains('yellow')" ).css('background-color', '#FDF099'); //If yellow alarm triggered set cell background color to yellow
`$( "td:contains('yellow')" ).text('Warning'); //Replace text 'yellow' with 'Warning'
`$( "td:contains('red')" ).css('background-color', '#FCC' ); //If Red alarm triggered set cell background color to red
`$( "td:contains('red')" ).text('Alert'); //Replace text 'red' with 'Alert'
});
</script>
"@
$HTML += '<style type="text/css">
#Header{font-family:"Calibri", Candara, Segoe, Segoe;border-collapse:collapse;}
#Header td, #Header th {font-size:12px;border:0px solid black;border-collapse: collapse;}
#Header th {font-size:14px;border:0px solid black; text-align:center;padding-top:3px;padding-bottom:3px;background-color:#cccccc;color:#000000;border-collapse: collapse;}
#Header tr.alt td {color:#000;background-color:#EAF2D3;}
</Style>'
$HTML += "<HTML><BODY><Table border=1 cellpadding=0 cellspacing=0 id=Header><caption><font color=green><h1 center""> ~DataStore Utilization Report~ </h1></font>
<h3 center""><font #00008B"", border-collapse: collapse;>Total DataStore Count: $count <---------------------> DataStores with <15% Space Count: $countPer </font></h3>
</caption>
<TR>
<TH><B>DataStore Name</B></TH>
<TH><B>Free Space (GB)</B></TD>
<TH><B>Capacity (GB)</B></TH>
<TH><B>Provisioned Space (GB)</B></TH>
<TH><B>Free Space (%)</B></TH>
<TH><B>VM Count</B></TH>
</TR>"
Foreach($Entry in $Result)
{
if($Entry.FreeSpace -lt "15")
{
$HTML += "<TR #F5A9A9"">"
}
else
{
$HTML += "<TR>"
}
$HTML += "
<TD>$($Entry.Name)</TD>
<TD>$($Entry.FreeSpaceGB)</TD>
<TD>$($Entry.CapacityGB)</TD>
<TD>$($Entry.ProvisionedSpaceGB)</TD>
<TD>$($Entry.FreeSpace)</TD>
<TD>$($Entry.NumVM)</TD>
</TR>"
}
$HTML += "</Table></BODY></HTML>"
####Параметры отправки электронного письма########
$MessageContent = ("$HTML")
$MessageContent+= @"
<br><Font face="calibri">Regards,<br /><br />
<font size="4"><b>VMware Team</b></font><br />
<br>Technical Team<br />
</p>
</font>
"@
## Параметры аутентификации и сервера отправки
$MailParam = @{
To = "ivan@pyatilistnik.org"
From = "monitoring@pyatilistnik.org"
SmtpServer = "relay.pyatilistnik.org"
Subject = "DataStore Usage Report for " + (get-date -Format d/M/yyyy)
body = (" $MessageContent ")
}
## Отправка письма
Send-MailMessage @MailParam -BodyAsHtml
#Отключение от сервера vCenter
disconnect-viserver -confirm:$false
Данный скрипт PowerShell вы можете запускать через планировщик заданий, в удобное для вас время
На выходе вы получите вот такой отчет на почте, где вы увидите:
- Список всех ваших дисковых хранилищ
- Объем хранилищ
- Процент свободного пространства
- Количество виртуальных машин
Как вы можете обратить отчет в очень удобном формате, можно понижать уровень предупреждений. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
спасибо, скрипт крутой ) но почему не установить бесплатную версию veeam ONE и там наглядно мониториться вся вирт.инфраструктура. От свободного места на дисках внутри ВМ, заканчивая температурой процессора и т.д. Настраивается в два клика.