Как сделать телеграм бота для мониторинга сайтов
Перейти к содержимому

Как сделать телеграм бота для мониторинга сайтов

  • автор:

Как создать телеграм бота для мониторинга удаленных хостов

Для мониторинга серверов или сетевых устройств существует множество программных решений, многие из которых требует ресурсов сервера для развертывания и знаний по настройке. Но если у Вас один или несколько серверов или маршрутизатор с белым* IP то нет надобности развертывать сложную структуру мониторинга только для того, чтобы проверять, доступен ли сервер или маршрутизатор. Достаточно создать простого телеграм бота, который будет отправлять Вам уведомление в телеграм, если проверяемый IP недоступен (down) и когда снова доступен (up). Сам бот будет работать 24/7 на виртуальном сервере под управлениям операционной системы Linux, с минимальной нагрузкой на ресурсы.
* белый IP адрес — это уникальный IP адрес, выданный на устройство или сервер и доступен из интернета. Такой IP является публичным.

Что необходимо сделать:
1. В Telegram создать бота и приватный канал, в который добавить бота. В канал Вы можете приглашать тех, кто тоже может наблюдать за мониторингом
2. Установить на сервере python3. В этой статье мы рассмотрим размещение бота на виртуальном сервере с ОС Ubuntu 20.04 (можно разместить на любой ОС, на которой можно установить пакет python3)
3. Создать скрипт-файл, прописать в нем IP хостов (серверов или маршрутизаторов), установить период мониторинга и запустить с крипт в режиме работы 24/7.

Приступим к выполнению.

1. Для регистрации нового телеграм бота, необходимо в приложении Telegram найти бот-сервис @BotFather и отправить ему команду регистрации нового бота
/newbot Как создать телеграм бота для мониторинга удаленных хостов - 1 Как создать телеграм бота для мониторинга удаленных хостов - 2
Далее @BotFather запросит название для нашего бота. Ограничений в названии нет, введем, например:
IP monitoring
Как создать телеграм бота для мониторинга удаленных хостов - 3
Теперь необходимо ввести уникальное имя бота в системе Telegram. Название бота должно оканчиваться на _bot. Назовем, для примера
ip_monitoring_super_bot
Как создать телеграм бота для мониторинга удаленных хостов - 4
После этого, @BotFather предоставит нам TOKEN, с помощью которого можно управлять ботом. TOKEN необходимо сохранить, так как он понадобиться нам позже.
Как создать телеграм бота для мониторинга удаленных хостов - 5
Телеграм бот зарегистрирован.

Теперь создадим приватный канал, в который наш новый бот с именем @ip_monitoring_super_bot будет отправлять сообщения.

Для этого в окне чатов программы Telegram нажимаем на иконку создания нового сообщения и выбираем New chanel — Create chanel — придумываем название каналу (например, IP monitoring chanel) — выбираем тип канала Private и добавляем бота @ip_monitoring_super_bot.
Как создать телеграм бота для мониторинга удаленных хостов - 6 Как создать телеграм бота для мониторинга удаленных хостов - 7
Как создать телеграм бота для мониторинга удаленных хостов - 8 Как создать телеграм бота для мониторинга удаленных хостов - 9
В результате мы получаем приватный канал, в который бот @ip_monitoring_super_bot будет отправлять сообщения о состоянии оборудования, которое мы мониторим. Также в этот канал можно пригласить по специальной ссылке любого пользователя телеграм.
Следует обратить внимание и проверить в свойствах канала IP monitoring chanel, добавлен ли бот @ip_monitoring_super_bot в качестве администратора канала. Чтобы перейти в свойства канала, достаточно нажать на названии канала.
Как создать телеграм бота для мониторинга удаленных хостов - 10 Как создать телеграм бота для мониторинга удаленных хостов - 11
Также нам понадобится значение chat_id. Для этого необходимо:
— перейти в чат бота @ip_monitoring_super_bot и отправить сообщение /start (это запустит бота в работу)
— сделать тестовое сообщение (любое) в канале IP monitoring chanel
— перейти в браузере по ссылке https://api.telegram.org/botTOKEN/getUpdates
В нашем примере ссылка будет в таком виде:
https://api.telegram.org/bot5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX/getUpdates
Результат на экране будет таким:
Как создать телеграм бота для мониторинга удаленных хостов - 12Итак, запомним 2 важных значения для управления ботом:
token= 5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX
chat_id = -100185915XXX

2. Подключимся к серверу по SSH (как это сделать)

Проверим установлен ли python3:
python3 —version

Если python3 не установлен (ошибка: -bash: python3: command not found), необходимо установить командой
— для Ubuntu:
apt install python3 -y
— дляCentOS
yum install python3 -y
Дополнительно установим модуль requests:
pip3 install requests

Как создать телеграм бота для мониторинга удаленных хостов - 13

После установки можно проверить еще раз версию. Может быть приблизительно так:

Более подробно об установке python3: Как установить Python 3.10 на Ubuntu 20.04

3. Создадим папку, в которой будет размещен скрипт мониторинга. Для этого выполним команду:
cd && mkdir pingmonitor && cd pingmonitor

Создадим и откроем файл
vim main.py

и разместим в нем скрипт:

#—————————————————-
import os
import requests
import time
#————————-
hostname = [‘8.8.8.8′,’1.1.1.1’]
time_pause = 30
#————————-
def SendMsgToTelegramChanel(msg):
token=»TOKEN»
chat_id = ‘CHAT_ID’
params =
response = requests.get(‘https://api.telegram.org/bot’+token+’/sendMessage’, params=params)
def IsHostAlive(host):
ret = os.system(‘ping -c 2 <> > /dev/null’.format(host))
if ret == 0:
return True
return False
while True:
for i in range(len(hostname)):
file_signal = hostname[i] +’_down’
if IsHostAlive(hostname[i]):
if os.path.isfile(file_signal):
os.remove(file_signal)
SendMsgToTelegramChanel(hostname[i] + ‘ is up’)
#print(hostname + ‘ is up!’)
else:
if not os.path.isfile(file_signal):
open(file_signal,’tw’).close()
SendMsgToTelegramChanel(hostname[i] + ‘ is down’)
#print(hostname + ‘ is down!’)
time.sleep(time_pause)
#————————————————

— в скрипте следует заменить TOKEN и CHAT_ID на сохраненные ранее значения token и chat_id.
— в строке hostname = [‘8.8.8.8′,’1.1.1.1’], вместо IP 8.8.8.8 и 1.1.1.1 укажите IP (или hostname) Вашего сервера или маршрутизатора, которые необходимо мониторить*. IP адреса устройств следует указывать в одинарных кавычках и через запятую (если IP больше чем один)
— значение переменной time_pause = 30, указывает период проверки (в секундах). Не рекомендуется устанавливать меньше 10-15 секунд, особенно, если список проверяемых IP большой.
— не удаляйте отступы строк в скрипте. Это может привести к синтаксической ошибке.

(*)скрипт использует метод проверки через отправку icmp пакетов (ping), по этой причине, следует убедится, что на сервере или маршрутизаторе (которые мониторятся) не блокируются ping-запросы.

Теперь все готово для запука скрипта.
Так как скрипт должен работать 24/7, чтобы его работа не отображалась на основном экране консоли, запустим его в отдельном «окне» с помощью утилиты screen (если не установлена, установите ее. Более подробно: Основы работы с утилитой screen).
Для этого выполним команду:
screen -S pingmonitor

и перейдем к папку с файлом скрипта:
cd && cd pingmonitor

Как создать телеграм бота для мониторинга удаленных хостов - 14

Запустим скрипт в работу командой:
python3 main.py

Чтобы выйти из сеанса и оставить работающим наш скрипт, нажмите Ctrl+a+d. Теперь SSH консоль можно закрывать.
Чтобы подключиться к сеансу с работающим скриптом, подключитесь к серверу по SSH и выполните команду:
screen -r pingmonitor

Как создать телеграм бота для мониторинга удаленных хостов - 15

В случае, если сервер или маршрутизатор станет недоступен и после того, как станет доступным, Вы получите сообщение в канале IP monitoring chanel.

Telegram-bot для мониторинга доступности сайтов

Работая в IT-компании, появилась необходимость отслеживания доступности сайтов. Конечно, есть много разных бесплатных сервисов, но зачастую это сайты, на которых нужно регистрироваться и получать уведомления на почту. Поэтому мы решили сами создать свой telegram-бот на Golang (как никак IT-шники).

Какие команды есть в боте:

/help — помощь
/addsite — добавить сайт для мониторинга
/checksite — проверить сайт на доступность
/checkipaddresses — посмотреть IP-адрес сайта
/listall — просмотр статуса доступности всех сайтов
/deletewatchlist — удалить все сайты из списка
/deletesite — удалить сайт из списка

Как установить?

  1. Запустить бота
  2. Добавить сайты
  3. Мониторить (Бот проверяет сайты на доступность каждую минуту)

Пока что MVP в таком виде, в дальнейшем планируем расширить функционал. Если будут идеи/предложения, welcome.

  • golang
  • телеграм-бот
  • мониторинг сайта
  • telegrambot

Telegram бот, который улучшит любую IT компанию

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

Кому данный бот будет полезен 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.

  • bot
  • telegrambot
  • мониторинг сайта
  • мониторинг сервера
  • мониторинг
  • бот телеграм

23 марта 2022 г. Процесс создания простого бота Телеграм для отслеживания времени

Процесс создания простого бота Телеграм для отслеживания времени

Телеграм есть у каждого. Все мы пользуемся этим мессенджером каждый день — он удобен и прост в использовании, интуитивно понятен, безопасен, и, конечно, все мы любим стикеры. Кроме личной переписки мы используем и групповые чаты — с семьей, с друзьями и коллегами. Кроме нас, обычных пользователей, в telegram есть боты. Они создаются для автоматизации ответов. То есть бот реагирует на конкретные сообщения — команды и выполняет какие-нибудь действия.

Действием может быть как простое приветствие в ответ, так и цепочка определенных запросов — ответов для выполнения конкретной логики.

Я, например, постоянно пользуюсь чат-ботом @vkmusic_bot_news. Это простой бот для поиска и прослушивания музыки. Отправляешь сообщение с названием композиции или именем автора, и бот выдает тебе варианты по твоему запросу. В примере я запросил композицию «show must go on» и получил несколько вариантов на выбор. Выбрав первый вариант я получил трек в следующем сообщении. Удобно, что можно прослушивать прямо в чате с ботом. Таким образом чат-бот может заменить стороннее приложение — проигрыватель на телефоне. Ищешь и сразу же слушаешь.

Таким образом мы подошли к выводу, что телеграм чат-боты довольно удобная и многофункциональная штука. Поэтому в этой статье и пойдет речь о написании простого чат-бота. Для примера я решил сделать трекер времени — простейший пример взаимодействия с telergram api.

Создание простого чат-бота

Для начала нужно создать — зарегистрировать самого бота в telegram. Ищем отца всех ботов @BotFather — тоже бот для регистрации ботов.

Пишем ему, что хотим создать своего чат-бота.

/newbot

Следующей командой он просит придумать название. Так как мой бот будет трекать время — название соответствующее. Пишу:

Следующим шагом нужно задать юзернейм для бота (будет использоваться для поиска @username). Условие: username должен заканчиваться на bot или _bot. Пишу:

Готово! В ответе нам приходит токен — это значит, что мы зарегистрировали нового чат-бота.

Разработка

Для начала я решил посмотреть какие библиотеки предлагает нам интернет.

Оказалось вариантов не так мало. Тут можно ознакомится со всем списком предлагаемых вариантов.

Мой выбор пал на TelegramBotApiBundle для Symfony.

composer require borsaco/telegram-bot-api-bundle

Бандл поддерживает работу с несколькими ботами одновременно. Кроме того есть вариант отладки (отправка только разработчику) и работа через прокси. Для тестового примера нам много не нужно — убираем все лишнее.

config/packages/telegram.yaml

Также я вынес токен в переменную APP_TELEGRAM_TOKEN в .env

Немного теории

Telegram api, можно сказать, работает в двух режимах: можно самим получать обновления с сервера через метод getUpdates(), либо настроить webHook. Первый метод хорош тем, что он предельно прост, но плох тем, что нужно самостоятельно постоянно опрашивать сервер на предмет обновлений. Вариант с webhook же позволяет не думать о том, как получить обновления, а сосредоточится на их обработке. В этом случае telegram будет сам отправлять обновления на url, который мы укажем.

Преимущество второго подхода очевидны)

Для регистрации Webhook делаем следующее:

$bot = $botService->getBot('timeTracker'); $bot->setWebhook( [ 'url'=>'https://myWebSite.com/webhook' ] );

webhook в значении url — это роут, который мы сделаем немного позже. $botService — это объект сервиса Borsaco\TelegramBotApiBundle\Service\Bot, который можно инжектить в любом месте проекта.

Важно: telegram api поддерживает отправку только на https!

Теперь проверим наш Webhook: если отправить какое-нибудь сообщение нашему боту telegram пришлет нам вот такой набор данных в ответе:

{ "update_id": 21406673, "message": { "message_id": 24, "from": { "id": 701891111, "is_bot": false, "first_name": "aleksei", "language_code": "ru" }, "chat": { "id": 701891111, "first_name": "aleksei", "type": "private" }, "date": 1580672814, "text": "/help", "entities": [ { "offset": 0, "length": 5, "type": "bot_command" } ] } }

Нас интересует часть с текстом сообщения. В данном случае видно, что я отправил боту «/help». Естественно он пока ничего не отвечает.

Наличие в ответе entities говорит о том, что сообщение было воспринято ботом как команда (все, что начинается со слеша и пишется латиницей, — это для telegram команда)

Создаем контроллер. Это будет входная точка для запросов от telegram api, куда будут приходить обновления.

Для удобства я всю логику вынес в сервис MessageProcessor, куда передаю строку, полученную от telegram.

Смысл прост — есть 4 команды: help, start, stop, report.

На help или на любое другое сообщение, не подпадающее под этот список, бот должен вернуть сообщение с перечнем доступных команд.

На каждую команду есть свое поведение.

Также есть 2 ситуации, когда ответ будет говорить пользователю, что данное действие запрещено в данный момент (пока трекер времени не остановлен — нельзя начать новый. Соответственно — пока нет активного, остановить тоже ничего нельзя).

Я добавил такие сущности:

    • User, у которого есть поля name, telegramId и коллекция timeLines,
    • TimeLine, у которой есть дата начала и дата конца: startedAt, stopedAt.

То есть user может иметь несколько timelines (у которых есть время старта и время остановки).

Нам приходит json строка, первое что я делаю — это декодирую строку и получаю объект:

$response = \json_decode((string)$telegramUpdate);

Дальше проверяю есть ли такой пользователь в базе (данные о пользователе, написавшем боту берутся из response->message->from). Если пользователя нет — создаем.

Так как мы хотим чтобы команда help и /help воспринималась ботом как одно и тоже, переводим текст сообщения от пользователя в нижний регистр и удаляем обычный и обратный слэш.

$messageText = mb_strtolower($response-&gt;message-&gt;text); $messageText = str_replace([&rsquo;\\&rsquo;, &rsquo;/&rsquo;], &rsquo;&rsquo;, $messageText);

Теперь проверяем полученную команду — входит ли она в список команд, которые мы можем обработать. И теперь на основании того, что нам прислали отправляем ответ.

$messageCommand = $this-&gt;isSupports($messageText) ? $messageText : false;

Если это команды start или stop — создаем TimeLine для этого пользователя или завершаем текущий соответственно и сообщаем пользователю об этом.

Если это report — подсчитываем время во всех timeline за сегодня и отправляем суммарное количество часов и минут пользователю.

Сообщения отправляется методом sendMessage, который принимаем массив параметров. Обязательные параметры: ’chat_id’ и ’text’. Полный список команд можно посмотреть здесь .

Так как это тестовый пример, я ограничился простым switch / case для выбора команд.

switch ($messageCommand) { case self::HELP_COMMAND : $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::ANSWERS[self::HELP_COMMAND]]); break; case self::START_COMMAND : if ($this->timelineService->doesActiveExist($user)) { $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::BAD_ANSWERS['existNotStoppedTimeLine']]); break; } $this->telegramService->startTimeForUser($user); $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::ANSWERS[self::START_COMMAND]]); break; case self::STOP_COMMAND : if ($this->timelineService->doesActiveExist($user)) { $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::ANSWERS[self::STOP_COMMAND]]); break; }; $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::BAD_ANSWERS['timeLineNotFound']]); break; case self::REPORT_COMMAND : $timeForToday = $this->timelineService->getTodayTotalByUser($user); $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => \sprintf(self::REPORT_COMMAND, $timeForToday)]); break; default: $this->bot->sendMessage(['chat_id' => $user->getTelegramId(), 'text' => self::ANSWERS[self::HELP_COMMAND]]); }

Общий вид сервиса:

Таким образом, мы получили бота, с помощью которого можно трекать время за день.

Вывод

Как итог можно смело сказать, что telegram api достаточно функционально и просто в освоении. Большим плюсом является хорошая документация и наличие готовых библиотек для использования.

Вам также может понравиться
Базовое понимание Oauth 2.0
Функция распознавания образов в приложении: как и для чего применять
Заглянем под капот Doctrine 2

  • web-development ,
  • PHP

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

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