monitoring d'applications/environnements php: apm et pinba

Download Monitoring d'applications/environnements PHP: APM et Pinba

If you can't read please download the document

Upload: patrick-allaert

Post on 24-May-2015

3.394 views

Category:

Technology


7 download

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 ?