Visitors have accessed this post 1654 times.

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

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

Visitors have accessed this post 1654 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
array(1) { [0]=> object(WP_Term)#11665 (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(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

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

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

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

2
0
11 сентября 2020
Как использовать Ceph в кластере Kubernetes — настраиваем deployment с несколькими репликами
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(10) ["name"]=> string(10) "Kubernetes" ["slug"]=> string(10) "kubernetes" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(10) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(4) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(10) ["category_count"]=> int(4) ["category_description"]=> string(0) "" ["cat_name"]=> string(10) "Kubernetes" ["category_nicename"]=> string(10) "kubernetes" ["category_parent"]=> int(0) } } Kubernetes

Автор статьи - Андрей Трошин

День добрый, в этой статье хочу рассказать один из вариантов использования распределенной файловой системы Ceph в кластере Kubernetes.

Собственно, для чего это может пригодиться? Один из важных принципов в кластере Kubernetes - это постоянное распределение подов c репликами вашего приложения по нодам кластера....

2
0
14 августа 2020
Немного о SRE, или многое новое — это хорошо себя зарекомендовавшее старое
array(1) { [0]=> object(WP_Term)#11665 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Автор - Евгений Генеральчик
Что общего у Генри Форда и SRE?
Генри Форд был классный чел. Правда, не знаю, сам он дошел до такой славной мысли или услышал о подходе, когда-то использовавшемся у китайских медиков. Ведь пока в древней варварской Европе самым эффективным лечением считалось кровопускание, в не менее древнем Китае, чтобы медики не...

6
0
27 ноября 2020