Skrypt monitorowania serwera Python

Skrypt monitorowania serwera Python

Skrypt monitorowania serwera Python umożliwia monitorowanie, czy serwer lub komputer jest aktywny i uruchomiony. Może pokazać, ile przestojów miał Twój komputer lub serwer. Będziemy używać gniazd serwerowych, aby sprawdzić, czy określony port na serwerze jest otwarty, czy nie, polecenie ping do monitorowania prostego zwykłego komputera i SSL, aby sprawdzić, czy konkretny serwer wymaga połączenia SSL, czy nie. Do monitorowania serwera używałem Narzędzie do interpretera kodu Visual Studio.

Utwórz python pliku.py

Otwórz interpreter Python i utwórz nowy plik o nazwie serwer.py i zapisałem go w określonym miejscu, w którym można go łatwo uzyskać. Po utworzeniu pliku dodaj niektóre polecenia importu, aby zaimportować ważne pakiety w następujący sposób:

  • Gniazdo elektryczne: Aby połączyć się z różnymi serwerami na określonym gnieździe przez określony port
  • SSL: Wymagane do pakowania połączenia gniazda
  • Datetime: Służy do sprawdzenia, o której godzinie serwer był upadł lub aktywny
  • Marynata: Używane do oszczędzania historii komputera w dół i czasie aktualizacji, a także propagowanie danych od uruchomienia do tego programu
Gniazdo importu
Importuj SSL
z datetime import datetime
Importuj marynatkę

Używamy platforma I podproces pakiety, które powie nam, który system operacyjny używamy, e.G., UNIX Lub Okna.

importować podproces
Platforma importu

Utwórz klasę serwerową

Utwórzmy klasę nazwaną Serwer() i zbudował pierwszą metodę, która jest metodą konstruktora. Dodaliśmy kilka atrybutów dla serwera, e.G., Każdy komputer UNIX lub zwykły komputer. Rzućmy okiem na:

  • Nazwa: Podaj nazwę serwera
  • Port: numer portu, do którego chcemy się połączyć
  • Połączenie: mówi typ połączenia, e.G., SSL lub ping
  • Priorytet: Powiedz nam priorytet serwera, e.G., Możesz ustawić alerty, jeśli ustawiłeś priorytet
  • Historia: Aby zachować listę historii serwera
  • Alarm: Jeśli chcesz wysłać powiadomienia na swój e -mail
Class Server ():
def __init __ (self, nazwa, port, połączenie, priorytet):
samego siebie.Nazwa = nazwa
samego siebie.port = port
samego siebie.połączenie = połączenie.niżej()
samego siebie.Priorytet = priorytet.niżej()
samego siebie.Historia = []
samego siebie.alert = false

Utwórz metodę sprawdzania połączenia

Aby przetestować połączenie serwera, utworzyliśmy inną metodę w klasie Server () o nazwie Check_Connection (). W tej metodzie musimy zdefiniować trzy zmienne jako:

  • MSG: używany do wyświetlania komunikatu, jeśli połączenie ustalone lub nie powiodło się, co jest początkowo puste
  • Powodzenie: używał do stwierdzenia, czy połączenie się powiodło, czy nie
  • Teraz: Otrzyma bieżącą datę i godzinę podczas sprawdzania połączenia
def check_connection (self):
msg = ""
SUKCEs = FAŁSZ
teraz = dataTime.Teraz()

Teraz napisz poniższy kod w tym samym pliku i używając wypróbuj oświadczenie, Sprawdzamy połączenie dla różnych typów połączeń serwerów, e.G. zwykły, SSL i ping. W tym wypróbuj oświadczenie, Mamy instrukcję, mając połączenie zwykły typ. Utworzy połączenie z dostarczonym nazwa i jakikolwiek Port Numer, który podałeś. Jeśli połączenie się powiedzie, wygeneruje wiadomość sukcesu, mi.G., MSG. To obróci Powodzenie zmienne do PRAWDA I żaden alarm nie zostanie wysłany na adres e -mail. Mamy inaczej, jeśli oświadczenie z innym typem połączenia, aw ostatniej instrukcji IF mamy świst() Funkcja wywołana. w Z wyjątkiem stwierdzenia, Jeśli gniazdo zabraknie czasu, połączenie zostanie odrzucone lub cokolwiek innego, wyświetli Wiadomość o awarii.

próbować:
Jeśli ja.połączenie == „zwykły”:
gniazdo elektryczne.create_connection (self.Imię, ja.port), limit czasu = 10)
msg = f "self.Nazwa jest w górę. Na porcie self.port z self.połączenie"
SUKCEs = True
samego siebie.alert = false
Elif Self.połączenie == „SSL”:
SSL.Wrap_socket (gniazdo.create_connection (
(samego siebie.Imię, ja.port), limit czasu = 10))
msg = f "self.Nazwa jest w górę. Na porcie self.port z self.połączenie"
SUKCEs = True
samego siebie.alert = false
w przeciwnym razie:
Jeśli ja.świst():
msg = f "self.Nazwa jest w górę. Na porcie self.port z self.połączenie"
SUKCEs = True
samego siebie.alert = false
Z wyjątkiem gniazda.koniec czasu:
msg = f "serwer: self.Nazwa limit czasu. Na porcie self.Port"
z wyjątkiem (ConnectionRefusedError, ConnectionReseterRor) jako E:
msg = f "serwer: self.Nazwa e "
z wyjątkiem wyjątku jako E:
msg = f "bez wskazówki??: e ”

Z drugiej strony, jeśli Status sukcesu I alarm Czy FAŁSZ, Zmieni to na PRAWDA i wyślij alarm do dostarczonego e -maila i zadzwoń create_history () funkcja utworzenia historia.

Jeśli sukces == Fałsz i jaźń.Alert == Fałsz:
# Wyślij alert
samego siebie.alert = true
e -mail_alert (ja.Nazwa, f "msg \ n teraz", „[email protected] ”)
samego siebie.create_history (msg, sukces, teraz)

Zdefiniuj metodę tworzenia historii

w Metoda create_history (), Dołączyliśmy trochę atrybuty z maksimum limit zdefiniowane i czy historia limit przekracza, to będzie usuwać starszy.

def create_history (self, msg, sukces, teraz):
History_max = 100
samego siebie.historia.append ((MSG, sukces, teraz))
Podczas gdy Len (jaźń.Historia)> History_max:
samego siebie.historia.Pop (0)

Zdefiniuj funkcję ping, aby się połączyć

świst() Funkcja będzie pingować serwer lub komputer. Jeśli ping jest udany, Wyświetli się prawdziwe, a jeśli połączenie przegrany, powróci FAŁSZ.

def Ping (ja):
próbować:
wyjście = podproces.Check_output ("ping - 1 ".format (platforma „n '.system(
).dolne () == „Windows” else 'c', self.Nazwa), shell = true, Universal_Newlines = true)
Jeśli „nieosiągalne” na wyjściu:
zwróć false
w przeciwnym razie:
zwróć prawdziwie
Z wyjątkiem wyjątku:
zwróć false

Utwórz listę serwerów

Teraz musimy upewnić się, że uruchamiamy główny program. If-Satement Sprawdzę, czy jest to program główny, czy nie. wypróbuj oświadczenie będzie obciążenie serwer Plik marynaty Jeśli już istnieje. Jeśli nie istnieje, Z wyjątkiem stwierdzenia dostanie całość Nowa lista serwerów. Dla któregokolwiek z serwerów, znajomości będzie sprawdzony A historia zostanie uratowana. Z drugiej strony musimy ratować nasz dane do marynaty plik używając wysypisko oświadczenie.

Jeśli __name__ == "__main__":
próbować:
serwery = marynata.załaduj (otwarte („serwery.marynat ”,„ rb ”))
z wyjątkiem:
serwery = [
Serwer („Reddit.com ", 80,„ Plain ”,„ High ”),
Serwer ("MSN.com ", 80,„ Plain ”,„ High ”),
Serwer ("SMTP.Gmail.com ", 465,„ SSL ”,„ High ”),
Serwer (”192.168.1.164 ", 80,„ Plain ”,„ High ”),
Serwer („Yahoo.com ", 80,„ Plain ”,„ High ”),
]
dla serwera na serwerach:
serwer.Sprawdź połączenie()
wydrukuj (len (serwer.historia))
serwer druku.Historia [-1])
marynata.zrzut (serwery, otwarte („serwery.marynat ”,„ wb ”))

Poniższe wyjście zostanie wyświetlone podczas uruchamiania tego pliku.

Utwórz plik do dodawania informacji

Utwórz nowy plik wymieniony dodać.py I import Pakiet i serwer klasowy ze starego pliku serwer.py. Ten plik otworzy plik marynaty i poprosi o dodanie dodatkowych informacji dotyczących serwera, ponieważ kod jest pokazany poniżej.

Importuj marynatkę
Z serwera serwera importowego
serwery = marynata.załaduj (otwarte („serwery.marynat ”,„ rb ”))
print („Przykład do dodania serwera”)
Servername = input („Wprowadź nazwę serwera:”)
port = int (input („Wprowadź numer portu jako liczbę całkowitą:”))
połączenie = wejście („Wprowadź typ typu ping/Plain/SSL:”)
priorytet = wejście („Wprowadź priorytet wysoko/niski:”)
new_server = serwer (Servername, port, połączenie, priorytet)
serwery.append (New_Server)
marynata.zrzut (serwery, otwarte („serwery.marynat ”,„ wb ”))

Po uruchomieniu tego pliku otrzymasz poniższe dane wyjściowe i poprosi Cię o dodanie nazwy serwera, portu, typu ping i priorytetu.

Podczas gdy uruchamiasz serwer.Plik PY ponownie otrzymasz informacje dotyczące starego serwera, a także historię nowego serwera, który podałeś na powyższym obrazie.

Utwórz plik dla alertów Gmaila

Teraz utwórz nowy plik wymieniony Gmail.py i zaimportuj niektóre wymagane pakiety. Następnie utwórz metodę nazwaną e -mail_alert () To tworzy alarm wysłać na e-mail Zapewniając e -mail i hasło Informacja.

Importuj smtplib
z emaila.Import wiadomości import e -mail
def e -mail_alert (temat, ciało, to):
msg = e -mailsage ()
MSG.set_content (ciało)
gmail_user = '[email protected] '
gmail_password = „get_app_password”
MSG [„podmiot”] = przedmiot
MSG ['from'] = "[email protected] "
msg ['to'] = to
S = SMTPLIB.SMTP ('SMTP.Gmail.com ', 587)
S.ehlo ()
S.starttls ()
S.Login (Gmail_user, Gmail_Password)
S.send_message (MSG)
S.zrezygnować()
Jeśli __name__ == '__main__':
e -mail_alert („test”, „https: // niezdolność.gg/caww5qq ”,„ [email protected] ”)

Teraz idź do serwer.plik py i importować e -mail_alert () Metoda z Gmaila.plik py.

z Gmaila importuj e -mail_alert

Możesz dodać swój adres e -mail gdziekolwiek wymaga w kodzie. Teraz uruchom serwer.py Plik i sprawdź wyjście pokazane w terminalu interpretera Python.

Utwórz plik, aby uzyskać statystyki

Teraz musisz tworzyć Kolejny plik Python o nazwie get_stats.py W tym samym katalogu. Ten plik zaimportował Klasa serwera z serwer.py plik. Kod napisany poniżej będzie szukał naszego pliku marynowania, który jest załadowany i wydrukować Historia każdego serwer i ile ma ten konkretny serwer czas aktu.

Importuj marynatkę
Z serwera serwera importowego
serwery = marynata.załaduj (otwarte („serwery.marynat ”,„ rb ”))
dla serwera na serwerach:
server_up = 0
dla punktu na serwerze.historia:
Jeśli punkt [1]:
server_up += 1
print (f "---------- \ n serwer.Nazwa została uprawiana server_up / len (serwer.Historia) * 100 \ ntotal Historia: len (serwer.historia) \ n ---------- \ n ”)

Po uruchomieniu tego konkretnego pliku zobaczysz całkowitą historię każdego serwera, a ich czas pracy.

Wniosek

Z powodzeniem wypróbowaliśmy i nauczyliśmy się skryptu monitorowania serwera Python w naszym interpreterie kodu Visual Studio, aby uzyskać informacje dotyczące kilku serwerów.