monitoring d'applications/environnements php : apm et pinba

41
{ Monitoring d'applications/environnements PHP : APM et Pinba Davide Mendolia - Patrick Allaert FORUM PHP Paris 2009

Upload: idaf1er

Post on 27-Jun-2015

1.109 views

Category:

Documents


3 download

DESCRIPTION

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.

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 ?