Visitors have accessed this post 92 times.

Как и для чего я автоматизировал проверку количества shapshot’ов

3
0
92
28 августа 2020 11:43
Автор: Rebrain Me
DevOps

Visitors have accessed this post 92 times.

Автор — Максим Куприенко

Ищем корень зла

Как-то я столкнулся с интересной задачей. А именно — при работе с системой виртуализации VMware vSphere иногда возникала следующая проблема: для некоторых виртуальных машин выполнение штатных операций (старт/стоп/перезапуск) стало занимать гораздо больше времени, а также падала производительность самой виртуальной машины. Так как диски всех виртуальных машин хранились на одной СХД, а проблема возникала только на части ВМ, то было понятно, что проблема не в СХД. Также мы проверили сервисы, работающие на виртуальных машинах, чтобы убедиться в том, что и они не являются причиной проблем.

Тогда стали детально изучать способы взаимодействия разработчиков с виртуальными машинами и установили, что активно используются snapshot’ы. Ага, уже проще — проверили их количество на всех виртуальных машинах и увидели следующую картинку: на проблемных машинах количество snapshot’ов было больше, чем на беспроблемных. Дальше больше — опытным путем мы вычислили оптимальное количество snapshot’ов для виртуальной машины — 3, то есть если на ВМ более трех snapshot’ов, то возникает вышеописанная проблема.

А почему оно так происходит? Snapshot увеличивается в размере по ходу записи данных. Чем больше размер, тем больше нагрузка на диск. Также при выполнении операций перечитывается вся цепочка snapshot’ов. Соответственно, чем она длиннее, тем больше нагрузка на виртуальную машину.

Вроде бы проблему выяснили, но это не помогло разработчикам, так как они не имели возможности самостоятельно отслеживать виртуальные машины с избыточным количеством snapshot’ов и вынуждены были обращаться за помощью к системному администратору. А это приносило неудобства обеим сторонам. Решать надо было как-то по-другому.

Есть решение!

На сопровождении у нас находилось больше 300 виртуальных машин. Вручную проводить проверки на количество snapshot’ов? Нет. Будем автоматизировать этот процесс. При изучении вопроса была найдена утилита PowerCLI (от редакции — это надстройка к PowerShell, которая помогает управлять виртуальной инфраструктурой при помощи сценариев командной строки).

После этого и появилась идея написать PowerShell-сценарий для проверки количества snapshot’ов и отправки уведомлений на почту заинтересованным лицам.

Ниже приведен основной листинг скрипта:

$localpath=$PWD;
# функция для подключения к vShere
function GetConnection ($vsrv, $user, $pwd)
{
Connect-VIServer -Server $vsrv -User $user -Password $pwd;
};
# функция отправки сообщений
function SendMessage ($contact, $credentional, $bodymessage)
{
Send-MailMessage -From $mail_account -To $contact -Subject "Warning! Snapshot Count  too much" -SmtpServer $mail_server -Credential $credentional -Body $bodymessage;
};
Add-PSSnapin VMware.VimAutomation.Core;
.\credentionals.ps1;
$secpwd = ConvertTo-SecureString $maccount_password -AsPlainText -Force;
$Credantional = New-Object System.Management.Automation.PSCredential ($mail_account, $secpwd);
GetConnection $ViServer $Username $Password
$head = "Critical snapshot count = 3n"; # получаем список файлов проектов с виртуальными машинами foreach ($project in Get-ChildItem -Path $localpath\projects\*) { $sendflag = $false $bodymessage = ""; $projectName = $project.BaseName; # получаем список адресатов $contacList = Get-Content $localpath\techcontacts\$projectName.txt; $i=0 do { $flag = $true; # получаем имя очередной виртуальной машины $vmname = @(Get-Content $project).Get($i); # получаем количество snapshot’ов для виртуальной машины $Count = @(Get-Snapshot -VM $vmname).Count; if ( $Count -gt 3 ) { $body = "Server $vmname have $Count snapshots. There are:";
$message = "";
# получаем массив имён snapshot’ов
$snaps = @(Get-Snapshot $vmname);
$k = 0;
do
{
$snapname = $snaps.Get($k).ToString();
$message = $message + $snapname + "n"; $k ++; } while ($k -ne $Count) $body = $body + $message; $flag = $false; } if (!$flag) { $sendflag = $true $bodymessage = $bodymessage + $body + ""
Write-Output $bodymessage
}
$i ++;
}
while ($i -ne (@(Get-Content $project).Count));
if ($sendflag)
{
$bodymessage = $head + $bodymessage;
foreach ($contact in $contacList)
{
SendMessage $contact $Credantional $bodymessage;
}
}
}

В подключаемом файле credentionals.ps1 хранятся данные для подключения к vcenter и почтовому серверу.
Листинг файла credentionals.ps1:

# указываем адрес vcenter и логин/пароль для подключения
$Global:Username = "";
$Global:Password= "";
$Global:ViServer = "";
# указываем почтовый сервер, логин/пароль пользователя, под которым будем делать рассылку
$Global:mail_server = "";
$Global:mail_account = "";
$Global:maccount_password = "";

Рядом со скриптом должны находиться 2 каталога: projects и techcontacts.
В каталоге projects лежат текстовые файлы, именами которых являются префиксы проектов, внутри — имена виртуальных машин в vSphere.

В каталоге techcontacts лежат текстовые файлы, именами которых являются префиксы проектов, внутри указаны почтовые адреса, на которые будут отправляться письма.

Подводим итог

Нам удалось автоматизировать процесс проверки количества snapshot’ов. В результате, snapshot’ы у нас не копятся, так как ответственным лицам стали приходить почтовые уведомления о необходимости удаления лишних snapshot’ов с указанных виртуальных машин. В нашем случае это привело к уменьшению времени выполнения стандартных операций и повышению производительности виртуальных машин. А еще сократилось время на выяснение причин возникающих проблем и количество обращений к системному администратору.

От редакции

Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN

*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

NMap — часть 2

Часть 2
Автор — Сергей Попов

1 часть статьи
Сканирование портов
Рассказать вам шутку про UDP?
Только она до вас не дойдет.
Изначально Nmap был эффективным средством сканирования портов, и, несмотря на развитие прочего функционала, он им и остается.

Большинство типов сканирования доступны только привилегированным пользователям, потому...

0
0
11 сентября 2020
30 инструментов мониторинга системы Linux, которые должен знать каждый сисадмин

Ищете способы, как контролировать производительность сервера Linux? В большинстве дистрибутивов Linux уже встроены разные инструменты мониторинга. Используя их, можно посмотреть метрики с информацией о системных процессах. Эти инструменты можно использовать для поиска возможных причин возникновения проблем с производительностью. Команды, которые...

0
0
28 мая 2020
Резервное копирование и восстановление ОС Linux

Автор - Максим Рязанов
Предисловие
Резервное копирование и восстановление ОС - базовый навык, которым должен обладать любой системный администратор. Поэтому давайте на примере практической задачи разберем, как это сделать в ОС Linux.

Допустим, что у нас есть ОС, все данные которой хранятся в одном разделе. Эту ОС необходимо мигрировать на...

1
0
28 августа 2020