Як я писав свій моніторинг

Вирішив поділитися своєю історією. Може навіть комусь стане в нагоді подібне бюджетне рішення всім відомої проблеми.

Коли я був молодий і гарячий і не знав, куди подіти свою енергію, я вирішив трохи пофрілансити. Мені вдалося швидко набити рейтинг і я знайшов пару постійних клієнтів, які попросили підтримувати їхній сервер на постійній основі.

Перше, про що я подумав, це необхідність моніторингу. Вирішив зробити як розумні люди, не винаходити велосипед, а переглянути готові варіанти, такі як Munin або Zabbix. Але відразу виявилося, що Web-версія вимагає хорошого інтернет-з'єднання, особливо якщо відкривати вперше з телефону. Якщо ж ти відпочиваєш на природі далеко від міста, отримати стабільний зв'язок складно. Тому було обрано консольний варіант моніторингу.

Як консольний моніторинг мені добре допоміг atop і програма для читання логів atop'а - atopsar. Їх вже згадували на habr, atop навіть розібрали, А ось про 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 atop

Atopsar

Разом з 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

Додати коментар або відгук