Python implémente la surveillance en temps réel des fichiers

高洛峰
Libérer: 2017-02-25 09:59:28
original
1898 Les gens l'ont consulté

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
Copier après la connexion

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,
Copier après la connexion

. 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,
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!