Всем привет, в этой статье я хотел бы рассказать о создании бота для мониторинга систем (сайтов) и внутренних сервисов – их доступность/недоступность.

Кому данный бот будет полезен 100%?
Абсолютно всем!

Вы можете мониторить как одну систему, так и хоть 100, получать уведомления в Telegram и оперативно принимать меры по устранению проблем.

Вкратце опишу принцип работы бота. Есть список URL, первый поток бегает по ним и проверяет на доступность, если находит недоступный ресурс – помещает его в список не работающих ресурсов и оповещает нас о недоступности ресурса, временно удаляя неработающий ресурс из списка рабочих. В свою очередь список неработающих систем также мониторится и в случае обнаружения рабочего ресурса – нас оповещают об этом и ресурс, который был в списке неработающих покидает этот список.

Первое что мы делаем – это создаем бота в @BotFather. Придумываем имя и получаем токен. Итак, перейдем непосредственно к коду.

Импортируем нужные библиотеки, telebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на Python. Библиотека threading импортируется для запуска в несколько потоков.

В этой части кода указываем тайм-ауты для запросов и долгих response, иногда ресурс может отдать ответ за 5 секунд иногда и 30 будет недостаточно. Прописываем интервал пересылки из бота в беседу (можно не делать пересылку в беседу, но тогда придется прописывать user ID, на который будет триггерить бот, иначе любой кто зайдет в бота сможет запустить проверку сначала). И указываем шаблон оповещения доступной системы.

Создаем функцию, которая будет обрабатывать загрузку файлов. Проходимся построчно по .ТХТ файлу, помещая все значения в список, прописываем кодировку (можно указать кодировку в .ТХТ, но лучше в коде, так как часто файлы меняются и этот момент забывается, либо некорректно воспроизводится другими пользователями). Указываем разделитель, по которому будет происходить отсечение значения, вносим сайт в список.

Переходим непосредственно к checking ресурсов и помещению их в списки (рабочие/нерабочие ресурсы), и оповещению в боте о нерабочих ресурсах.

И получаем в боте сообщение такого формата:

В данном блоке check-аются недоступные ресурсы. Поток бегает по списку недоступных систем и оповещает в боте.

Оповещение о доступности будет иметь такой вид:

Опрашиваем серверы Telegram на предмет новых сообщений, не прекращая опрос при получении ошибки.

Для удобства закинем бота в контейнер Docker.

docker build -t python-docker-checker .

docker run python-docker-checker

И вот бот уже крутится в контейнере.

P.S. Помимо систем, можно мониторить и внутренние сервисы, имеющие Status Code.

Комментарии (9)


  1. sic
    02.04.2023 06:30
    +4

    Если нет какой-то более тонкой системы мониторинга, то вполне рабочий поход. Вот только нужно ещё иметь мониторинг для самого бота, а то, если он молча свалится, то будет ещё хуже, чем без него.


  1. badcasedaily1
    02.04.2023 06:30
    +3

    Посты с кодом лучше оформлять используя окно для ввода кода, а не картинки


  1. Ouozen
    02.04.2023 06:30
    +1

    Еще нужно предусмотреть защиту от большой задержки в сети. Иногда сервисы доступны, но при высокой нагрузке может быть долгое ожидание, которое выйдет за таймаут. Поэтому я бы добавил кусок кода который повторно обращается к сайту который он пометил как нерабочий. Иначе можно всю личку заспамить, и тогда это будет бесполезный бот для любой IT-компании.


    1. Dannyk1 Автор
      02.04.2023 06:30

      Дополнительные проверки тоже предусмотрены, с определенными интервалами, то о чем вы пишите это всплывает в период тестирования - тестирование данный бот прошёл


  1. user18383
    02.04.2023 06:30

    Рекомендую обратить внимание на библиотеку pyrogram. Здесь описано почему она лучше чем обычный bot api

    Она асинхронная, использует mtproto без прослойки в виде http и вообще очень крутая. Она также не имеет ограничений на размер файла и некоторые другие, которые присутствуют в обычном bot api


    1. trabl
      02.04.2023 06:30

      Всё верно, недавно пытался написать бота используя telethon и столкнулся с кучей ограничений. На pyrogram всё взлетело из коробки.


  1. MrTheFirst
    02.04.2023 06:30
    +1

    Тоже своего бота поднимал, потребовалось расширить функционал для ведения истории и отслеживания сертификатов. На это нужно время разработчика. Поднял uptime-kuma, подключил уведомления в телеграм, отлично справляется с задачей, развертывания 5-10 минут


  1. saboteur_kiev
    02.04.2023 06:30
    +2

    Почему не настроить уведомления в телеграм в любой уже существующей удобной системе мониторинга?
    Зачем всего-лишь из-за отправки уведомлений в телегу нужно писать свой обход урл-ов, причем с примитивной логикой, в то время как в мониторинге можно указать все - и интервалы, и пулл чеки и чеки не только URL а чего угодно (базы данных, брокеры, процессы, свободное место)...

    А вместо целого кода с ботом, достаточно просто curl для отправки сообщения в нужный чатик из мониторинга, или уже готовый плагин.


  1. 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