Question

J'ai un problème avec PHP-FPM l'enregistrement d'un événement unique que de multiples événements.Prenez par exemple la trace de la pile ci-dessous:

[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "NOTICE: PHP message: PHP Fatal error:  Uncaught exception 'Zend_View_Exception' with message 'script 'new-layout.mobile.phtml' not found...."
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "Stack trace:"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#0 /usr/share/nginx/html/site.com/142-webapp/library/Zend/View/Abstract.php(884): Zend_View_Abstract->_script('new-layout.mobi...')"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#1 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Layout.php(796): Zend_View_Abstract->render('new-layout.mobi...')"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#2 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Layout/Controller/Plugin/Layout.php(143): Zend_Layout->render()"
[30-Jul-2014 05:38:50] WARNING: [pool www] child 11606 said into stderr: "#3 /usr/share/nginx/html/site.com/142-webapp/library/Zend/Controller/Plugin/Broker...."

Comme vous pouvez le voir, chaque ligne de la trace de la pile est effectivement un événement séparé avec sa propre timestamp.Cela pose un problème lors du transfert des journaux vers un autre service de l'analyse parce qu'alors chaque trace de la pile sera brisé quand elle devrait être considérée comme un événement.Pour le moment je suis en utilisant Kibana 3 et c'est un cauchemar de visualisation et de gestion des traces de pile car chaque ligne est séparée de l'événement et les événements individuels ne sont pas toujours dans l'ordre chronologique.

Comment puis-je faire de php-fpm enregistrer chaque trace de la pile comme un l'événement ?

Était-ce utile?

La solution

Malheureusement pas

PHP-FPM simplement les journaux de chaque ligne de sortie PHP comme un événement distinct.Il n'y a rien que vous pouvez faire avec PHP-FPM pour changer cela.

Le Code PHP

Vous aurez besoin de "fixer" dans votre application (code PHP).Il y a 3 façons que vous pouvez influencer la façon dont PHP rapports d'erreurs, et vous aurez probablement envie d'utiliser tous les 3:

  • Enregistrer un gestionnaire d'erreur personnalisé avec set_error_handler().Ce gestionnaire est appelé sur toutes les erreurs sauf E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, et la plupart de E_STRICT soulevées dans le fichier où set_error_handler() est appelé.

  • Enregistrer une coutume gestionnaire d'exception avec set_exception_handler().Ce gestionnaire est appelé lorsqu'une exception non interceptée se produit.

  • Enregistrer un personnalisé fonction d'arrêt avec register_shutdown_function().Cette fonction est appelée après l'exécution du script est terminée ou exit() est appelé.Celui-ci est utile pour la détection des erreurs qui ne sont pas traitées avec le gestionnaire d'erreur.

Journal de la bibliothèque

Je peux vous conseiller de regarder Monolog.C'est un PSR-3 plainte bibliothèque de journalisation qui facilite aussi ce que j'ai décrit ci-dessus.

En outre, il a une liste impressionnante de "gestionnaires" qui peut écrire les journaux à toutes sortes de services.Les Chances sont que le service que vous utilisez actuellement est parmi eux!

Alternative

Une autre option est de créer un script de proxy qui va lire le PHP-FPM fichiers journaux et les tampons des lignes jusqu'à ce qu'un "événement" est recueillie.Ensuite écrit que comme une seule entrée pour le service que vous utilisez.

Je vous conseille pas pour aller dans cette voie.L'écriture d'un script de ce type peut être difficile et il est très enclin à l'erreur.Enregistrement à partir de l'application elle-même est beaucoup plus stable et fiable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top