Script de surveillance du serveur Python

Script de surveillance du serveur Python

Le script de surveillance du serveur Python vous permet de surveiller si votre serveur ou votre ordinateur est actif et en cours d'exécution. Il peut vous montrer combien de temps d'arrêt votre ordinateur ou votre serveur. Nous utiliserons des sockets de serveur pour vérifier si le port spécifique d'un serveur est ouvert ou non, la commande ping pour surveiller un ordinateur régulier simple et le SSL pour vérifier si le serveur particulier nécessite une connexion SSL ou non. Pour la surveillance du serveur, j'utilise le Outil d'interprète de code Visual Studio.

Créer un fichier Python.py

Ouvrez l'interpréteur Python et créez un nouveau fichier nommé Serveur.py et l'a enregistré dans un endroit particulier où il est accessible facilement. Lorsque le fichier a été créé, ajoutez des commandes d'importation pour importer des packages importants comme suit:

  • Prise: Pour se connecter avec différents serveurs sur une certaine prise par un port particulier
  • SSL: Requis pour l'emballage de la connexion de la prise
  • DateTime: Utilisé pour vérifier à quelle heure le serveur était en panne ou actif
  • Cornichon: Utilisé pour enregistrer l'historique de la baisse et de la disponibilité de l'ordinateur, ainsi que pour propager les données de l'exécution à l'exécution avec ce programme
socket d'importation
Importer SSL
à partir de Datetime Import Datetime
corrige d'importation

Nous utilisons le plateforme et sous-processus packages, qui nous diront quel système d'exploitation nous exécutons, e.g., Unix ou les fenêtres.

sous-processus d'importation
plate-forme d'importation

Créer une classe de serveur

Créons une classe nommée Serveur() et construit une première méthode, qui est une méthode de constructeur. Nous avons ajouté quelques attributs pour le serveur, e.g., Tout Unix ou ordinateur ordinaire. Jetons un coup d'œil à chacun:

  • Nom: spécifiez le nom d'un serveur
  • Port: le numéro de port auquel nous voulons connecter
  • Connexion: raconte le type de connexion, E.g., SSL ou ping
  • Priorité: Dites-nous la priorité du serveur, E.g., Vous pouvez définir des alertes si vous définissez la priorité
  • Histoire: Pour conserver la liste d'historique des serveurs
  • Alerte: Si vous souhaitez envoyer des alertes à votre e-mail
Class Server ():
DEF __INIT __ (Self, nom, port, connexion, priorité):
soi.nom = nom
soi.port = port
soi.connexion = connexion.inférieur()
soi.priorité = priorité.inférieur()
soi.History = []
soi.alerte = faux

Créer une méthode pour vérifier la connexion

Ainsi, pour tester la connexion du serveur, nous avons créé une autre méthode dans Server () Classe nommée Check_Connection (). Dans cette méthode, nous devons définir trois variables comme:

  • Msg: utilisé pour afficher un message si la connexion établie ou échouée qui est initialement vide
  • Succès: utilisé pour dire si la connexion est réussie ou non
  • Maintenant: obtiendra la date et l'heure actuelles lors de la vérification de la connexion
def check_connection (self):
msg = ""
succès = faux
maintenant = datetime.maintenant()

Maintenant, écrivez le code ci-dessous dans le même fichier et en utilisant le Énoncé d'essai, Nous vérifions la connexion pour différents types de connexions de serveurs, e.g. Plain, SSL et ping. Dans ce Énoncé d'essai, Nous avons si une déclaration ayant une connexion de plaine taper. Il créera une connexion avec le fourni nom et n'importe quel port Numéro que vous avez fourni. Si la connexion réussit, elle générera un message de réussite, e.g., msg. Il tourne le Succès variable à Vrai Et aucune alerte ne sera envoyée par e-mail. Nous avons Sinon If déclaration avec un type de connexion différent, et dans la dernière instruction IF, nous avons un ping () fonction appelée. Dans le sauf la déclaration, Si le socket est à court de temps, une connexion est refusée ou autre chose, elle affichera un message d'échec.

essayer:
Si vous-même.connexion == "PLAIN":
prise.create_connection ((soi.Nom, soi.port), temps mort = 10)
msg = f "self.nom est en place. Sur le port soi.port avec soi.connexion"
succès = vrai
soi.alerte = faux
Elif Self.connexion == "SSL":
SSL.wrap_socket (socket.create_connection (
(soi.Nom, soi.port), temps mort = 10))
msg = f "self.nom est en place. Sur le port soi.port avec soi.connexion"
succès = vrai
soi.alerte = faux
autre:
Si vous-même.ping ():
msg = f "self.nom est en place. Sur le port soi.port avec soi.connexion"
succès = vrai
soi.alerte = faux
sauf la douille.temps libre:
msg = f "Server: self.nom délai d'expiration. Sur le port soi.port"
Sauf (ConnectionRefusedError, ConnectionReSeTerror) comme e:
msg = f "Server: self.nom e "
sauf exception comme e:
msg = f "Aucun indice??: e "

D'un autre côté, si le statut de réussite et alerte sont FAUX, il le changera en Vrai et envoyer un alerte à l'e-mail fourni et appelez le create_history () fonction pour créer un histoire.

Si le succès == faux et soi.alert == false:
# Envoyer une alerte
soi.alerte = vrai
Email_Alert (Self.Nom, f "msg \ n maintenant", "Jake @ clarritycoders.com ")
soi.create_history (msg, succès, maintenant)

Définir une méthode pour créer l'histoire

Dans le Méthode create_history (), Nous en avons annexé les attributs avec maximum limite défini, et si l'histoire la limite dépasse, ce sera supprimer l'ancien.

def Create_history (self, msg, succès, maintenant):
History_max = 100
soi.histoire.ajouter ((msg, succès, maintenant))
Pendant que Len (soi.History)> History_max:
soi.histoire.pop (0)

Définir la fonction de ping pour se connecter

Le ping () La fonction va cingler le serveur ou l'ordinateur. Si le ping est réussi, il sortira vrai, et si la connexion échoué, il reviendra FAUX.

défaut (soi):
essayer:
sortie = sous-processus.check_output ("ping - 1 ".Format ('n' si plate-forme.système(
).inférieur () == "Windows" else 'c', self.nom), shell = true, universal_newlines = true)
Si «inaccessible» en sortie:
retourner faux
autre:
Retour vrai
sauf exception:
retourner faux

Créer une liste de serveurs

Maintenant, nous devons nous assurer que nous dirigeons le programme principal. Le Si staté Vérifiera s'il s'agit du programme principal ou non. Le Énoncé d'essai sera charger le serveur fichier S'il existe déjà. S'il n'existe pas, le sauf la déclaration obtiendra un tout Nouvelle liste des serveurs. Pour l'un des serveurs, Connexions sera vérifié et l'histoire sera sauvée. D'un autre côté, nous devons sauvegarder notre données au cornichon déposer en utilisant le décharge déclaration.

Si __name__ == "__main__":
essayer:
serveurs = cornichon.Charge (Open ("serveurs.cornichon "," rb "))
sauf:
serveurs = [
Serveur ("reddit.com ", 80," plain "," high "),
Serveur ("MSN.com ", 80," plain "," high "),
Serveur ("SMTP.Gmail.com ", 465," ssl "," high "),
Serveur ("192.168.1.164 ", 80," Plain "," High "),
Serveur ("Yahoo.com ", 80," plain "," high "),
]]
pour le serveur dans les serveurs:
serveur.check_connection ()
Imprimer (Len (serveur.histoire))
serveur d'imprimante.Histoire [-1])
cornichon.Dump (serveurs, Open ("Serveurs.cornichon "," wb "))

La sortie ci-dessous sera affichée lors de l'exécution de ce fichier.

Créer un fichier pour l'ajout d'informations

Créer un nouveau fichier nommé ajouter.py et importer package de cornichon et serveur de classe à partir de l'ancien fichier Serveur.py. Ce fichier ouvrira le fichier Pickle et vous demandera d'ajouter des informations supplémentaires concernant le serveur car le code est affiché ci-dessous.

corrige d'importation
depuis Server Import Server
serveurs = cornichon.Charge (Open ("serveurs.cornichon "," rb "))
Imprimer ("Exemple pour ajouter un serveur")
servername = entrée ("Entrez le nom du serveur:")
port = int (entrée ("Entrez un numéro de port sous le nom entier:"))
connexion = entrée ("Entrez un type ping / plaine / ssl:")
prioritaire = entrée ("Entrez la priorité élevée / bas:")
new_server = serveur (nom de serveur, port, connexion, priorité)
les serveurs.Ajouter (new_server)
cornichon.Dump (serveurs, Open ("Serveurs.cornichon "," wb "))

Lorsque vous exécutez ce fichier, vous obtiendrez la sortie ci-dessous et il vous demandera d'ajouter le nom du serveur, le port, le type de ping et la priorité.

Tandis que lorsque vous exécutez le serveur.Fichier PY Encore une fois, vous obtiendrez les informations concernant l'ancien serveur, ainsi que l'historique du nouveau serveur que vous avez fourni dans l'image ci-dessus.

Créer un fichier pour les alertes Gmail

Créez maintenant un nouveau fichier nommé Gmail.py et importer certains packages requis. Puis créez une méthode nommée email_alert () qui crée un alerte pour envoyer sur le e-mail Tout en fournissant des e-mails et mot de passe information.

importer smtplib
de l'email.Importation de message EmailMessage
def email_alert (sujet, corps, à):
msg = emailMessage ()
msg.set_content (corps)
gmail_user = 'youmail @ gmail.com '
gmail_password = 'get_app_password'
msg ['sujet'] = sujet
msg ['from'] = "youmail @ gmail.com "
msg ['à'] = à
s = smtplib.SMTP ('SMTP.Gmail.com ', 587)
s.ehlo ()
s.startTls ()
s.Login (gmail_user, gmail_password)
s.Send_Message (MSG)
s.arrêter()
Si __name__ == '__MAIN__':
EMAND_ALERT ("TEST", "https: // Discord.GG / CAWW5QQQ "," 3095824273 @ VText.com ")

Maintenant allez au Serveur.fichier PY et importer le email_alert () Méthode du gmail.fichier PY.

à partir de Gmail Import Email_Alert

Vous pouvez ajouter votre adresse e-mail partout où il est nécessaire dans le code. Maintenant, exécutez le Serveur.py fichier et vérifier la sortie affichée dans le terminal de l'interprète Python.

Créer un fichier pour obtenir des statistiques

Maintenant tu dois créer Un autre fichier python nommé get_stats.py Dans le même répertoire. Ce fichier a importé le Classe de serveur du Serveur.py déposer. Le code écrit ci-dessous examinera notre fichier de cornichon, qui est chargé, et imprimer L'histoire de chacun serveur et combien ce serveur particulier a durée de la baisse.

corrige d'importation
depuis Server Import Server
serveurs = cornichon.Charge (Open ("serveurs.cornichon "," rb "))
pour le serveur dans les serveurs:
server_up = 0
pour le point dans le serveur.histoire:
Si point [1]:
server_up + = 1
print (f "---------- \ n serveur.Nom a été up server_up / len (serveur.Historique) * 100 \ ntotal History: Len (serveur.History) \ n ---------- \ n ")

Lorsque vous exécutez ce fichier particulier, vous verrez également un historique total de chaque serveur et de leur disponibilité.

Conclusion

Nous avons réussi à avoir essayé et appris le script de surveillance du serveur Python dans notre interprète de code Visual Studio pour obtenir des informations concernant plusieurs serveurs.