Вирішив поділитися своєю історією. Може навіть комусь стане в нагоді подібне бюджетне рішення всім відомої проблеми.
Коли я був молодий і гарячий і не знав, куди подіти свою енергію, я вирішив трохи пофрілансити. Мені вдалося швидко набити рейтинг і я знайшов пару постійних клієнтів, які попросили підтримувати їхній сервер на постійній основі.
Перше, про що я подумав, це необхідність моніторингу. Вирішив зробити як розумні люди, не винаходити велосипед, а переглянути готові варіанти, такі як Munin або Zabbix. Але відразу виявилося, що Web-версія вимагає хорошого інтернет-з'єднання, особливо якщо відкривати вперше з телефону. Якщо ж ти відпочиваєш на природі далеко від міста, отримати стабільний зв'язок складно. Тому було обрано консольний варіант моніторингу.
Як консольний моніторинг мені добре допоміг 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 через свої шлюзи.
Пошта довго, можуть бути проблеми з доставкою.
Месенджери – треба ставити на телефон, необхідно створювати ботів.
В результаті пошуку був обраний месенджер Телеграм за простоту та зручну програму на телефоні та десктопі.
Створив свого бота за допомогою .
Після цього поклав на сервер кілька скриптів, що відстежують навантаження на сервер (IDL, smartct та ін.l), наявність помилок виду «oom killer», помилки при створенні бекапу та інші операції, які необхідно контролювати.
Скрипти досить прості, написані на bash, наприклад, перевірка LA та повідомлення про перевищення Load Averadge'м кількості ядер на сервері.
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
