Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Monitoring PHP applications

Monitoring PHP applications

Talk from local meetup.

Mariusz Gil

May 05, 2014
Tweet

More Decks by Mariusz Gil

Other Decks in Programming

Transcript

  1. MONITORING
    PHP APPS
    with metrics
    Mariusz Gil

    View Slide

  2. View Slide

  3. architecture

    View Slide

  4. backend mods

    View Slide

  5. devops

    View Slide

  6. sexy frontend

    View Slide

  7. business logic

    View Slide

  8. technology

    View Slide

  9. the client

    View Slide

  10. View Slide

  11. life guard

    View Slide

  12. monitoring
    and the answer is…

    View Slide

  13. fast
    deployment
    low
    price
    strength
    and
    power

    View Slide

  14. View Slide

  15. View Slide

  16. graphite
    even better monitoring

    View Slide

  17. carbon whisper web app

    View Slide

  18. carbon
    whisper
    web app
    metrics data charts

    View Slide

  19. carbon
    app metrics
    servers metrics

    View Slide

  20. carbon
    backtop
    bucky
    collectd
    diamond
    evenflow
    ganglia
    graphios
    grockets
    hoardid
    host sflow
    jmxtrans
    logster
    sensu
    statsd
    statsite

    View Slide

  21. web app

    View Slide

  22. php lang?
    what about

    View Slide

  23. View Slide

  24. $log = new \StatsD\Client(!
    ! [$host=‚localhost']!
    ! [, $port=8125]!
    );

    View Slide

  25. $log->start($stat);!
    $log->stop($stat [, $sampleRate]);

    View Slide

  26. $log->timing($stat, $time [, $sampleRate]);!

    View Slide

  27. $log->increment($stat [, $sampleRate]);!
    $log->decrement($stat [, $sampleRate]);

    View Slide

  28. $log->gauge($stat, $val, [, $sampleRate]);!

    View Slide

  29. View Slide

  30. View Slide

  31. !
    $cache            =  apc_cache_info();  
    $cache_user  =  apc_cache_info('user',  1);  
    $mem                =  apc_sma_info();  
    !
    $stats  =  array(  
           "mem"=>array(  
                   "segments"              =>  (int)$mem['num_seg'],  
                   "segment_size"      =>  (int)$mem['seg_size'],  
                   "total"                    =>  (int)$mem['num_seg']  *  $mem['seg_size'],  
           ),  
           "opcode"=>array(  
                   "files_count"        =>  (int)$cache['num_entries'],  
                   "files_size"          =>  (int)$cache['mem_size'],  
                   "hits"                      =>  (int)$cache['num_hits'],  
                   "misses"                  =>  (int)$cache['num_misses'],  
                   "full_count"          =>  (int)$cache['expunges'],  
           ),  
           "user"=>array(  
                   "vars_count"  =>  (int)$cache_user['num_entries'],  
                   "vars_size"    =>  (int)$cache_user['mem_size'],  
                   "hits"              =>  (int)$cache_user['num_hits'],  
                   "misses"          =>  (int)$cache_user['num_misses'],  
                   "full_count"  =>  (int)$cache_user['expunges'],  
           ),  
    );  
    !
    echo  json_encode($stats);  

    View Slide

  32. app logs?
    metrics from

    View Slide

  33. View Slide

  34. app server
    app server mobile apps

    View Slide

  35. mobile apps
    app server
    app server
    fluentd
    php php

    View Slide

  36. !
    // you can choose your own AutoLoader!
    require_once __DIR__.'/src/Fluent/Autoloader.php';!
    !
    use Fluent\Logger\FluentLogger;!
    !
    Fluent\Autoloader::register();!
    !
    $logger = new FluentLogger("localhost","24224");!
    $logger->post("debug.test",array("hello"=>"world"));!

    View Slide

  37. app server
    app server
    fluentd
    php php
    graphite
    logster
    mobile apps

    View Slide

  38. View Slide

  39. THANKS!
    @mariuszgil

    View Slide