Python Server Monitoring Script

Python Server Monitoring Script

Python Server Monitoring Script lar deg overvåke hvis serveren eller datamaskinen din er aktiv og kjører. Det kan vise deg hvor mye driftsstans datamaskinen eller serveren din hadde. Vi bruker serverstikk for å sjekke om den spesifikke porten på en server er åpen eller ikke, ping -kommandoen for å overvåke en enkel vanlig datamaskin og SSL for å sjekke om den aktuelle serveren krever en SSL -tilkobling eller ikke. For serverovervåking har jeg brukt Visual Studio Code Interpreter Tool.

Opprett fil Python.py

Åpne Python -tolken og lag en ny fil som heter Server.py og lagret det på et bestemt sted der det enkelt kan nås. Når filen er opprettet, kan du legge til noen importkommandoer for å importere viktige pakker som følger:

  • Stikkontakt: Å koble til forskjellige servere på en bestemt stikkontakt med en bestemt port
  • SSL: Påkrevd for innpakning av sokkelforbindelsen
  • Dato tid: Pleide å sjekke hvilken tid serveren var nede eller aktiv
  • Pickle: Brukes til å lagre historien til datamaskinens nedetid, samt forplante dataene fra Run til Run med dette programmet
Importkontakt
Importer SSL
fra DateTime Import DateTime
Importer sylteagurk

Vi bruker plattform og underprosess Pakker, som vil fortelle oss hvilket operativsystem vi kjører, e.g., Unix eller Vinduer.

Importer underprosess
Importplattform

Lag en serverklasse

La oss lage en klasse som heter Server () og bygde en første metode, som er en konstruktørmetode. Vi har lagt til noen attributter for serveren, e.g., Enhver Unix eller vanlig datamaskin. La oss se på hver:

  • Navn: spesifiser navnet på en server
  • Havn: Portnummeret vi vil koble til
  • Forbindelse: forteller tilkoblingstypen, e.g., Ssl eller ping
  • Prioritet: Fortell oss serverprioriteten, e.g., Du kan angi varsler hvis du setter prioritet
  • Historie: For å holde serverhistorikklisten
  • Varsling: Hvis du vil sende varsler til e -posten din
Klasseserver ():
def __init __ (selv, navn, port, tilkobling, prioritet):
selv-.Navn = Navn
selv-.port = port
selv-.Tilkobling = tilkobling.Nedre()
selv-.prioritet = prioritet.Nedre()
selv-.Historie = []
selv-.Varsel = falsk

Lag en metode for å sjekke tilkoblingen

Så for å teste serverforbindelsen, har vi opprettet en annen metode i server () -klasse som heter Check_Connection (). I denne metoden må vi definere tre variabler som:

  • Msg: brukes til å vise en melding hvis tilkobling etablert eller mislyktes som opprinnelig er tom
  • Suksess: pleide å fortelle om forbindelsen er vellykket eller ikke
  • : vil få gjeldende dato og tid mens du sjekker tilkoblingen
def check_connection (self):
msg = ""
Suksess = falsk
Nå = DateTime.nå()

Skriv nå koden nedenfor i samme fil, og bruk prøv uttalelse, Vi sjekker tilkoblingen for forskjellige servere tilkoblingstyper, e.g. vanlig, ssl og ping. I dette prøv uttalelse, vi har hvis uttalelse har en forbindelse med vanlig type. Det vil skape en forbindelse med det medfølgende Navn og noen havn nummer du oppga. Hvis forbindelsen er vellykket, vil den generere en Suksessmelding, e.g., msg. Det vil vri Suksess variabel til ekte og ingen varsel vil bli sendt til e -post. Vi har annet hvis uttalelse med en annen tilkoblingstype, og i det siste hvis uttalelse har vi en ping () funksjon kalt. I unntatt uttalelse, Hvis kontakten har gått tom for tid, blir en forbindelse nektet, eller noe annet, vil den vise en Feilmelding.

prøve:
Hvis selv.tilkobling == "vanlig":
stikkontakt.create_connection ((selv.Navn, selv.port), timeout = 10)
msg = f "selv.Navn er oppe. På port selv.port med selv.forbindelse"
Suksess = sant
selv-.Varsel = falsk
Elif selv.tilkobling == "SSL":
SSL.wrap_socket (socket.create_connection (
(selv.Navn, selv.port), timeout = 10)))
msg = f "selv.Navn er oppe. På port selv.port med selv.forbindelse"
Suksess = sant
selv-.Varsel = falsk
ellers:
Hvis selv.ping ():
msg = f "selv.Navn er oppe. På port selv.port med selv.forbindelse"
Suksess = sant
selv-.Varsel = falsk
unntatt stikkontakt.pause:
msg = f "server: selv.Navn timeout. På port selv.havn"
Bortsett fra (ConnectionRefusedError, ConnectionReseterror) som E:
msg = f "server: selv.name e "
unntatt unntak som e:
msg = f "Ingen ledetråd??: e "

På den annen side, hvis Suksessstatus og varsling er Falsk, det vil endre det til ekte og send en varsling til den medfølgende e -posten og ring create_history () funksjon for å lage en historie.

Hvis suksess == falsk og selv.Varsel == FALSE:
# Send varsel
selv-.Varsel = sant
e -post_alert (selv.Navn, f "msg \ n nå", "[email protected] ")
selv-.create_history (msg, suksess, nå)

Definer en metode for å skape historie

I create_history () metode, Vi har lagt ved noen attributter med maksimum grense definert, og hvis historien grensen overstiger, det vil slett den eldre.

def create_history (self, msg, suksess, nå):
History_max = 100
selv-.historie.vedlegg ((MSG, suksess, nå))
Mens Len (selv.Historie)> History_max:
selv-.historie.pop (0)

Definere pingfunksjon for å koble til

De ping () funksjon vil pinge serveren eller datamaskinen. Hvis pingen er vellykket, det vil gi ut sant, og hvis forbindelsen mislyktes, det kommer tilbake Falsk.

def ping (selv):
prøve:
output = underprosess.check_output ("ping - 1 ".Format ('n' hvis plattform.system(
).Nedre () == "Windows" ellers 'C', selv.Navn), skall = true, Universal_Newlines = True)
Hvis 'uoppnåelig' i output:
return falsk
ellers:
Returner sann
Bortsett fra unntak:
return falsk

Lag liste over servere

Nå må vi sørge for at vi kjører Hovedprogram. De If-uttalelse vil sjekke om det er hovedprogrammet eller ikke. De prøv uttalelse vil laste serveren Pickle -fil Hvis det allerede eksisterer. Hvis det ikke eksisterer, er det unntatt uttalelse vil få en helhet Ny liste av servere. For noen av serverne, Tilkoblinger vil være krysset av og historien vil bli frelst. På den annen side må vi gjøre det lagre vår data til sylteagurken fil bruker dump uttalelse.

if __name__ == "__main__":
prøve:
servere = sylteagurk.Last (Åpne ("Servere.Pickle "," RB "))
unntatt:
servere = [
Server ("Reddit.com ", 80," vanlig "," høy "),
Server ("msn.com ", 80," vanlig "," høy "),
Server ("SMTP.Gmail.com ", 465," SSL "," High "),
Server ("192.168.1.164 ", 80," vanlig "," høy "),
Server ("yahoo.com ", 80," vanlig "," høy "),
]
For server i servere:
server.check_connection ()
skriv ut (len (server.historie))
Skriv ut (server.Historie [-1])
Pickle.dump (servere, åpne ("servere.Pickle "," WB "))

Utgangen nedenfor vises mens du kjører denne filen.

Lag fil for å legge til informasjon

Lag en ny fil som heter Legg til.py og import Pickle -pakke og klasseserver fra den gamle filen Server.py. Denne filen åpner pickle -filen og vil be deg om å legge til litt tilleggsinformasjon angående serveren som kode vises nedenfor.

Importer sylteagurk
Fra serverimportserver
servere = sylteagurk.Last (Åpne ("Servere.Pickle "," RB "))
print ("Eksempel for å legge til server")
servernavn = input ("Skriv inn servernavn:")
port = int (input ("Skriv inn et portnummer som heltall:"))
Tilkobling = input ("Skriv inn en type ping/vanlig/ssl:")
Prioritet = input ("Angi prioritet høy/lav:")
new_server = server (servernavn, port, tilkobling, prioritet)
servere.vedlegg (new_server)
Pickle.dump (servere, åpne ("servere.Pickle "," WB "))

Når du kjører denne filen, vil du få utdataene nedenfor, og den vil be deg om å legge til servernavn, port, pingtype og prioritet.

Mens du kjører serveren.PY -fil igjen, vil du få informasjonen om den gamle serveren, så vel som historien til den nye serveren du har gitt i bildet ovenfor.

Lag fil for Gmail -varsler

Lag nå en ny fil som heter Gmail.py og importer noen pakker som kreves. Lag deretter en metode som heter e -post_alert () det skaper en varsling å sende på e -post mens du gir e -post og passord informasjon.

Importer SMTPLIB
fra e -post.Melding importerer e -postmelding
def e -post_alert (emne, kropp, til):
msg = e -postmelding ()
msg.set_content (kropp)
gmail_user = '[email protected] '
gmail_password = 'get_app_password'
msg ['emne'] = emne
msg ['fra'] = "[email protected] "
msg ['til'] = til
s = smtplib.SMTP ('SMTP.Gmail.com ', 587)
s.ehlo ()
s.starttls ()
s.Innlogging (gmail_user, gmail_password)
s.Send_Message (MSG)
s.slutte()
if __name__ == '__main__':
e -post_alert ("test", "https: // uenighet.GG/CAWW5QQ "," [email protected] ")

Gå nå til Server.py -fil og importere e -post_alert () Metode fra Gmail.py -fil.

Fra Gmail import e -post_alert

Du kan legge til din epostadresse Hvor det er nødvendig i koden. Kjør nå Server.py fil og sjekk utgangen som vises i terminalen til Python -tolken.

Lag en fil for å få statistikk

Nå må du skape en annen Python -fil som heter Get_stats.py Innenfor den samme katalogen. Denne filen har importert Serverklasse fra Server.py fil. Koden skrevet nedenfor vil se på pickle -filen vår, som er lastet inn, og skrive ut Historien til hver server og hvor mye den aktuelle serveren har oppetid.

Importer sylteagurk
Fra serverimportserver
servere = sylteagurk.Last (Åpne ("Servere.Pickle "," RB "))
For server i servere:
server_up = 0
For punkt i serveren.historie:
Hvis punkt [1]:
server_up += 1
print (f "---------- \ n server.Navn har vært oppe server_up / len (server.historie) * 100 \ ntotal historie: len (server.historie) \ n ---------- \ n ")

Når du kjører denne spesielle filen, vil du også se en total historie på hver server og oppetid.

Konklusjon

Vi har prøvd og lært Python Server -overvåkningsskriptet i vår visuelle studiokodetolk for å få informasjon om flere servere.