ZALOGUJ
    opened image

    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.