Dla monitorowania serwerów lub urządzeń sieciowych istnieje wiele rozwiązań programowych, z których wiele wymaga zasobów serwera do wdrożenia oraz wiedzy na temat konfiguracji. Jednak jeśli masz jeden lub kilka serwerów lub router z białym* IP, to nie ma potrzeby wdrażania skomplikowanej struktury monitorowania tylko po to, aby sprawdzić, czy serwer lub router jest dostępny. Wystarczy stworzyć prostego bota telegramowego, który będzie wysyłał Ci powiadomienia w telegramie, jeśli sprawdzany IP jest niedostępny (down) i kiedy znowu jest dostępny (up). Sam bot będzie działał 24/7 na wirtualnym serwerze pod zarządzaniem systemu operacyjnego Linux, z minimalnym obciążeniem zasobów.
* biały adres IP - to unikalny adres IP, przydzielony do urządzenia lub serwera, dostępny z internetu. Taki IP jest publiczny.
Co należy zrobić:
1. W Telegramie utworzyć bota i prywatny kanał, do którego dodać bota. Na kanał możesz zapraszać tych, którzy również mogą obserwować monitorowanie
2. Zainstalować na serwerze python3. W tym artykule omówimy umieszczenie bota na wirtualnym serwerze z systemem Ubuntu 20.04 (można umieścić na dowolnym systemie, na którym można zainstalować pakiet python3)
3. Stworzyć plik skryptu, wpisać w nim IP hostów (serwerów lub routerów), ustawić okres monitorowania i uruchomić skrypt w trybie pracy 24/7.
Przystąpmy do realizacji.
1. Aby zarejestrować nowego bota telegramowego, należy w aplikacji Telegram znaleźć bot-serwis @BotFather i wysłać mu polecenie rejestracji nowego bota
/newbot
Następnie @BotFather poprosi o nazwę dla naszego bota. Nie ma ograniczeń co do nazwy, wpiszmy na przykład:
IP monitoring
Teraz należy wpisać unikalną nazwę bota w systemie Telegram. Nazwa bota musi kończyć się na _bot. Nazwijmy, dla przykładu
ip_monitoring_super_bot
Po tym, @BotFather przekaże nam TOKEN, za pomocą którego można zarządzać botem. TOKEN należy zachować, ponieważ będzie potrzebny później.
Bot telegramowy został zarejestrowany.
Teraz stwórzmy prywatny kanał, do którego nasz nowy bot o nazwie @ip_monitoring_super_bot będzie wysyłał wiadomości.
W tym celu w oknie czatów programu Telegram klikamy na ikonę tworzenia nowej wiadomości i wybieramy Nowy kanał - Utwórz kanał - wymyślamy nazwę kanału (na przykład, IP monitoring chanel) - wybieramy typ kanału Prywatny i dodajemy bota @ip_monitoring_super_bot.
W rezultacie otrzymujemy prywatny kanał, do którego bot @ip_monitoring_super_bot będzie wysyłał wiadomości o stanie sprzętu, który monitorujemy. Również do tego kanału można zaprosić za pomocą specjalnego linku dowolnego użytkownika telegramu.
Należy zwrócić uwagę i sprawdzić w właściwościach kanału IP monitoring chanel, czy bot @ip_monitoring_super_bot został dodany jako administrator kanału. Aby przejść do właściwości kanału, wystarczy kliknąć na nazwę kanału.
Będzie nam również potrzebna wartość chat_id. W tym celu należy:
- przejść do czatu bota @ip_monitoring_super_bot i wysłać wiadomość /start (to uruchomi bota w pracy)
- zrobić testową wiadomość (dowolną) w kanale IP monitoring chanel
- przejść w przeglądarce pod link https://api.telegram.org/botTOKEN/getUpdates
W naszym przykładzie link będzie wyglądał tak:
https://api.telegram.org/bot5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX/getUpdates
Wynik na ekranie będzie taki:
Zapamiętajmy 2 ważne wartości do zarządzania botem:
token= 5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX
chat_id = -100185915XXX
2. Połączymy się z serwerem przez SSH (jak to zrobić)
Sprawdzimy, czy python3 jest zainstalowany:
python3 --version
Jeśli python3 nie jest zainstalowany (błąd: -bash: python3: command not found), należy zainstalować poleceniem
- dla Ubuntu:
apt install python3 -y
- dla CentOS
yum install python3 -y
Dodatkowo zainstalujemy moduł requests:
pip3 install requests
Po instalacji można jeszcze raz sprawdzić wersję. Może być mniej więcej tak:
Szczegółowe informacje na temat instalacji python3: Jak zainstalować Python 3.10 na Ubuntu 20.04
3. Stworzymy folder, w którym będzie umieszczony skrypt monitorowania. W tym celu wykonamy polecenie:
cd && mkdir pingmonitor && cd pingmonitor
Stworzymy i otworzymy plik
vim main.py
i umieścimy w nim skrypt:
#----------------------------------------------------
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)
#------------------------------------------------
- w skrypcie należy zastąpić TOKEN i CHAT_ID na zapisane wcześniej wartości token i chat_id.
- w linii hostname = ['8.8.8.8','1.1.1.1'], zamiast IP 8.8.8.8 i 1.1.1.1 podaj IP (lub hostname) Twojego serwera lub routera, które należy monitorować*. Adresy IP urządzeń należy podawać w pojedynczych cudzysłowach i oddzielać przecinkiem (jeśli IP jest więcej niż jeden)
- wartość zmiennej time_pause = 30, wskazuje okres sprawdzania (w sekundach). Nie zaleca się ustawiania mniej niż 10-15 sekund, szczególnie jeśli lista sprawdzanych IP jest duża.
- nie usuwaj wcięć w skrypcie. Może to prowadzić do błędów składniowych.
(*)skrypt używa metody sprawdzania przez wysyłanie pakietów icmp (ping), z tego powodu należy upewnić się, że na serwerze lub routerze (które są monitorowane) nie są blokowane zapytania ping.
Teraz wszystko jest gotowe do uruchomienia skryptu.
Ponieważ skrypt ma działać 24/7, aby jego działanie nie było wyświetlane na głównym ekranie konsoli, uruchomimy go w osobnym "oknie" za pomocą narzędzia screen (jeśli nie jest zainstalowane, zainstaluj je. Szczegóły: Podstawy pracy z narzędziem screen).
W tym celu wykonamy polecenie:
screen -S pingmonitor
i przejdziemy do folderu z plikiem skryptu:
cd && cd pingmonitor
Uruchomimy skrypt poleceniem:
python3 main.py
Aby wyjść z sesji i pozostawić działający nasz skrypt, naciśnij Ctrl+a+d. Teraz konsolę SSH można zamknąć.
Aby połączyć się z sesją z działającym skryptem, połącz się z serwerem przez SSH i wykonaj polecenie:
screen -r pingmonitor
W przypadku, gdy serwer lub router stanie się niedostępny, a następnie stanie się dostępny, otrzymasz wiadomość w kanale IP monitoring chanel.