Maison >développement back-end >tutoriel php >Système de collecte de journaux implémenté en PHP
Cet article présente principalement le système de collecte de journaux implémenté en PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Les affaires récentes impliquent la collecte de journaux de serveurs distants. , dans l'idée de limiter l'expansion de la pile technologique, l'a implémenté en utilisant PHP
Il y a quelques petits points qui nécessitent une attention particulière lors du processus de mise en œuvre, qui sont enregistrés comme suit :
1. Acquisition active. Parce qu'il existe de nombreux serveurs. Si vous utilisez une architecture telle que Flume, vous devez installer un logiciel sur chaque serveur, ce qui entraîne des coûts d'exploitation et de maintenance. Nous utilisons donc la méthode d'acquisition active par le collecteur. . Il n'est pas nécessaire d'installer un logiciel sur le producteur (serveur).
2. Chaque serveur est configuré avec des autorisations de connexion SSH. Vous pouvez utiliser l'extension ssh2 de PHP pour vous connecter et accéder à distance au contenu du serveur. 🎜>
6. Troncature et compression des journaux. Habituellement, nos opérations et notre maintenance tronquent et compressent les journaux à une heure fixe chaque jour. Il existe donc deux types de fichiers qui doivent être lus : les journaux compressés et non compressés. , qui doivent être traités séparément.
7. Les horodatages dans les journaux ne suffisent pas pour distinguer les demandes en millisecondes. la source et le même UA peuvent être considérés comme une requête.
8. Lisez le répertoire Utilisez readdir pour lire le répertoire distant au format SSH, readdir("ssh2.sft://..."); filtrer les éléments inutiles Une fois le fichier créé, triez-le selon l'heure de création du fichier et traitez-le un par un
9. Si vous utilisez file_get_contents, l'interface ne répondra plus pendant une longue période. . J'ai utilisé fopen et fread pour le lire étape par étape (peu importe sa taille, c'est inutile après chaque lecture un certain nombre de fois, un affichage de progression est affiché
10. Cache de fichier compressé. Après une lecture réussie, enregistrez-le dans le répertoire de cache pour la sauvegarde et la prochaine utilisation. Si le programme échoue ou s'exécute à nouveau, vérifiez d'abord le répertoire de cache, il n'est pas nécessaire de le lire. depuis le réseau.11. Décompressez. Cela entraînera une augmentation spectaculaire de la mémoire de PHP.INI pour augmenter la limite de mémoire. .Enregistrez l'achèvement du traitement du journal de compression.Après avoir traité un fichier compressé, enregistrez-le dans la base de données.Une fois le programme PHP exécuté, il n'est pas nécessaire de répéter le traitement du journal non compressé. . Le journal non compressé montre que ce journal continue de croître. Aucune mise en cache n'est requise. Utilisez les enregistrements de base de données, les pointeurs de fichiers actuels (utilisez ftell, fseek ). jugement Lorsque la date du fichier est différente de la date enregistrée, ou que le fichier est plus petit que la taille du fichier dans l'enregistrement, cela signifie que le fichier a été mis à jour et doit être réinitialisé le pointeur de fichier
15 Utilisez des règles régulières, c'est-à-dire qu'elle peut être distinguée en fonction des espaces et. délimiteurs. Vous pouvez également utiliser la bibliothèque de classes tierce logParser pour traiter. Afin d'économiser de la mémoire, vous pouvez utiliser le mode coroutine Iterator pour renvoyer ligne par ligne
16. Lisez à l'avance l'horodatage du dernier journal (millisecondes), l'IP et l'UA de chaque serveur
17. J'ai utilisé MYSQL pour enregistrer le journal une fois que MYSQL le fera. perdre beaucoup de temps d'exécution. Vous pouvez accumuler 4 000 lignes et les insérer toutes en même temps
.
php écrit une fonction de journal
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!