[PYTHON] Surveillez régulièrement la réponse HTTP du serveur Web

Si le serveur Web tombe en panne, il vous en informera par Gmail

J'ai écrit un tel scénario. ** (Cependant, je ne vérifie que lorsque l'ordinateur est en marche. Dois-je l'exécuter régulièrement sur un PC qui fonctionne toute la journée ou sur un autre serveur?) **

Autre que Gmail, vous pouvez l'utiliser en modifiant le serveur SMTP et le numéro de port.

Il ne devrait pas arriver que le serveur Web soit en panne lorsque vous le remarquez, mais cela arrive occasionnellement. Je n'ai ni l'énergie ni les ressources pour présenter Zabbix, ou c'est un peu gênant, alors cette fois j'ai décidé de le vérifier régulièrement depuis mon ordinateur personnel. Au fait, j'ai essayé d'enregistrer le résultat dans le stockage local.

scénario

Dans le script ci-dessous, envoyez un HTTP GET et si vous rencontrez des problèmes, Un script Python qui vous avertira par e-mail.

Nous avons confirmé l'opération sur Python3.3 et Windows. Si vous possédez un Mac ou une autre version de Python, veuillez le réparer en temps opportun.

(Nous ne sommes pas responsables des dommages causés par l'exécution du script, veuillez donc l'utiliser à vos propres risques.)

webtest.py


#!/usr/bin/python
# coding: UTF-8
#Outil de surveillance de serveur Web
import http.client,datetime,os

#============Éléments de réglage==============
#Compte G-mail
gmail_sender = 'Avec ton [email protected]'
#Mot de passe G-mail
gmail_passwd = 'Votre mot de passe'
#Destination de l'e-mail d'erreur
gmail_to = 'Adresse e-mail Soshinsaki @'
#Sujet du courriel
mail_subject =  'Il y a une erreur de serveur'
#Serveur à vérifier
servers = ("www.Votre Saito 1.com","www.Votre site 2.net")
#Répertoire de destination de l'enregistrement du journal(Chemin relatif)
log_dir = "webtestlog"
#=================================

import smtplib
from email.mime.text import MIMEText

#envoyer un e-mail
def sendmail(data):
	global gmail_sender,gmail_passwd,gmail_to,mail_subject
	TEXT = data
	#se connecter
	server = smtplib.SMTP('smtp.gmail.com', 587)
	server.ehlo()
	server.starttls()
	server.login(gmail_sender, gmail_passwd)

	message = MIMEText(data,"plain","UTF-8")
	message["Subject"] = mail_subject
	message["From"] = gmail_sender
	message["To"] = gmail_to

	try:
	    server.sendmail(gmail_sender, [gmail_to], message.as_string())
	    print ('email sent')
	except Exception as e:
		print (e)
		print ('error sending mail')

	server.quit()


result = ""
error_detected = False


#Le format du résultat. Si vous personnalisez cela, vous pouvez ajouter des informations plus détaillées.
def format_result(address,response):
	return address +"  "+ str(response.status) + "   " + response.reason

#Vérifiez le répertoire racine
def checkroot(address):
	global result,error_detected
	conn = http.client.HTTPConnection( address )
	try:
		conn.request( "GET", "/" )
	except:
		result = result + address + " CANNOT GET\n"
		error_detected = True
		return
	response = conn.getresponse()
	if response.status != 200:
		error_detected = True
	result = result + format_result(address,response) + "\n"
	conn.close()

#Vérifiez tous les serveurs ici
for each in servers:
	checkroot(each)


if not os.path.isdir(log_dir):
	os.mkdir(log_dir)

now = datetime.datetime.now()
#Incorporer les informations de temps
result = str(now) + "\n" + result
#Enregistrer la réponse
filename = log_dir+"\log_"+now.strftime("%y-%m-%d")+".txt";
f = open(filename, 'a') #Mode addendum
f.write(result) #résultat
f.close()


#Envoyer un e-mail en cas d'erreur
if error_detected:
	sendmail(result);

Résultat d'exécution

En ce moment, j'ose faire une erreur dans l'URL et générer une erreur, mais si une erreur 500 se produit ou une erreur se produit lors de l'exécution de HTTP GET Vous recevrez un e-mail comme celui-ci.

result.png

Création de fichiers par lots

Je ne pense pas que le script python puisse être exécuté directement, je vais donc créer un fichier batch. (Supposons que le script webtest.py se trouve dans C: \ bin.)

webtest.bat


cd C:\bin
python webtest.py

Si vous ne cd, vous ne trouverez pas webtest.py! Veuillez noter que l'erreur se produira.

Planificateur

Essayez d'exécuter le script ci-dessus une fois, et s'il fonctionne correctement, planifiez-le ensuite. Cette fois, j'ai décidé de l'exécuter régulièrement avec le planificateur de tâches Windows.

Panneau de configuration> Recherche par "Planification"> Tâche de planification

n.png

Lorsque le planificateur de tâches démarre, créez-le de manière appropriée avec "Créer une tâche de base". Gardez la gâchette «tous les jours». (Vous pouvez le changer plus tard dans un court laps de temps) Lorsque vous sélectionnez le programme, sélectionnez le fichier de commandes précédent.

Vérifiez toutes les X minutes

Modifiez le déclencheur. fsa.png

Mettre en arrière-plan

Il est bruyant d'avoir un aperçu de l'invite de commande à chaque fois, alors cachez-le.

Sur l'écran des propriétés, tapez Changer d'utilisateur ou de groupe> SYSTÈME et OK C'est OK si "Compte utilisateur utilisé lors de l'exécution de la tâche:" devient "NT AUTHORITY \ SYSTEM".

aa.png

Recommended Posts

Surveillez régulièrement la réponse HTTP du serveur Web
Django renvoie le contenu du fichier sous forme de réponse HTTP
L'histoire du remontage du serveur d'application
Visualisez l'état de la réponse du recensement national 2020
Démarrez le serveur Web dans le répertoire actuel
J'ai essayé le serveur asynchrone de Django 3.0
[Zabbix] Le temps de réponse de la surveillance Web inclut-il les fichiers image, etc.?
Changer le serveur Batfish de destination de pybatfish
Publier le répertoire actuel sur le serveur Web
Lancer un serveur HTTP dans le répertoire courant
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
L'histoire du lancement d'un serveur Minecraft depuis Discord
Visualisation de la connexion entre le malware et le serveur de rappel
Exécuter une commande sur le serveur Web et afficher le résultat
Créer un serveur Web en langage Go (net / http) (1)
Obtenez l'URL de la destination de la redirection HTTP en Python
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
J'ai essayé de réécrire le serveur WEB de la 1ère édition de programmation Linux normale avec C ++ 14
Observation en virgule fixe de données spécifiques sur le Web en exécutant automatiquement le navigateur Web sur le serveur (Ubuntu16.04) (1) -Installation du navigateur Web-
Une collection de commandes que vous devez connaître en isolant la cause du dépannage (édition serveur)