SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
{   FORUM PHP Paris 2009



             Monitoring
d'applications/environnements PHP :
            APM et Pinba

       Davide Mendolia - Patrick Allaert
{          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.
{
●   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!!!
{            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/).
{
●
                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).
{       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.
{    Monitoring : Pourquoi ?
●   Besoin en terme de disponibilité
    grandissant.
●   Souci d'économie.
●   Expérience utilisateur.
{   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 »
{
Monitoring: Présentation
Monitoring du P de LAMP.


En particulier :
●   gestion d'erreurs en PHP,
●   performance d'exécution.
{
Quelles sont les solutions ?
●   Actuelles :
    ●   PHP;
    ●   Zend Platform.
●   Nouveaux venus :
    ●   APM (Alternative PHP Monitor);
    ●   Pinba.
{   PHP : fonctions intégrées
●   error_reporting;
●   display_errors;
●   error_log;
    ●   fichier,
    ●   syslog,
        –   Windows => journal d'évènements;
●   set_error_handler().
{           Zend Platform
Solution commerciale tout-en-un de Zend.
Comprend :
●   monitoring;
●   performance;
●   haute disponibilité;
●   …
{                   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.
{
    Démo APM !
{             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.
{   Architecture
{          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
{           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.
{                       Futur
●   Déclencheurs :
    ●   SNMP;
    ●   courrier électronique;
    ●   commande paramétrée.
●   Backends alternatifs à SQLite :
    ●   MySQL;
    ●   Memcache;
    ●   Tokyo Tyrant.
{   Appel à contribution
{                   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.
{              Pourquoi ?
●   LAMP + APC + Xdebug + APM + Pinba
●   LAMPAXAP
●   Brique manquante dans le paysage PHP.
●   Collecte de statistiques de performance
    dans un environnement de production.
{   Architecture
{
Démo Pinba « par défaut » !
{
●
             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).
{
    Démo Pinba « timers » !
{
●
                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.
{
●
               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
      }
{
●
                 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) {
            [...]
          }
        }
      }
{                 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 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.
{
●   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.
{
●
        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;
{      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.
{      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'
{     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'
{    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'
{    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'
{             Performance
●   Overhead +/- 2 µs/requête sur un
    portable;
●   invariable de la disponibilité de MySQL
    (rappel: protocole UDP).
{                  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.
{
    Questions ?

Contenu connexe

En vedette

Pourquoi la documentation compte ?
Pourquoi la documentation compte ?Pourquoi la documentation compte ?
Pourquoi la documentation compte ?sarahhaim shl
 
Utilisation d’eZ Flow sur le site www.kaliop.fr
Utilisation d’eZ Flow sur le site www.kaliop.frUtilisation d’eZ Flow sur le site www.kaliop.fr
Utilisation d’eZ Flow sur le site www.kaliop.frKaliop-slide
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platformKaliop-slide
 
Présentation générale eZ Publish
Présentation générale eZ PublishPrésentation générale eZ Publish
Présentation générale eZ PublishGauthier Garnier
 
Présentation eZ Publish - PHP Québec
Présentation eZ Publish - PHP QuébecPrésentation eZ Publish - PHP Québec
Présentation eZ Publish - PHP QuébecGauthier Garnier
 
Présentation EZ Systems
Présentation EZ SystemsPrésentation EZ Systems
Présentation EZ SystemsVeilleMag
 
eZ publish - Publication instantanée et fort trafic web
eZ publish - Publication instantanée et fort trafic webeZ publish - Publication instantanée et fort trafic web
eZ publish - Publication instantanée et fort trafic webGauthier Garnier
 
Redeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleRedeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleKaliop-slide
 
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...Nicolas Pastorino
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHPNicolas Le Nardou
 
5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en businesseZ Publish Community
 
Livre blanc Smile - Le meilleur des CMS open source
Livre blanc Smile - Le meilleur des CMS open sourceLivre blanc Smile - Le meilleur des CMS open source
Livre blanc Smile - Le meilleur des CMS open sourceNicolas Bariteau
 
Matinale eZ Publish : la personnalisation dynamique
Matinale eZ Publish : la personnalisation dynamiqueMatinale eZ Publish : la personnalisation dynamique
Matinale eZ Publish : la personnalisation dynamiqueSofteam Agency
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarElsassJUG
 
Connecteur eZ Publish/ Magento
Connecteur eZ Publish/ MagentoConnecteur eZ Publish/ Magento
Connecteur eZ Publish/ MagentoInterakting
 
Réalisation d’une plateforme e-commerce de vente de prestations HTML dotée d...
Réalisation d’une plateforme e-commerce de vente de  prestations HTML dotée d...Réalisation d’une plateforme e-commerce de vente de  prestations HTML dotée d...
Réalisation d’une plateforme e-commerce de vente de prestations HTML dotée d...kadzaki
 
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ Publish
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ PublishWebinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ Publish
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ PublishKaliop-slide
 

En vedette (20)

Pourquoi la documentation compte ?
Pourquoi la documentation compte ?Pourquoi la documentation compte ?
Pourquoi la documentation compte ?
 
Utilisation d’eZ Flow sur le site www.kaliop.fr
Utilisation d’eZ Flow sur le site www.kaliop.frUtilisation d’eZ Flow sur le site www.kaliop.fr
Utilisation d’eZ Flow sur le site www.kaliop.fr
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platform
 
Ezpub formation-ezpublish
Ezpub formation-ezpublishEzpub formation-ezpublish
Ezpub formation-ezpublish
 
Présentation générale eZ Publish
Présentation générale eZ PublishPrésentation générale eZ Publish
Présentation générale eZ Publish
 
Présentation eZ Publish - PHP Québec
Présentation eZ Publish - PHP QuébecPrésentation eZ Publish - PHP Québec
Présentation eZ Publish - PHP Québec
 
Présentation EZ Systems
Présentation EZ SystemsPrésentation EZ Systems
Présentation EZ Systems
 
EZ Systems - EZ publish, la plate-forme de gestion de contenu web de nouvell...
EZ Systems -  EZ publish, la plate-forme de gestion de contenu web de nouvell...EZ Systems -  EZ publish, la plate-forme de gestion de contenu web de nouvell...
EZ Systems - EZ publish, la plate-forme de gestion de contenu web de nouvell...
 
eZ publish - Publication instantanée et fort trafic web
eZ publish - Publication instantanée et fort trafic webeZ publish - Publication instantanée et fort trafic web
eZ publish - Publication instantanée et fort trafic web
 
Redeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationaleRedeploiement d’une plateforme eZpublish multisites internationale
Redeploiement d’une plateforme eZpublish multisites internationale
 
Présentation eZ publish
Présentation eZ publishPrésentation eZ publish
Présentation eZ publish
 
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...
Nicolas Pastorino - Distribution de contenu scalable, le multicanal avec REST...
 
Réutilisabilité du code PHP
Réutilisabilité du code PHPRéutilisabilité du code PHP
Réutilisabilité du code PHP
 
5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business
 
Livre blanc Smile - Le meilleur des CMS open source
Livre blanc Smile - Le meilleur des CMS open sourceLivre blanc Smile - Le meilleur des CMS open source
Livre blanc Smile - Le meilleur des CMS open source
 
Matinale eZ Publish : la personnalisation dynamique
Matinale eZ Publish : la personnalisation dynamiqueMatinale eZ Publish : la personnalisation dynamique
Matinale eZ Publish : la personnalisation dynamique
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec Sonar
 
Connecteur eZ Publish/ Magento
Connecteur eZ Publish/ MagentoConnecteur eZ Publish/ Magento
Connecteur eZ Publish/ Magento
 
Réalisation d’une plateforme e-commerce de vente de prestations HTML dotée d...
Réalisation d’une plateforme e-commerce de vente de  prestations HTML dotée d...Réalisation d’une plateforme e-commerce de vente de  prestations HTML dotée d...
Réalisation d’une plateforme e-commerce de vente de prestations HTML dotée d...
 
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ Publish
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ PublishWebinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ Publish
Webinar e-tourisme : Créer une expérience utilisateur riche grâce à eZ Publish
 

Similaire à Monitoring d'applications/environnements PHP : APM et Pinba

Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHPPierre MARTIN
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Modern Data Stack France
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesVincent Composieux
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMPcyruss666
 
Ippon: Doing multi-criteria queries on a Cassandra application (Français)
Ippon: Doing multi-criteria queries on a Cassandra application (Français)Ippon: Doing multi-criteria queries on a Cassandra application (Français)
Ippon: Doing multi-criteria queries on a Cassandra application (Français)DataStax Academy
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraJulien Dubois
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitGeoffrey Bachelet
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de JavascriptOpenska
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0adrienhautot
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005Eric D.
 

Similaire à Monitoring d'applications/environnements PHP : APM et Pinba (20)

Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHP
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
Ippon: Doing multi-criteria queries on a Cassandra application (Français)
Ippon: Doing multi-criteria queries on a Cassandra application (Français)Ippon: Doing multi-criteria queries on a Cassandra application (Français)
Ippon: Doing multi-criteria queries on a Cassandra application (Français)
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec Cassandra
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Boost.SIMD
Boost.SIMDBoost.SIMD
Boost.SIMD
 
Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers git
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de Javascript
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
 

Monitoring d'applications/environnements PHP : APM et Pinba

  • 1. { FORUM PHP Paris 2009 Monitoring d'applications/environnements PHP : APM et Pinba Davide Mendolia - Patrick Allaert
  • 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. { ● 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. { 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. { ● 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. { 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. { Monitoring : Pourquoi ? ● Besoin en terme de disponibilité grandissant. ● Souci d'économie. ● Expérience utilisateur.
  • 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. { Monitoring: Présentation Monitoring du P de LAMP. En particulier : ● gestion d'erreurs en PHP, ● performance d'exécution.
  • 10. { Quelles sont les solutions ? ● Actuelles : ● PHP; ● Zend Platform. ● Nouveaux venus : ● APM (Alternative PHP Monitor); ● Pinba.
  • 11. { PHP : fonctions intégrées ● error_reporting; ● display_errors; ● error_log; ● fichier, ● syslog, – Windows => journal d'évènements; ● set_error_handler().
  • 12. { Zend Platform Solution commerciale tout-en-un de Zend. Comprend : ● monitoring; ● performance; ● haute disponibilité; ● …
  • 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. { Démo APM !
  • 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. { Architecture
  • 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. { 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. { Futur ● Déclencheurs : ● SNMP; ● courrier électronique; ● commande paramétrée. ● Backends alternatifs à SQLite : ● MySQL; ● Memcache; ● Tokyo Tyrant.
  • 20. { Appel à contribution
  • 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. { Pourquoi ? ● LAMP + APC + Xdebug + APM + Pinba ● LAMPAXAP ● Brique manquante dans le paysage PHP. ● Collecte de statistiques de performance dans un environnement de production.
  • 23. { Architecture
  • 24. { Démo Pinba « par défaut » !
  • 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. { Démo Pinba « timers » !
  • 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. { ● 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. { ● 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. { Tables Le plugin Pinba fourni deux types de tables : ● tables de données brutes; ● rapports.
  • 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. { ● 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. { ● 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. { 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. { 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. { 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. { 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. { 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. { Performance ● Overhead +/- 2 µs/requête sur un portable; ● invariable de la disponibilité de MySQL (rappel: protocole UDP).
  • 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. { Questions ?