Visitors have accessed this post 2763 times.

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

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

Visitors have accessed this post 2763 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)
Введено символов из возможных
Не отвечать

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

Какая операционная система лучше всего подойдет для работы DevOps?
array(1) { [0]=> object(WP_Term)#11537 (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

Перевод статьи — https://devops.com/which-desktop-os-is-best-for-devops/

Какую операционную систему лучше использовать инженерам DevOps?

Это вопрос, на который нет однозначного ответа. Разговоры о том, какая ОС «лучше», всегда противоречивы.Я не собираюсь отдавать предпочтение одной операционной системе, когда мы говорим о работе DevOps. Но...

4
4
25 декабря 2020
Docker – что это такое?
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(8) ["name"]=> string(6) "Docker" ["slug"]=> string(6) "docker" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(8) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(8) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(8) ["category_count"]=> int(8) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "Docker" ["category_nicename"]=> string(6) "docker" ["category_parent"]=> int(0) } } Docker

Если вы считаете, что докер (англ. docker – портовый рабочий) – это тот, кто грузит контейнеры, вы правы по форме, но не по содержанию. В нашем случае Docker – это действительно удобный интерфейс для работы с контейнерами. Но не только. Давайте разбираться, что это такое и с чем его едят.

Docker – это программная платформа, которая помогает...

2
0
2 октября 2020
Упрощаем работу с оповещениями в zabbix — настраиваем  теги
array(1) { [0]=> object(WP_Term)#11537 (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

Автор - Евгений Генеральчик

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

Как же...

2
0
14 августа 2020