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