ВОЙТИ
    opened image

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