Maison  >  Article  >  développement back-end  >  Système de collecte de journaux implémenté en PHP

Système de collecte de journaux implémenté en PHP

不言
不言original
2018-04-18 13:59:592214parcourir

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. 🎜>

3. Structure des journaux du serveur Unifiée. Les fichiers journaux sur chaque serveur sont placés selon les mêmes règles de répertoire pour simplifier la logique du programme

4. programme en cours d'exécution, en mode CLI. Veuillez noter que le problème du fichier INI


5. Parfois, en raison de problèmes de réseau, la connexion ou la vérification SSH échoue, retardez simplement et réessayez. 🎜>


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

<.> Sinon, vous pouvez directement positionner (fseek) pour continuer à partir de la dernière position traitée

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

18 En plus de l'échec de la connexion SSH, une demi-ligne de logs sera lue, provoquant la décomposition. échouer, et il lancera également Une exception se produit. Attrapez-le par le programme principal et exécutez-le à nouveau


Recommandations associées :


journal de sortie php

.

php écrit une fonction de journal


php implémente 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!

Déclaration:
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