Лирическое предисловие которое можно не читать:
Мониторинга много не бывает. Даже если все работает нормально — почему бы в этом не убедится лишний раз.
Готовых решений в интернетах кучи, но захотелось мне чего то своего. При том с заделом на универсальность. Что бы использовать то что я напишу для конкретной задачи — на другие — похожие и не похожие
Это моя первая попытка сваять что то своими руками с помощью бота в телеграме, так что прошу сильно ногами не пинать. Я не программист и скорее всего то что я делаю вызывает гомерический хохот у людей, так сказать, в Теме. Но, я пишу, в первую очередь для себя, ну и если мой опыт кому то поможет — то почему нет?
Постановка задачи:
Отправить в телеграм сообщение что на вашем сервере/сайте/ноде что то случилось. Я буду изначально тренироваться на ноде Massa, которая установлена на сервере с Ubuntu, но задача может быть масштабируемая.
Принцип работы:
Система состоит из двух компонентов. Некоторого датчика расположенного на самом сервере и телеграм-бота куда этот датчик будет отправлять сообщение об изменении контролируемого объекта.
Настройка первого компонента — создание собственного info-бота в телеграме
Создаем нового бота в Telegram
Откройте мессенджер Telegram, войдите в вашу учетную запись или создайте новую.
Введите в поле поиска @BotFather и выберите бота. (У официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.)
Хочу сразу оговориться что данный гайд делаю на основе web версии телеграма, и на телефоне картинки могут отличатся. Но последовательность действий останется той же.
Кликаем на него мышкой и переходим в самого бота.
Дальше — нажимаем на кнопку СТАРТ
В ответ вы получите список команд по управлению ботов.
Выберите или напечатайте и отправьте команду /newbot
Придумайте имя своему боту — это то как он будет отображаться визуально. В данном примере я придумал my_nodes_info_bot
Следующим шагом вас попросят придумать никнейм боту. Что бы его можно было найти в Телеграме,
Обязательное условие — ваша придумка должна обязательно заканчиваться тремя конкретными буквами, а именно «bot»
И естественно что имя должно быть уникально.
Если все прошло нормально — бот выдаст вам линк на вашего бота и токен для его управления.
И то и другое нам понадобится ниже по гайду.
Нажимаем на ссылку которая на картинке — и вуаля! Ваш бот добавился к общему списку ваших телеграм каналов.
Дальше напомаживаем боту губки добавляете аватар, описание, etc… Но это уже по желанию.
Теперь нужно узнать ID вашего бота. На этот ID мы будем впоследствии отправлять все сообщения.
Вариантов узнать ID великое множество (да, да я отправляю вас в сторону поисковика). Для самых ленивых — делай как я
Ищем бота с незамысловатым ником @get_id_bot
Запускаем его и видим ID
Можно дать команду /my_id если, вдруг бот не выдал цифры
Итого у нас получилось два необходимых параметра:
token бота: 6116867621:AAEE7WXKR_YAxwsf3k3pydQFdYeob7PqJQk
id чата: 6004109057
Проверяем отправку сообщения через любой браузер, подставляя наши параметры в запрос:
https://api.telegram.org/bot<ТОКЕН>/sendMessage?chat_id=<ID_ЧАТА>&text=Hello%20World
https://api.telegram.org/bot6116867621:AAEE7WXKR_YAxwsf3k3pydQFdYeob7PqJQk/sendMessage?chat_id=6004109057&text=Hello%20World
И в нашего бота прилетает сообщение «Hello World»
На этом самая легкая часть нашего гайда закончена.
Теперь переходим к сложному.
Второе лирическое отступление
Какую именно информацию вы хотите доставить в свой Телеграм-канал ограничивается только полетом вашей не здоровой фантазии и опытом написания скриптов.
Тут даже сложно ограничится какими то рамками примеров. Ну, банальные параметры типа загрузки CPU, места на диске, информация о памяти мы рассматривать не будем.
Готовых примеров в Сети море, и если вам будет интересно с легкостью разберетесь сами.
Мы же будем писать код для тех кому лень напрягать мозги, для кого копи-паст и так в напряг.
Скрипты для мониторинга
Тут нужно понимать что сам скрипт тоже состоит из двух частей. Первая часть — это та часть которая добывает нам нужную информацию. И вторая часть это та которая эту информацию отправит нам в Телеграм-чат. Первая часть всегда разная, вторая остается неизменной.
Мониторинг «живости» ноды Маssа
Поскольку ru-сегмент Сети пытается обмануть судьбу везде и во всем, выбирая что подешевле, то естественно качество страдает. Но мы не ищем легких путей, поэтому будем заниматься садомазохизмом и наблюдать за агонией нашей ноды вместе.
Теперь без нравоучений — Данный скрипт предназначен для отслеживания состояния ноды. И если нода переходит из рабочего состояния в не рабочее или на оборот — вам в Телеграм придет соответствующее уведомление.
(Если говорить на сленге — то сообщение будет приходить если нода «забутстрапилась» или если она, нода, «слетела»)
(На некоторых хостингах, в частности на PQ, была отмечена такая негативная особенность — если в скрипте есть русские буквы — при добавлении его он, скрипт полностью ломается. Так что если это ваш случай, нужно заменить сообщения на русском, на сообщения на английском)
(Блок ниже нужно скопировать предварительно в «Блокнот», не в Word, это важно, и вставить ваши ТОКЕН БОТА и ЧАТ ID, затем вставить сразу весь код, в командной строке, не построчно.)
sudo tee /root/nodesup.sh > /dev/null <<EOF #!/bin/bash # script for sending to Telegram # butstram node Massa # ver.02 TG_BOT_ID="ТОКЕН БОТА" TG_CHAT_ID="ЧАТ ID" key=\$(cat \$HOME/key) node=\$(netstat -ntlp | grep LISTEN | grep 31244 | awk '{print \$1}') if [ -z "\$node" ] && [ "\$key" -eq "1" ]; then /usr/bin/curl --socks5-basic -X POST "https://api.telegram.org/bot\$TG_BOT_ID/sendMessage" -d "chat_id=\$TG_CHAT_ID" -d "text=Ваша нода упала." echo "0" > \$HOME/key elif [ -n "\$node" ] && [ "\$key" -eq "0" ]; then /usr/bin/curl --socks5-basic -X POST "https://api.telegram.org/bot\$TG_BOT_ID/sendMessage" -d "chat_id=\$TG_CHAT_ID" -d "text=Ваша нода поднялась." echo "1" > \$HOME/key fi EOF
Создаем файл где будет хранится предыдущее состояние ноды (0 — лежала, 1 — работала )
printf "0" > /root/key
Добавляем задание демону cron на выполнение файла nodesup.sh каждую минуту
Будем использовать локальный демон. Задание будет находиться в файле nodesup и располагаться в папке /etc/cron.d/
Файл crontab
(Блок ниже нужно скопировать и вставить сразу весь, в командной строке, не построчно.)
printf "SHELL=/bin/bash */1 * * * * root /bin/bash /root/nodesup.sh > /dev/null 2>&1 " > /etc/cron.d/nodesup
С логами решил пока не заморачиватся. Все равно в них ни кто не смотрит. Если кому то будет нужно — добавим.
Устанавливаем curl
curl
— это утилита командной строки для отправки и получения данных по различным протоколам, таким как HTTP, HTTPS, FTP, SMTP и другим. Она позволяет взаимодействовать с серверами и выполнять различные операции, такие как загрузка файлов, отправка запросов, скачивание содержимого веб-страниц и многое другое. Есть вероятность что он уже установлен в системе и данное действие будет избыточным, но выполнив команду ниже вы точно ничего не сломаете
apt install curl
Как удалить скрипт:
Если вы решили что данный скрипт вам не подходит его легко можно удалить
Удаляем сам скрипт:
/usr/bin/rm $HOME/nodesup.sh
Удаляем файл запуска скрипта по времени
/usr/bin/rm /etc/cron.d/nodesup
Самое главное — что же вы должны в итоге увидеть?
Можно обвесить сообщения «рюшечками», например ip или сервера, если у вас нод больше чем одна.
Время сколько она проработала или на оборот была в отключке. Но это уже оставляю на самостоятельную работу.
В данном конкретном гайде отслеживается конкретный порт Massa по которому мы и определяем жива нода или нет. Скажу что практически у каждой ноды есть такой порт. И достаточно поменять номер порта в скрипте и вы сможете отслеживать практически любую ноду
Если у вас есть вопросы по тексту статьи или вы просто хотите «напихать» автору — добро пожаловать в мой телеграм-канал
Что еще почитать по ноде Massa:
Massa — как «прикурится» от ноды друга
Утечка памяти — определяем — перегружаем ноду
Как быстро скачать файлы со своего сервера
Как следить за своими сайтами и нодами
Установка ноды Massa из официальных бинарников