УВІЙТИ
    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.