Visitors have accessed this post 379 times.

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

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

Visitors have accessed this post 379 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
array(1) { [0]=> object(WP_Term)#11248 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(27) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(27) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор - Сергей Попов
Часть 1
Предистория
Наверняка, каждый смотрел фильмы про хакеров и задавался вопросом: откуда они знают, какие порты открыты в системе? Или как узнать, какие приложения запущены на сервере, не спрашивая об этом администратора? Вы можете сделать все это и даже больше вместе с небольшим инструментом под названием Nmap....

16
0
4 сентября 2020
Книги и руководства для администратора Linux
array(1) { [0]=> object(WP_Term)#912 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(27) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(27) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Не спешите разочарованно пролистывать. Да, интернет полон подобных подборок. Но наш вариант – 100% рабочий, потому что мы собрали в нем только те книги, которые рекомендуют опытные специалисты, не первый год работающие с операционными системами на базе Linux.

Наши эксперты:

Дмитрий Дунаев – ведущий DevOps-инженер международной компании...

2
0
26 мая 2020
Базовая работа с nix. Каналы
array(1) { [0]=> object(WP_Term)#11248 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(27) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(27) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор — Юрий Изоркин

В предыдущей статье мы познакомились с ОС NixOS. Теперь рассмотрим возможности пакетного менеджера nix. Источником обновления пакетов для менеджера nix служат каналы.

Применение каналов позволяет:

зафиксировать ПО на определенной версии;
использовать устаревшее ПО, например, если какие-либо скрипты не...

2
0
27 ноября 2020