![](https://habrastorage.org/getpro/habr/upload_files/3b0/506/c66/3b0506c6620dbc6cd0731ab8856137f9.png)
Всем привет, в этой статье я хотел бы рассказать о создании бота для мониторинга систем (сайтов) и внутренних сервисов – их доступность/недоступность.
Кому данный бот будет полезен 100%?
Абсолютно всем!
Вы можете мониторить как одну систему, так и хоть 100, получать уведомления в Telegram и оперативно принимать меры по устранению проблем.
Вкратце опишу принцип работы бота. Есть список URL, первый поток бегает по ним и проверяет на доступность, если находит недоступный ресурс – помещает его в список не работающих ресурсов и оповещает нас о недоступности ресурса, временно удаляя неработающий ресурс из списка рабочих. В свою очередь список неработающих систем также мониторится и в случае обнаружения рабочего ресурса – нас оповещают об этом и ресурс, который был в списке неработающих покидает этот список.
Первое что мы делаем – это создаем бота в @BotFather. Придумываем имя и получаем токен. Итак, перейдем непосредственно к коду.
Импортируем нужные библиотеки, telebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на Python. Библиотека threading импортируется для запуска в несколько потоков.
![](https://habrastorage.org/getpro/habr/upload_files/f9f/9d5/d95/f9f9d5d950cce2f21a35995255f60093.jpg)
В этой части кода указываем тайм-ауты для запросов и долгих response, иногда ресурс может отдать ответ за 5 секунд иногда и 30 будет недостаточно. Прописываем интервал пересылки из бота в беседу (можно не делать пересылку в беседу, но тогда придется прописывать user ID, на который будет триггерить бот, иначе любой кто зайдет в бота сможет запустить проверку сначала). И указываем шаблон оповещения доступной системы.
![](https://habrastorage.org/getpro/habr/upload_files/fc5/adf/040/fc5adf0406c14e229199c770834f8895.jpg)
Создаем функцию, которая будет обрабатывать загрузку файлов. Проходимся построчно по .ТХТ файлу, помещая все значения в список, прописываем кодировку (можно указать кодировку в .ТХТ, но лучше в коде, так как часто файлы меняются и этот момент забывается, либо некорректно воспроизводится другими пользователями). Указываем разделитель, по которому будет происходить отсечение значения, вносим сайт в список.
![](https://habrastorage.org/getpro/habr/upload_files/f03/20f/829/f0320f82919035aff04917956b2b2403.jpg)
Переходим непосредственно к checking ресурсов и помещению их в списки (рабочие/нерабочие ресурсы), и оповещению в боте о нерабочих ресурсах.
![](https://habrastorage.org/getpro/habr/upload_files/c15/422/fde/c15422fde6a5fe567af4d4aa4845ed3c.jpg)
И получаем в боте сообщение такого формата:
![](https://habrastorage.org/getpro/habr/upload_files/f59/51e/371/f5951e371ba08affb41557c241846b25.jpg)
В данном блоке check-аются недоступные ресурсы. Поток бегает по списку недоступных систем и оповещает в боте.
![](https://habrastorage.org/getpro/habr/upload_files/45f/4e9/f93/45f4e9f93904059dd2d3c7dcb9ea6f86.jpg)
Оповещение о доступности будет иметь такой вид:
![](https://habrastorage.org/getpro/habr/upload_files/261/990/140/261990140575484fc95e4944c11efad2.jpg)
Опрашиваем серверы Telegram на предмет новых сообщений, не прекращая опрос при получении ошибки.
![](https://habrastorage.org/getpro/habr/upload_files/854/f35/36a/854f3536aa9c340dc54f0b9f29ac7b05.jpg)
Для удобства закинем бота в контейнер Docker.
![](https://habrastorage.org/getpro/habr/upload_files/27a/b4c/787/27ab4c7875522a9d4449cb17b374c13b.jpg)
docker build -t python-docker-checker .
docker run python-docker-checker
И вот бот уже крутится в контейнере.
![](https://habrastorage.org/getpro/habr/upload_files/8fd/dbb/879/8fddbb87999a7990b90a9c8af3fe8562.jpg)
P.S. Помимо систем, можно мониторить и внутренние сервисы, имеющие Status Code.
Комментарии (9)
badcasedaily1
02.04.2023 06:30+3Посты с кодом лучше оформлять используя окно для ввода кода, а не картинки
Ouozen
02.04.2023 06:30+1Еще нужно предусмотреть защиту от большой задержки в сети. Иногда сервисы доступны, но при высокой нагрузке может быть долгое ожидание, которое выйдет за таймаут. Поэтому я бы добавил кусок кода который повторно обращается к сайту который он пометил как нерабочий. Иначе можно всю личку заспамить, и тогда это будет бесполезный бот для любой IT-компании.
Dannyk1 Автор
02.04.2023 06:30Дополнительные проверки тоже предусмотрены, с определенными интервалами, то о чем вы пишите это всплывает в период тестирования - тестирование данный бот прошёл
user18383
02.04.2023 06:30Рекомендую обратить внимание на библиотеку pyrogram. Здесь описано почему она лучше чем обычный bot api
Она асинхронная, использует mtproto без прослойки в виде http и вообще очень крутая. Она также не имеет ограничений на размер файла и некоторые другие, которые присутствуют в обычном bot api
trabl
02.04.2023 06:30Всё верно, недавно пытался написать бота используя telethon и столкнулся с кучей ограничений. На pyrogram всё взлетело из коробки.
MrTheFirst
02.04.2023 06:30+1Тоже своего бота поднимал, потребовалось расширить функционал для ведения истории и отслеживания сертификатов. На это нужно время разработчика. Поднял uptime-kuma, подключил уведомления в телеграм, отлично справляется с задачей, развертывания 5-10 минут
saboteur_kiev
02.04.2023 06:30+2Почему не настроить уведомления в телеграм в любой уже существующей удобной системе мониторинга?
Зачем всего-лишь из-за отправки уведомлений в телегу нужно писать свой обход урл-ов, причем с примитивной логикой, в то время как в мониторинге можно указать все - и интервалы, и пулл чеки и чеки не только URL а чего угодно (базы данных, брокеры, процессы, свободное место)...А вместо целого кода с ботом, достаточно просто curl для отправки сообщения в нужный чатик из мониторинга, или уже готовый плагин.
TouristPlay
02.04.2023 06:30+2Однажды делал бота в компании для автоматизации системы Jira
Суть ее состояла в том, что она делила сотрудников на роли
1. Разработчик
2. Тимлид
3. Менеджер
4. Руководитель отдела
5. Руководитель производства
В зависимости от роли, приходили структурная информация с джиры
Одним из примеров можно предоставить общее сообщение для всех пользователей, которое показывает задачи просроченные по времени и задачи, которые ушли в перерасход по времени
Задачи по которым есть просрочка или перерасход по часамUME-282 - К выполнению
Просрочка - 25.01.2023
UME-97 - В работе
Перерасход - 522%
Просрочка - 23.01.2023
UME-73 - К выполнению
Перерасход - 161%
Просрочка - 27.12.2022
sic
Если нет какой-то более тонкой системы мониторинга, то вполне рабочий поход. Вот только нужно ещё иметь мониторинг для самого бота, а то, если он молча свалится, то будет ещё хуже, чем без него.