Transcript
Page 1: Monitoring d'applications/environnements PHP : APM et Pinba

{

Monitoring d'applications/environnements PHP :

APM et Pinba

Davide Mendolia - Patrick Allaert

FORUM PHP Paris 2009

Page 2: Monitoring d'applications/environnements PHP : APM et Pinba

{ Davide Mendolia

● http://davidemendolia.blogspot.com/● [email protected] ou

@davideme (Twitter)● Développeur principal APM.● Contributeur de php-benchmark.● http://www.php-ci.net/● Travaille chez Tuenti.

Page 3: Monitoring d'applications/environnements PHP : APM et Pinba

{● 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!!!

Page 4: Monitoring d'applications/environnements PHP : APM et Pinba

{ Patrick Allaert

● http://patrickallaert.blogspot.com/● [email protected] ou

@patrick_allaert (Twitter)● Développeur principal APM.● Travaille chez eZ Systems (eZ Publish,

eZ Components).● Organisateur PHPBenelux

(http://www.phpbenelux.eu/).

Page 5: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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).

Page 6: Monitoring d'applications/environnements PHP : APM et Pinba

{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.

Page 7: Monitoring d'applications/environnements PHP : APM et Pinba

{ Monitoring : Pourquoi ?

● Besoin en terme de disponibilité grandissant.

● Souci d'économie.● Expérience utilisateur.

Page 8: Monitoring d'applications/environnements PHP : APM et Pinba

{ Monitoring : Pourquoi ?

« Quand j'arrive sur la page d'accueilj'ai une page blanche […] »

« Sérieux? Un moment, je regarde […] »

« Nous sommes au courant du problème,nos ingénieurs ont trouvés la solution.Tout sera rentré dans l'ordre dans5 minutes »

« Ho, oui, vous avez raison!? »

Page 9: Monitoring d'applications/environnements PHP : APM et Pinba

{Monitoring: Présentation

Monitoring du P de LAMP.

En particulier :● gestion d'erreurs en PHP,● performance d'exécution.

Page 10: Monitoring d'applications/environnements PHP : APM et Pinba

{Quelles sont les solutions ?

● Actuelles :● PHP;● Zend Platform.

● Nouveaux venus :● APM (Alternative PHP Monitor);● Pinba.

Page 11: Monitoring d'applications/environnements PHP : APM et Pinba

{PHP : fonctions intégrées

● error_reporting;● display_errors;● error_log;

● fichier,● syslog,

– Windows => journal d'évènements;

● set_error_handler().

Page 12: Monitoring d'applications/environnements PHP : APM et Pinba

{ Zend Platform

Solution commerciale tout-en-un de Zend.

Comprend :● monitoring;● performance;● haute disponibilité;● …

Page 13: Monitoring d'applications/environnements PHP : APM et Pinba

{ APM

● Alternative PHP Monitor.● http://code.google.com/p/peclapm/● @php_apm (Twitter)● Liste de diffusion :

[email protected]● Dédié au monitoring d'erreurs.● Naissance en septembre-octobre 2008.

Page 14: Monitoring d'applications/environnements PHP : APM et Pinba

{

Démo APM !

Page 15: Monitoring d'applications/environnements PHP : APM et Pinba

{ Pourquoi ?

● LAMP + APC + Xdebug● Brique manquante dans le paysage du

logiciel libre.● Problèmes de performance indirectement

lié à la Zend Platform, besoin d'une solution à l'impact minimum.

+ APM (LAMPAXA)

Page 16: Monitoring d'applications/environnements PHP : APM et Pinba

{ Architecture

Page 17: Monitoring d'applications/environnements PHP : APM et Pinba

{ Base de données

eventid INTEGER

ts TEXTtype INTEGER

file TEXTline INTEGER

message TEXT

backtrace TEXT

slow_requestid INTEGER

ts TEXTduration FLOAT

file TEXT

Page 18: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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.

Page 19: Monitoring d'applications/environnements PHP : APM et Pinba

{ Futur

● Déclencheurs :● SNMP;● courrier électronique;● commande paramétrée.

● Backends alternatifs à SQLite :● MySQL;● Memcache;● Tokyo Tyrant.

Page 20: Monitoring d'applications/environnements PHP : APM et Pinba

{ Appel à contribution

Page 21: Monitoring d'applications/environnements PHP : APM et Pinba

{ Pinba

● PHP is not a bottleneck anymore.● http://pinba.org/● Liste de diffusion :

[email protected].● Dédié au monitoring de performance en

temps réel.● Naissance en 2009.

Page 22: Monitoring d'applications/environnements PHP : APM et Pinba

{ Pourquoi ?

● LAMP + APC + Xdebug + APM● LAMPAXAP● Brique manquante dans le paysage PHP.● Collecte de statistiques de performance

dans un environnement de production.

+ Pinba

Page 23: Monitoring d'applications/environnements PHP : APM et Pinba

{ Architecture

Page 24: Monitoring d'applications/environnements PHP : APM et Pinba

{

Démo Pinba « par défaut » !

Page 25: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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).

Page 26: Monitoring d'applications/environnements PHP : APM et Pinba

{

Démo Pinba « timers » !

Page 27: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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.

Page 28: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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}

Page 29: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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) { [...] } }}

Page 30: Monitoring d'applications/environnements PHP : APM et Pinba

{ Tables

Le plugin Pinba fourni deux types de tables :● tables de données brutes;● rapports.

Page 31: Monitoring d'applications/environnements PHP : APM et Pinba

{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.

Page 32: Monitoring d'applications/environnements PHP : APM et Pinba

{ Rapports

● info;

● 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.

Page 33: Monitoring d'applications/environnements PHP : APM et Pinba

{ Champs des rapports

● req_count;

● req_per_sec;● req_time_total;

● req_time_percent;● req_time_per_sec;

● ru_utime_total;

● ru_utime_percent;● ru_utime_per_sec;

● ru_stime_total;

● ru_stime_percent;● ru_stime_per_sec;

● traffic_total;● traffic_percent;

● traffic_per_sec.

Page 34: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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.

Page 35: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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'

Page 36: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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'

Page 37: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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'

Page 38: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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'

Page 39: Monitoring d'applications/environnements PHP : APM et Pinba

{ Performance

● Overhead +/- 2 µs/requête sur un portable;

● invariable de la disponibilité de MySQL (rappel: protocole UDP).

Page 40: Monitoring d'applications/environnements PHP : APM et Pinba

{ 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.

Page 41: Monitoring d'applications/environnements PHP : APM et Pinba

{

Questions ?


Top Related