Реших да споделя своята история. Може дори да бъде полезно на някого подобно бюджетно решение на всеизвестен проблем.
Когато бях млад и буен и не знаех къде да изразходя енергията си, реших да съм малко фрилансър. Успях бързо да си изградя рейтинг и намерих няколко постоянни клиенти, които поискаха да поддържат сървърите им на постоянна основа.
Първото, за което помислих, беше необходимостта от мониторинг. Реших да направя като умните хора, да не изобретявам велосипеда, а да погледна готови варианти, като Munin или Zabbix. Но веднага установих, че уеб версията изисква добро интернет свързване, особено когато се отваря за пръв път от телефон. Ако си на почивка сред природата далеч от града, получаването на стабилна връзка е трудно. Затова избрах конзолен вариант за мониторинг.
В качеството си на конзолен мониторинг, много ми помогна atop и програмата за четене на логовете на atop – atopsar. Те вече бяха споменавани на habr, , но за atopsar почти нищо не беше казано.
Инсталиране
Работата му е много проста, само три команди.
#Centos
yum install atop#Debian/Ubuntu
apt-get install atopСлед това можете да настроите работата на мониторинга според себе си или да използвате настройките по подразбиране.
#Debian/Ubuntu/Centos
/etc/default/atop Стандартен файл:
#cat /etc/default/atop
INTERVAL=60 #Время, через которое создаётся снимок нагрузки в секундах, по умолчанию каждые 10 минут
LOGPATH="/var/log/atop" #Путь до папки хранения логов
OUTFILE="$LOGPATH/daily.log" #Название файла логов за сегодняшний день
Добавяме в автозапуск
#Debian/Ubuntu/Centos
systemctl enable atop Стартираме atop като демон
#Debian/Ubuntu/Centos
systemctl start atop За мързеливите събрах в една команда
#Centos
yum install atop && systemctl enable atop && systemctl start atop#Debian/Ubuntu
apt-get install atop && systemctl enable atop && systemctl start atopAtopsar
Заедно с atop се инсталира и atopsar, удобно конзолно приложение за анализ на бинарни логове, които поддържа демонът atop. Разбира се, можете да четете логовете и с atop, но това не е толкова удобно, ако трябва да захванете голям интервал от време.
Няколко думи за работата на atopsar.
При стартиране на atopsar без ключове се отваря лог за днешния ден и се извежда натоварването на всяко ядро поотделно и реда idl за всички ядра.
Ключовете, които използвам:
-A = да изведа цялата информация от лога
-с = да изведа информация за натоварването на ядрата на процесора, ключ по подразбиране
-m = натоварване на оперативната памет и swap
-d = дискова активност
-O = топ-3 натоварени процеси на CPU
-G = топ-3 натоварени процеси на RAM
-D = топ-3 натоварени процеси на диск
-N = топ-3 натоварени процеси на мрежата
-r = да посоча път до лога, който искате да прочетете, ако трябва да видите натоварването от предишни дни
-b = времето, от когато да започна изхода
-e = времето, на което трябва да завършите извода
-M = създава допълнителна колона в края, в която се маркира критичността на реда (+ има натоварване, * — критично натоварване)
Благодарение на мониторинга можем да разберем причината за неправилното поведение на сървъра по всяко време.
Уведомления
И така, мониторингът на натоварването е наличен, но все пак не предлага възможност за бързо откриване и решаване на проблеми. Нуждаем се от уведомления за възникнал проблем.
Аз самият следя сървърите, така че уведомленията трябва да идват на място, където винаги мога да ги видя и поне малко да реагирам.
Първоначално имаше SMS — бързо, надеждно, безплатно. Но след това мобилните оператори спряха безплатната SMS разпратка през своите шлюзове.
Пощата — бавна, могат да има проблеми с доставката.
Месенджърите — трябва да се инсталират на телефона, необходимо е да се създадат ботове.
В резултат на проучването беше избран месенджърът Telegram заради простотата и удобното приложение на телефона и десктопа.
Създадох своя бот с помощта на .
След това поставих на сървъра няколко скрипта, които наблюдават натоварването на сървъра (IDL, smartct и др.), наличието на грешки от типа „oom killer“, грешки при създаване на резервно копие и други операции, които трябва да се контролират.
Скриптовете са доста прости, написани на bash, например, проверка на LA и уведомление за превишаване на Load Average на броя ядра на сървър.
if [ ${LA[0]} -gt 2000 ] || [ ${LA[1]} -gt 3000 ] || [ ${LA[2]} -gt 4000 ]
then
wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text=На сървъра $ip LA $LAd"
wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text=`top -b -n 1 | grep Cpu`"
wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text=Топ 5 процеси `top -b -n 1 | grep -A 5 'PID USER' | tail -5`"
fiПростотата на синтаксиса предлага много варианти за употреба (и всеки, който малко разбира от програмиране, може да напише/допише).
Единственият нюанс — ако сървърът е в Русия (и нямате IPv6 на сървъра), е необходимо да се ползва прокси. За това в началото на скрипта трябва да запишете реда за свързване с проксито:
export https_proxy=http://логин:парола@IP.адрес:портТова не е краят
Вие спокойно се разхождате из между планините с раница на гърба, почивате от цивилизацията и изведнъж телефонът, ловейки случайно връзка, ви изпраща уведомление за проблем на вашия сървър. Какво да правите? Безмътната ви атмосфера изчезва като с вятър. Да звъните на съпругата си и да диктувате команди? Ха-ха!
Трябваше бързо да измисля някакъв начин за бързо оправяне на възникналите проблеми без добра интернет връзка. Тук отново ми помогна мессенджърът (#телеграммживи). Научих бота си да общува само с мен, игнорирайки всички останали. Сега, заедно с уведомлението за проблема, получавам малко повече данни, които ми помагат да разбера кой е източникът на проблема и мога да опитам да го реша дистанционно. Достатъчно е просто да напиша съобщение на бота, да повдигна телефона, за да изпратя това съобщение и вуаля – ботът се заема с вашата работа. По този начин мога например да убия някой нежелан процес, да рестартирам демон, да блокирам IP и други.
Тук преместих бъдещите нужни заявки от клиенти, например, спешно възстановяване на пароли на потребители (защото "Аааа, не можем да влезем на сървъра, губим милиони!"). Търсене на потребител, който има достъп до нужната папка, включване и изключване на сайта и други. Разбира се, постоянно доразвивам функционалността на бота, тъй като фантазията на клиентите понякога предлага неочаквани и непредвидени заявки. Но основните са доволни.
Има и версия за VK, но я няма тъй добре.
Сега спокойно пътувам и изследвам този свят, без да се страхувам, че нещо ще се повреди, а аз няма да мога да го разбера или да го поправя.
Източник: habr.com
