{   FORUM PHP Paris 2009



             Monitoring
d'applications/environnements PHP :
            APM et Pinba

       D...
{          Davide Mendolia
●   http://davidemendolia.blogspot.com/
●   dmendolia@php.net ou
    @davideme (Twitter)
●   Dé...
{
●   Réseau social, basé à Madrid.
●   Plus de 20 milliards de pages vues/mois.
●   Premier site web espagnol devant Goog...
{            Patrick Allaert
●   http://patrickallaert.blogspot.com/
●   patrickallaert@php.net ou
    @patrick_allaert (T...
{
●
                Patrick Allaert
    Démarre la programmation avec PHP 3.
●   Dix ans d'évangélisme sur le Logiciel
   ...
{       Monitoring : Définition ?
●   Activité de surveillance et de mesure.
●   Domaines :
    ●   l'état physique d'une ...
{    Monitoring : Pourquoi ?
●   Besoin en terme de disponibilité
    grandissant.
●   Souci d'économie.
●   Expérience ut...
{   Monitoring : Pourquoi ?
                           « Quand j'arrive sur la page d'accueil
                           j...
{
Monitoring: Présentation
Monitoring du P de LAMP.


En particulier :
●   gestion d'erreurs en PHP,
●   performance d'exé...
{
Quelles sont les solutions ?
●   Actuelles :
    ●   PHP;
    ●   Zend Platform.
●   Nouveaux venus :
    ●   APM (Alter...
{   PHP : fonctions intégrées
●   error_reporting;
●   display_errors;
●   error_log;
    ●   fichier,
    ●   syslog,
   ...
{           Zend Platform
Solution commerciale tout-en-un de Zend.
Comprend :
●   monitoring;
●   performance;
●   haute d...
{                   APM
●   Alternative PHP Monitor.
●   http://code.google.com/p/peclapm/
●   @php_apm (Twitter)
●   List...
{
    Démo APM !
{             Pourquoi ?
●   LAMP + APC + Xdebug + APM (LAMPAXA)
●   Brique manquante dans le paysage du
    logiciel libr...
{   Architecture
{          Base de données

           event            slow_request
    id          INTEGER   id      INTEGER
    ts     ...
{           Fonctions PHP
●   void apm_get_events(void)
     Imprime une table HTML remplie des
     évènements enregistré...
{                       Futur
●   Déclencheurs :
    ●   SNMP;
    ●   courrier électronique;
    ●   commande paramétrée....
{   Appel à contribution
{                   Pinba
●   PHP is not a bottleneck anymore.
●   http://pinba.org/
●   Liste de diffusion :
    pinba-en...
{              Pourquoi ?
●   LAMP + APC + Xdebug + APM + Pinba
●   LAMPAXAP
●   Brique manquante dans le paysage PHP.
●  ...
{   Architecture
{
Démo Pinba « par défaut » !
{
●
             Données envoyées
    string hostname – résultat de gethostname();
●   int request_count – numéro de la re...
{
    Démo Pinba « timers » !
{
●
                Fonctions PHP
    resource pinba_timer_start(array tags[, array
    data])
      Crée et démarre un no...
{
●
               Fonctions PHP
    array pinba_timer_get_info(resource timer)
      Retourne les données liées à un time...
{
●
                 Fonctions PHP
    array pinba_get_info(void)
      Retourne toutes les données liées à Pinba.
      E...
{                 Tables
Le plugin Pinba fourni deux types de
tables :
●   tables de données brutes;
●   rapports.
{
●
    Tables de données brutes
    request :
    ●   enregistre toutes les données,
    ●   buffer circulaire d'une tail...
{
●   info;
                  Rapports

●   report_by_script_name;
●   report_by_server_name;
●   report_by_hostname;
●   ...
{
●
        Champs des rapports
    req_count;          ●   ru_stime_total;
●   req_per_sec;        ●   ru_stime_percent;
...
{      Rapports des tag(s)
Deux types de rapports :
●   « tag info »;
●   « tag report ».
Chacun d'eux étant disponibles e...
{      Tag info pour 1 tag
Données des timers regroupées par la
valeur d'un tag spécifié.
CREATE TABLE `tag_info_foo` (
  ...
{     Tag info pour 2 tags
Données des timers regroupées par la
valeur de deux tags spécifiés.
CREATE TABLE `tag_info_foo_...
{    Tag report pour 1 tag
Données des timers regroupées par script
et par la valeur d'un tag spécifié.
CREATE TABLE `tag_...
{    Tag report pour 2 tags
Données des timers regroupées par script
et par la valeur de deux tags spécifiés.
CREATE TABLE...
{             Performance
●   Overhead +/- 2 µs/requête sur un
    portable;
●   invariable de la disponibilité de MySQL
 ...
{                  Crédits
●   Andrei Nigmatulin - initial design and first
    implementation.
●   Alexey Rybak - design,...
{
    Questions ?
Prochain SlideShare
Chargement dans…5
×

Monitoring d'applications/environnements PHP : APM et Pinba

1 542 vues

Publié le

PHP s'est industrialisé, aujourd'hui, un besoin de monitoring existe au niveau des applications écrites en PHP et de la plateforme sur laquelle elles reposent.

En parallèle, le besoin de montée en charge et de tolérance de faute est grandissant, en particulier avec le cloud computing, il devient donc crucial d'avoir la possibilité de surveiller l'ensemble de son infrastructure, à cette fin, cette session présentera une solution entièrement bâtie sur du logiciel libre.

Alternative PHP Monitor (APM) : extension PHP non-intrusive permettant la capture de divers évènements, tels que les erreurs et lenteurs d'exécution.

Pinba : extension PHP permettant la collecte en base de données d'informations relatives à l'exploitation de vos applications en production. De multiples rapports peuvent ensuite être élaborés pour fournir des statistiques, notamment de temps d'exécution sur des parties de codes.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 542
Sur SlideShare
0
Issues des intégrations
0
Intégrations
9
Actions
Partages
0
Téléchargements
8
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Monitoring d'applications/environnements PHP : APM et Pinba

  1. 1. { FORUM PHP Paris 2009 Monitoring d'applications/environnements PHP : APM et Pinba Davide Mendolia - Patrick Allaert
  2. 2. { Davide Mendolia ● http://davidemendolia.blogspot.com/ ● dmendolia@php.net ou @davideme (Twitter) ● Développeur principal APM. ● Contributeur de php-benchmark. ● http://www.php-ci.net/ ● Travaille chez Tuenti.
  3. 3. { ● Réseau social, basé à Madrid. ● Plus de 20 milliards de pages vues/mois. ● Premier site web espagnol devant Google, Microsoft et Facebook (Comscore). ● Environnement de travail international (15 différentes nationalités). ● On recherche des développeurs!!!
  4. 4. { Patrick Allaert ● http://patrickallaert.blogspot.com/ ● patrickallaert@php.net ou @patrick_allaert (Twitter) ● Développeur principal APM. ● Travaille chez eZ Systems (eZ Publish, eZ Components). ● Organisateur PHPBenelux (http://www.phpbenelux.eu/).
  5. 5. { ● Patrick Allaert Démarre la programmation avec PHP 3. ● Dix ans d'évangélisme sur le Logiciel Libre. ● Contributions à : ● PHP (ext/ldap, QA : PHPT), ● KDESvn (client Subversion pour KDE), ● XOo°f (eXtensible Open Object Oriented Framework), ● Tabellio (suite collaborative pour assemblée parlementaire).
  6. 6. { Monitoring : Définition ? ● Activité de surveillance et de mesure. ● Domaines : ● l'état physique d'une machine; ● la charge d'une machine; ● disponibilité applicative; ● les messages inscrits en logs systèmes; ● les performances du réseau; ● les attaques connues.
  7. 7. { Monitoring : Pourquoi ? ● Besoin en terme de disponibilité grandissant. ● Souci d'économie. ● Expérience utilisateur.
  8. 8. { Monitoring : Pourquoi ? « Quand j'arrive sur la page d'accueil j'ai une page blanche […] » « Sérieux? Un moment, je regarde […] » « Ho, oui, vous avez raison!? » « Nous sommes au courant du problème, nos ingénieurs ont trouvés la solution. Tout sera rentré dans l'ordre dans 5 minutes »
  9. 9. { Monitoring: Présentation Monitoring du P de LAMP. En particulier : ● gestion d'erreurs en PHP, ● performance d'exécution.
  10. 10. { Quelles sont les solutions ? ● Actuelles : ● PHP; ● Zend Platform. ● Nouveaux venus : ● APM (Alternative PHP Monitor); ● Pinba.
  11. 11. { PHP : fonctions intégrées ● error_reporting; ● display_errors; ● error_log; ● fichier, ● syslog, – Windows => journal d'évènements; ● set_error_handler().
  12. 12. { Zend Platform Solution commerciale tout-en-un de Zend. Comprend : ● monitoring; ● performance; ● haute disponibilité; ● …
  13. 13. { APM ● Alternative PHP Monitor. ● http://code.google.com/p/peclapm/ ● @php_apm (Twitter) ● Liste de diffusion : apm-dev@googlegroups.com ● Dédié au monitoring d'erreurs. ● Naissance en septembre-octobre 2008.
  14. 14. { Démo APM !
  15. 15. { Pourquoi ? ● LAMP + APC + Xdebug + APM (LAMPAXA) ● Brique manquante dans le paysage du logiciel libre. ● Problèmes de performance indirectement lié à la Zend Platform, besoin d'une solution à l'impact minimum.
  16. 16. { Architecture
  17. 17. { Base de données event slow_request id INTEGER id INTEGER ts TEXT ts TEXT type INTEGER duration FLOAT file TEXT file TEXT line INTEGER message TEXT backtrace TEXT
  18. 18. { Fonctions PHP ● void apm_get_events(void) Imprime une table HTML remplie des évènements enregistrés dans la base de données en ordre inverse. ● void apm_get_slow_requests(void) Imprime une table HTML remplie des requêtes lentes enregistrées dans la base de données en ordre inverse.
  19. 19. { Futur ● Déclencheurs : ● SNMP; ● courrier électronique; ● commande paramétrée. ● Backends alternatifs à SQLite : ● MySQL; ● Memcache; ● Tokyo Tyrant.
  20. 20. { Appel à contribution
  21. 21. { Pinba ● PHP is not a bottleneck anymore. ● http://pinba.org/ ● Liste de diffusion : pinba-engine@googlegroups.com. ● Dédié au monitoring de performance en temps réel. ● Naissance en 2009.
  22. 22. { Pourquoi ? ● LAMP + APC + Xdebug + APM + Pinba ● LAMPAXAP ● Brique manquante dans le paysage PHP. ● Collecte de statistiques de performance dans un environnement de production.
  23. 23. { Architecture
  24. 24. { Démo Pinba « par défaut » !
  25. 25. { ● Données envoyées string hostname – résultat de gethostname(); ● int request_count – numéro de la requête servie par le processus; ● string server_name – $_SERVER["SERVER_NAME"]; ● string script_name – $_SERVER["SCRIPT_NAME"]; ● int document_size – taille de la réponse; ● int memory_peak – pic d'allocation mémoire; ● float request_time – temps passé à traiter la requête; ● float ru_utime – utilisation de ressource (utilisateur); ● float ru_stime – utilisation de ressource (système); ● array timers – tableau de timers (optionnel).
  26. 26. { Démo Pinba « timers » !
  27. 27. { ● Fonctions PHP resource pinba_timer_start(array tags[, array data]) Crée et démarre un nouveau timer. ● bool pinba_timer_stop(resource timer) Arrête un timer. ● bool pinba_timers_stop(void) Arrête tous les timers. ● bool pinba_script_name_set(string script_name) Défini un nom de script à la place de $_SERVER['SCRIPT_NAME'] utilisé par défaut.
  28. 28. { ● Fonctions PHP array pinba_timer_get_info(resource timer) Retourne les données liées à un timer. Exemple: array(4) { ["value"]=>float(0.0213) ["tags"]=>array(1) { ["foo"]=>string(3) "bar" } ["started"]=>bool(true) ["data"]=>NULL }
  29. 29. { ● Fonctions PHP array pinba_get_info(void) Retourne toutes les données liées à Pinba. Exemple: array(9) { ["mem_peak_usage"]=> int(786432) ["req_time"]=> float(0.001529) ["ru_utime"]=> float(0) ["ru_stime"]=> float(0) ["req_count"]=> int(1) ["doc_size"]=> int(0) ["server_name"]=> string(7) "unknown" ["script_name"]=> string(1) "-" ["timers"]=> array(1) { [0]=> array(4) { [...] } } }
  30. 30. { Tables Le plugin Pinba fourni deux types de tables : ● tables de données brutes; ● rapports.
  31. 31. { ● Tables de données brutes request : ● enregistre toutes les données, ● buffer circulaire d'une taille donnée; ● timer : ● enregistre les données relatives aux timers; ● tag : ● enregistre de manière unique les tags; ● timertag : ● enregistre l'association entre tags et timers.
  32. 32. { ● info; Rapports ● report_by_script_name; ● report_by_server_name; ● report_by_hostname; ● report_by_server_and_script; ● report_by_hostname_and_script; ● report_by_hostname_and_server; ● report_by_hostname_server_and_script.
  33. 33. { ● Champs des rapports req_count; ● ru_stime_total; ● req_per_sec; ● ru_stime_percent; ● req_time_total; ● ru_stime_per_sec; ● req_time_percent; ● traffic_total; ● req_time_per_sec; ● traffic_percent; ● ru_utime_total; ● traffic_per_sec. ● ru_utime_percent; ● ru_utime_per_sec;
  34. 34. { Rapports des tag(s) Deux types de rapports : ● « tag info »; ● « tag report ». Chacun d'eux étant disponibles en deux versions : ● pour 1 tag; ● pour 2 tags.
  35. 35. { Tag info pour 1 tag Données des timers regroupées par la valeur d'un tag spécifié. CREATE TABLE `tag_info_foo` ( `tag_value` varchar(32) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `hit_count` int(11) DEFAULT NULL, `timer_value` float DEFAULT NULL ) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag_info:foo'
  36. 36. { Tag info pour 2 tags Données des timers regroupées par la valeur de deux tags spécifiés. CREATE TABLE `tag_info_foo_bar` ( `foo_value` varchar(32) DEFAULT NULL, `bar_value` varchar(32) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `hit_count` int(11) DEFAULT NULL, `timer_value` float DEFAULT NULL ) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag2_info:foo,bar'
  37. 37. { Tag report pour 1 tag Données des timers regroupées par script et par la valeur d'un tag spécifié. CREATE TABLE `tag_report_foo` ( `script_name` varchar(128) DEFAULT NULL, `tag_value` varchar(32) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `hit_count` int(11) DEFAULT NULL, `timer_value` float DEFAULT NULL ) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag_report:foo'
  38. 38. { Tag report pour 2 tags Données des timers regroupées par script et par la valeur de deux tags spécifiés. CREATE TABLE `tag_report_foo_bar` ( `script_name` varchar(128) DEFAULT NULL, `tag1_value` varchar(32) DEFAULT NULL, `tag2_value` varchar(32) DEFAULT NULL, `req_count` int(11) DEFAULT NULL, `hit_count` int(11) DEFAULT NULL, `timer_value` float DEFAULT NULL ) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag2_report:foo,bar'
  39. 39. { Performance ● Overhead +/- 2 µs/requête sur un portable; ● invariable de la disponibilité de MySQL (rappel: protocole UDP).
  40. 40. { Crédits ● Andrei Nigmatulin - initial design and first implementation. ● Alexey Rybak - design, ideas and lots of (useful) critics. ● Special thanks to Sergey Frolovichev. ● Current implementation is done by Antony Dovgal.
  41. 41. { Questions ?

×