Хабрахабр

[Из песочницы] Как я писал свой мониторинг

Решил поделиться своей историей. Может даже кому пригодится подобное бюджетное решение всем известной проблемы.

Мне удалось быстро набить рейтинг и я нашёл пару постоянных клиентов, которые попросили поддерживать их сервера на постоянной основе.
Первое, о чём я подумал, это необходимость мониторинга. Когда я был молод и горяч и не знал, куда девать свою энергию, я решил немного пофрилансить. Но сразу обнаружилось, что Web-версия требует хорошего интернет соединения, особенно если открывать впервые с телефона. Решил сделать как умные люди, не изобретать велосипед, а посмотреть готовые варианты, такие как Munin или Zabbix. Поэтому был выбран консольный вариант мониторинга. Если же ты отдыхаешь на природе вдали от города, получить стабильную связь сложно.

Их уже упоминали на habr, atop даже разобрали, а вот про atopsar ничего почти не рассказали. В качестве консольного мониторинга мне хорошо помог atop и программа для чтения логов 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 — быстро, надёжно, бесплатно.

В результате поиска был выбран мессенджер Телеграмм за простоту и удобное приложение на телефоне и десктопе.

Создал своего бота с помощью botfather.
После положил на сервер несколько скриптов, отслеживающих нагрузку на сервер (IDL, smartct и др.l), наличие ошибок вида «oom killer», ошибки при создании бэкапа и другие операции, которые необходимо контролировать.

Скрипты довольно простые, написанные на bash, например, проверка LA и уведомление о превышении Load Averadge’м количества ядер на сервере.

if [ $ -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, но она как-то не прижилась.

Теперь я спокойно путешествую и изучаю этот мир, не боясь, что что-то там сломается, а я не смогу об этом узнать или исправить.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть