Собственный info-бот в Телеграм

Лирическое предисловие которое можно не читать:
Мониторинга много не бывает. Даже если все работает нормально — почему бы в этом не убедится лишний раз.
Готовых решений в интернетах кучи, но захотелось мне чего то своего. При том с заделом на универсальность. Что бы использовать то что я напишу для конкретной задачи — на другие — похожие и не похожие
Это моя первая попытка сваять что то своими руками с помощью бота в телеграме, так что прошу сильно ногами не пинать. Я не программист и скорее всего то что я делаю вызывает гомерический хохот у людей, так сказать, в Теме. Но, я пишу, в первую очередь для себя, ну и если мой опыт кому то поможет — то почему нет?

Постановка задачи:
Отправить в телеграм сообщение что на вашем сервере/сайте/ноде что то случилось. Я буду изначально тренироваться на ноде Massa, которая установлена на сервере с Ubuntu, но задача может быть масштабируемая.

Принцип работы:
Система состоит из двух компонентов. Некоторого датчика расположенного на самом сервере и телеграм-бота куда этот датчик будет отправлять сообщение об изменении контролируемого объекта.

Настройка первого компонента — создание собственного info-бота в телеграме

Создаем нового бота в Telegram

Откройте мессенджер Telegram, войдите в вашу учетную запись или создайте новую.
Введите в поле поиска @BotFather и выберите бота. (У официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.)
Хочу сразу оговориться что данный гайд делаю на основе web версии телеграма, и на телефоне картинки могут отличатся. Но последовательность действий останется той же.
Собственный info-бот в Телеграм
Кликаем на него мышкой и переходим в самого бота.
Дальше — нажимаем на кнопку СТАРТ
Собственный info-бот в Телеграм

В ответ вы получите список команд по управлению ботов.
Собственный info-бот в Телеграм

Выберите или напечатайте и отправьте команду /newbot
Собственный info-бот в Телеграм

Придумайте имя своему боту — это то как он будет отображаться визуально. В данном примере я придумал my_nodes_info_bot

Собственный info-бот в Телеграм

Следующим шагом вас попросят придумать никнейм боту. Что бы его можно было найти в Телеграме,
Обязательное условие — ваша придумка должна обязательно заканчиваться тремя конкретными буквами, а именно «bot»
И естественно что имя должно быть уникально.
Если все прошло нормально — бот выдаст вам линк на вашего бота и токен для его управления.
И то и другое нам понадобится ниже по гайду.
Собственный info-бот в Телеграм

Нажимаем на ссылку которая на картинке — и вуаля! Ваш бот добавился к общему списку ваших телеграм каналов.
Дальше напомаживаем боту губки добавляете аватар, описание, etc… Но это уже по желанию.
Собственный info-бот в Телеграм
Теперь нужно узнать ID вашего бота. На этот ID мы будем впоследствии отправлять все сообщения.
Вариантов узнать ID великое множество (да, да я отправляю вас в сторону поисковика). Для самых ленивых — делай как я
Ищем бота с незамысловатым ником @get_id_bot
Запускаем его и видим ID
Собственный info-бот в Телеграм
Можно дать команду /my_id если, вдруг бот не выдал цифры

Собственный info-бот в Телеграм

Итого у нас получилось два необходимых параметра:
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

Собственный info-бот в Телеграм
И в нашего бота прилетает сообщение «Hello World»
Собственный info-бот в Телеграм

На этом самая легкая часть нашего гайда закончена.
Теперь переходим к сложному.

Второе лирическое отступление
Какую именно информацию вы хотите доставить в свой Телеграм-канал ограничивается только полетом  вашей не здоровой фантазии и опытом написания скриптов.
Тут даже сложно ограничится какими то рамками примеров. Ну, банальные параметры типа загрузки 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 из официальных бинарников