ჩვენ უკრაინის გვერდით ვართ. თქვენი დახმარება მნიშვნელოვანია, გთხოვთ გააკეთოთ შემოწირულობა. უფრო ვრცლად.
    შესვლა

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

    Для мониторинга серверов или сетевых устройств существует множество программных решений, многие из которых требует ресурсов сервера для развертывания и знаний по настройке. Но если у Вас один или несколько серверов или маршрутизатор с белым* 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
    Далее @BotFather запросит название для нашего бота. Ограничений в названии нет, введем, например:
    IP monitoring

    Теперь необходимо ввести уникальное имя бота в системе Telegram. Название бота должно оканчиваться на _bot. Назовем, для примера
    ip_monitoring_super_bot

    После этого, @BotFather предоставит нам TOKEN, с помощью которого можно управлять ботом. TOKEN необходимо сохранить, так как он понадобиться нам позже.

    Телеграм бот зарегистрирован.

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

    Для этого в окне чатов программы Telegram нажимаем на иконку создания нового сообщения и выбираем New chanel - Create chanel - придумываем название каналу (например, IP monitoring chanel) - выбираем тип канала Private и добавляем бота @ip_monitoring_super_bot.


    В результате мы получаем приватный канал, в который бот @ip_monitoring_super_bot будет отправлять сообщения о состоянии оборудования, которое мы мониторим. Также в этот канал можно пригласить по специальной ссылке любого пользователя телеграм.
    Следует обратить внимание и проверить в свойствах канала IP monitoring chanel, добавлен ли бот @ip_monitoring_super_bot в качестве администратора канала. Чтобы перейти в свойства канала, достаточно нажать на названии канала.

    Также нам понадобится значение 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
    Результат на экране будет таким:
    Итак, запомним 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

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

    Более подробно об установке 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 = {'chat_id': chat_id,'text': msg}
        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

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

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

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