| Version 8 (modified by squidly, 15 months ago) (diff) |
|---|
Problèmatique
Le nombre de descripteurs ouvert peut grandement influer sur les performances du système.
Le fait d'avoir une directive de log dans chaque vhost force apache à utiliser des descripteurs différents pour chaque vhost. Sur un serveur hébergent de nombreux site, on arrive vite dans les limites de cette techniques, vu que le nombre de descripteur n'est pas extensible à l'infini.
Même si des commande comme "ulimit" permettent d'augmenter les limites attribué aux processus, ca entraîne a termes des gros problème de performance.
Solutions possibles
Deux solution sont possible pour palier a ce problème:
- utiliser un descripteur de fichier global au niveau d'apache.
- utiliser les piped_logs
Descripteur de fichier global
Au lieu de faire disposer chaque vhost de son descripteur de fichier personnel, dans le cadre d'alternc il peut être intéressant d'utiliser un fichier de log global déclaré dans la conf apache générale. C'est ce qui était fait avec les AlternC < 1.0 avec le fichier global access.log .
Par contre, au lieu de l'archiver tel quel, ce fichier de log peut ensuite être parsé très simplement en fonction des vhost par l'utilitaire split-logs présent dans apache. Le script retourne donc en sortie des fichiers de logs pour chaque virtual hosts.
L'inconvénient majeur est que du coup ces fichiers ne sont pas mis a jours en temps réel, mais a chaque fois que le fichier principal est splité.
Les piped_logs
Le concept des piped_logs est d'envoyer les logs directement à un script qui se charge du traitement, donc d'écrire les logs dans les fichiers concerné.
Le fait de passer les logs à un script permets d'obtenir la meilleure souplesse puisque l'on peut écrire un script faisant à peu près tous ce qu'on veut des logs. Exemple : http://httpd.apache.org/docs/2.0/logs.html#piped
Les logs étant directement passé au script on évite d'avoir à parser un fichier global bien que le concept soit similaire. On peux même imaginer certains traitement fait à la volée.
Centralisation
Il serait possible de le faire avec syslog-ng mais le nombre important de log que peut envoyer un alternc peut être tellement conséquent que le programme pourrait bloquer et donc d'une pas loguer les autres services.
On peut également se servir d'un piped log qui permettrais d'écrire sur une partition ou un serveur spécifique. Apache intègre d'ailleurs un script rotalelogs : http://httpd.apache.org/docs/2.4/programs/rotatelogs.html Ce script servant à recevoir les logs peut les écrire dans des dossiers spécifiques en fonctions de divers paramètre ( notamment la date ).
la page suivante bien qu'ancienne donne de bonne piste de reflexion sur le sujet : http://slacksite.com/apache/logging.php
