monitoring d'applications/environnements php: apm et pinba
DESCRIPTION
Présentation de l'Altenative PHP Monitor (APM): une solution de monitoring d'erreurs et de Pinba: une solution de monitoring de performance.TRANSCRIPT
- 1. Monitoring d'applications/environnements PHP: APM et Pinba DavideMendolia - PatrickAllaert FORUM PHP Paris 2009
2. Davide Mendolia
- http://davidemendolia.blogspot.com/
3. [email protected] ou @davideme(Twitter) 4. Dveloppeur principalAPM . 5. Contributeur dephp-benchmark . 6. http://www.php-ci.net/ 7. Travaille chezTuenti . 8.
- Rseau social , bas Madrid.
9. Plus de 20milliards de pages vues/mois. 10. Premier site web espagnol devant Google, Microsoft et Facebook (Comscore). 11. Environnement de travail international (15diffrentes nationalits). 12. On recherche des dveloppeurs!!! 13. Patrick Allaert
- http://patrickallaert.blogspot.com/
14. [email protected] ou @patrick_allaert(Twitter) 15. Dveloppeur principalAPM . 16. Travaille chezeZSystems(eZPublish, eZComponents). 17. OrganisateurPHPBenelux ( http://www.phpbenelux.eu/ ). 18. Patrick Allaert
- Dmarre la programmation avec PHP 3.
19. Dix ans d'vanglisme sur le Logiciel Libre. 20. Contributions :
- PHP (ext/ldap, QA: PHPT),
21. KDESvn (client Subversion pour KDE), 22. XOof (eXtensible Open Object Oriented Framework), 23. Tabellio (suite collaborative pour assemble parlementaire). 24. Monitoring: Dfinition?
- Activit de surveillance et de mesure.
25. Domaines:
- l'tat physique d'une machine;
26. la charge d'une machine; 27. disponibilit applicative; 28. les messages inscrits en logs systmes; 29. les performances du rseau; 30. les attaques connues. 31. Monitoring: Pourquoi?
- Besoin en terme de disponibilit grandissant.
32. Souci d'conomie. 33. Exprience utilisateur. 34. Monitoring: Pourquoi? Quand j'arrive sur la page d'accueil j'ai une page blanche [] Srieux? Un moment, je regarde [] Nous sommes au courant du problme, nos ingnieurs ont trouvs la solution. Tout sera rentr dans l'ordre dans 5minutes Ho, oui, vous avez raison!? 35. Monitoring: Prsentation
- Monitoring du P de LAMP. En particulier:
- gestion d'erreurs en PHP,
- 36. performance d'excution.
37. Quelles sont les solutions ?
- Actuelles:
- PHP;
38. Zend Platform. Nouveaux venus:
- APM (Alternative PHP Monitor);
39. Pinba. 40. PHP: fonctions intgres
- error_reporting;
41. display_errors; 42. error_log;
- fichier,
43. syslog,
- Windows => journal d'vnements;
set_error_handler(). 44. Zend Platform
- Solution commercialetout-en-unde Zend. Comprend:
- monitoring;
- 45. performance;
46. haute disponibilit; 47. 48. APM
- A lternativeP HPM onitor.
49. http://code.google.com/p/peclapm/ 50. @php_apm(Twitter) 51. Liste de diffusion: [email_address] 52. Ddi au monitoring d'erreurs. 53. Naissance en octobre 2008. 54. Dmo APM ! 55. Pourquoi ?
- LAMP + APC + Xdebug
56. Brique manquante dans le paysage du logiciel libre. 57. Problmes de performance indirectement li la Zend Platform, besoin d'une solution l'impact minimum. + APM (LAMPAXA) 58. Architecture 59. Base de donnes event id INTEGER ts TEXT type INTEGER file TEXT line INTEGER message TEXT backtrace TEXT slow_request id INTEGER ts TEXT duration FLOAT file TEXT 60. Fonctions PHP
- voidapm_get_events (void)
- Imprime une table HTML remplie desvnementsenregistrs dans la base de donnes en ordre inverse.
voidapm_get_slow_requests (void)
- Imprime une table HTML remplie desrequtes lentesenregistres dans la base de donnes en ordre inverse.
61. Futur
- Dclencheurs:
- SNMP;
62. courrier lectronique; 63. commande paramtre. Backends alternatifs SQLite:
- MySQL;
64. Memcache; 65. Tokyo Tyrant. 66. Appel contribution 67. Pinba
- P HP i sn ot ab ottlenecka nymore.
68. http://pinba.org/ 69. Liste de diffusion: [email_address] . 70. Ddi au monitoring de performance en temps rel. 71. Naissance en 2009. 72. Pourquoi ?
- LAMP + APC + Xdebug + APM
73. LAMPAXAP 74. Brique manquante dans le paysage PHP. 75. Collecte de statistiques de performance dans un environnement de production. + Pinba 76. Architecture 77. Dmo Pinba ! 78. Donnes envoyes
- string hostname rsultat de gethostname();
79. int request_count numro de la requte servie par le processus; 80. string server_name $_SERVER["SERVER_NAME"]; 81. string script_name $_SERVER["SCRIPT_NAME"]; 82. int document_size taille de la rponse; 83. int memory_peak pic d'allocation mmoire; 84. float request_time temps pass traiter la requte; 85. float ru_utime utilisation de ressource (utilisateur); 86. float ru_stime utilisation de ressource (systme); 87. array timers tableau de timers (optionnel). 88. Fonctions PHP
- resourcepinba_timer_start (array tags[, array data])
- Cre et dmarre un nouveau timer.
boolpinba_timer_stop (resource timer)
- Arrte un timer.
boolpinba_timers_stop (void)
- Arrte tous les timers.
boolpinba_script_name_set (string script_name)
- Dfini un nom de script la place de $_SERVER['SCRIPT_NAME'] utilis par dfaut.
89. Fonctions PHP
- arraypinba_timer_get_info (resource timer)
- Retourne les donnes lies un timer.
90. Exemple: 91. array(4) { ["value"]=>float(0.0213) ["tags"]=>array(1) { ["foo"]=>string(3) "bar" } ["started"]=>bool(true) ["data"]=>NULL } 92. Fonctions PHP
- arraypinba_get_info (void)
- Retourne toutes les donnes lies Pinba.
93. 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) { [...] } } } 94. Tables
- Le plugin Pinba fourni deux types de tables:
- tables de donnes brutes;
- 95. rapports.
96. Tables de donnes brutes
- request :
- enregistre toutes les donnes,
97. buffer circulaire d'une taille donne; timer :
- enregistre les donnes relatives aux timers;
tag :
- enregistre de manire unique les tags;
timertag :
- enregistre l'association entre tags et timers.
98. Rapports
- info;
99. report_by_script_name; 100. report_by_server_name; 101. report_by_hostname; 102. report_by_server_and_script; 103. report_by_hostname_and_script; 104. report_by_hostname_and_server; 105. report_by_hostname_server_and_script. 106. Champs des rapports
- req_count;
107. req_per_sec; 108. req_time_total; 109. req_time_percent; 110. req_time_per_sec; 111. ru_utime_total; 112. ru_utime_percent; 113. ru_utime_per_sec;
- ru_stime_total;
114. ru_stime_percent; 115. ru_stime_per_sec; 116. traffic_total; 117. traffic_percent; 118. traffic_per_sec. 119. Rapports de tag(s)
- Deux types de rapports:
- tag info;
- 120. tag report.
Chacun d'eux tant disponibles en deux versions:
- pour 1 tag;
121. pour 2 tags. 122. Tag info pour 1 tag Donnes des timers regroupes par la valeur d'un tag spcifi. 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 =latin1COMMENT = 'tag_info:foo' 123. Tag info pour 2 tags Donnes des timers regroupes par la valeur de deux tags spcifis. 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 =latin1COMMENT = 'tag2_info:foo,bar' 124. Tag report pour 1 tag Donnes des timers regroupes par script et par la valeur d'un tag spcifi. 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 =latin1COMMENT = 'tag_report:foo' 125. Tag report pour 2 tags Donnes des timers regroupes par script et par la valeur de deux tags spcifis. 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 =latin1COMMENT = 'tag2_report:foo,bar' 126. Performance
- Overhead +/- 2 s/requte sur un ordinateur commun;
127. invariable de la disponibilit de MySQL (rappel: protocole UDP). 128. Crdits
- Andrei Nigmatulin - initial design and first implementation.
129. Alexey Rybak - design, ideas and lots of (useful) critics. 130. Special thanks to Sergey Frolovichev. 131. Current implementation is done by Antony Dovgal. 132. Questions ? Suggestions ?