Lorsque les exigences de stabilité de l'entreprise sont relativement élevées, afin de détecter les problèmes à temps, l'exploitation et la maintenance doivent parfois analyser les journaux d'application en temps réel. Lorsqu'une certaine condition est remplie, une alarme est émise immédiatement au lieu d'attendre passivement. pour que des problèmes surviennent. Pour le résoudre, par exemple, vous devez surveiller les $request_time et $upstream_response_time de nginx, analyser les requêtes les plus chronophages, puis améliorer le code. À ce stade, vous devez analyser les journaux. en temps réel. Si vous trouvez de longues déclarations, vous les alarmerez et leur rappellerez. Bien entendu, c'est l'un des scénarios d'application qui peut également être appliqué à n'importe quel endroit où les fichiers doivent être jugés ou analysés. . Aujourd'hui, nous allons voir comment utiliser Python pour surveiller des fichiers en temps réel. Je vais vous donner trois exemples de méthodes :
La première méthode :
.C'est le plus simple et le plus facile à comprendre, car tout le monde sait qu'il existe une commande tail sous Linux, vous pouvez donc directement utiliser la fonction Popen() pour appeler cette commande afin d'obtenir le résultat. Le code est le suivant :
logfile='access.log' command='tail -f ‘+logfile+'|grep “timeout”‘ popen=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) while True: line=popen.stdout.readline().strip() print line
Deuxième type :
Utilisez Python pour faire fonctionner les fichiers. Utilisez tell() et seek(). méthodes de l'objet fichier pour obtenir respectivement la position actuelle du fichier et la position vers laquelle se déplacer. Le code est le suivant :
import time file = open(‘access.log') while 1: where = file.tell() line = file.readline() if not line: time.sleep(1) file.seek(where) else: print line,
. La troisième méthode :
Utilisez le rendement de Python pour implémenter une fonction génératrice, puis appelez la fonction génératrice, de sorte que lorsque le fichier journal change, une nouvelle ligne soit imprimée. Le code est le suivant :
import time def follow(thefile): thefile.seek(0,2) while True: line = thefile.readline() if not line: time.sleep(0.1) continue yield line if __name__ == ‘__main__': logfile = open(“access-log”,”r”) loglines = follow(logfile) for line in loglines: print line,
Enfin, expliquez l'utilisation de la fonction seek(). Cette fonction reçoit 2 paramètres : file.seek(off, whence=0), éloigne les marqueurs d'opération (pointeurs de fichier) du fichier, les nombres positifs se déplacent vers la direction de fin et les nombres négatifs se déplacent vers la direction de début. Si le paramètre whence est défini, la position de départ définie par whence doit prévaloir 0 représente le début, 1 représente la position actuelle et 2 représente la position de fin du fichier.
Les trois méthodes courantes ci-dessus peuvent être implémentées selon votre propre logique métier.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun, et j'espère également que tout le monde s'abonnera au site Web PHP chinois.
Pour plus d'articles liés à la surveillance des fichiers en temps réel par Python, veuillez faire attention au site Web PHP chinois !