Take a walk on
The OPS side
Présenté par @bdu_p
au PHP Tour à Lyon
le 23 Juin 2014
BOFH
• Sysadmin depuis 4 ans @ M6Web
• <3 Forte Charge, Data, (No)SQL, systèmes distribués
• Fournisseur officiel de chats anim...
M6 Web
• ~ 30 Sites
• Catchup TV
• 60 Millions de vidéos vues / mois
• Portails Thématiques
• Sites de chaines
!
• En prop...
SysAdmin
comment mes amis me voient
comment les devs me voient
SysAdmin
comment je me vois
SysAdmin
la réalité
SysAdmin
localhost
prod
Les 40 Prochaines minutes
Debugger PHP sans PHP
Surveiller et mesurer
Donner du sens à ses logs
Bencher son applicatif
Nos Outils
puppet
capistrano zsh
top
jgrep
mcollective
tcpdump
sysdig
brew reprepronginx
varnish
rsync
dig
curl
wget
gdb
n...
• « Sans maitrise la puissance n’est rien » (Pneus Pirelli)
• « T’es dingue, c’est une truelle ça loulou » (V. Damidot) 

...
Debugger PHP sans PHP
« On va dédupliquer les clics par quatre »
Un dev
• Mais que fait php / mon code ??
• Couteau suisse du debug système
• Connections réseau, appels systèmes, fichiers ouvert...
Debugger PHP sans PHP - SysDig
Exemple: Curl Sans Timeout !
<?php	
$c = curl_init();	
// will never works	
curl_setopt($c,...
[dev] ~ sysdig -w php.scap
Enregistre tous les events du système <!>
[dev] ~ sysdig -r php.scap proc.name=php
Relit la cap...
[dev] ~ sysdig -r php.scap proc.name=php	
!
open fd=-2(ENOENT)	
name=/usr/bin/php-cli.ini 	
flags=1(O_RDONLY) mode=0
Debug...
10:26:01 php < connect res=-115(EINPROGRESS)
tuple=10.210.1.54:54365->1.1.1.1:80	
!
10:26:01 php > poll fds=4:4204 timeout...
[dev] ~ sysdig -A proc.name=php5-fpm and
evt.buffer contains GET	
!
Debugger PHP sans PHP - SysDig
Exemple: Redis / SQL Li...
11:47:17 php5-fpm (27000) 	
< sendto res=125 data=	
SELECT GZDATA, DATASIZE, DATACRC, EXP	
FROM col1	
WHERE CACHEKEY =
'fe...
Debugger PHP sans PHP - Curl
Tu n’as pas regardé les headers HTTP ?
Debugger PHP sans PHP - Curl
[dev] ~ curl -Iv www.clubic.com -s | sort	
Connection: keep-alive	
Content-Length: 268732	
Co...
Debugger PHP sans PHP - Curl
Forcer le header Host
-H "Host: www.clubic.com" http://127.0.0.1
Changer la méthode http
-X [...
Surveiller et mesurer
« On a doublé la bande passante par dix » 
Un autre dev
Graphite
• Stocke des données temporelles et affiche des graphs
• Python, multiples démons
Statsd
• Agrège des métriques p...
Collectd
• Récupère les données systèmes (CPU, RAM, I/O, Network)
• C, Plugin output vers Graphite/Statsd
Sensu
• Framewor...
Surveiller et mesurer
Un outil simple = (input + output)
Plein d’outils simples = pipeline
Surveiller et mesurer
Serveurs
Applicatif
Graphite
Grafana
Seyren
Mayday
Oculus Kale
Riemann
HipChat
HTTP
Mail
Bot
MySQL
R...
Surveiller et mesurer
Serveurs HipChat
HTTP
Mail
MySQL
Redis
RabbitMQ
LogStashPing HTTP
Sensu
Graphite
Ticketing
RabbitMQ
Surveiller et mesurer
« Le monitoring applicatif, pourquoi ? comment ? »
« Symfony à la télé »
Kenny Dits
Olivier Mansour
Donner du sens à ses logs
« C’est un environnement de dev même en prod ! »
Anon.
Donner du sens à ses logs
Mais il faut :
• Ecrire au bon format (json, csv, |, bin ? )
• Stocker au bon format (text, pigz...
Donner du sens à ses logs
$host
$upstream_cache_status
$upstream_response_time
$msec
$request_time
$remote_addr
$request
$...
Donner du sens à ses logs
Logs HTTP: Roadster
Logs PHP: Script Python
Logs MySQL: Anemometer
Logs Firewall / SysLog: RSysl...
Donner du sens à ses logs
ElasticSearch
Moteur de recherche REST et distribué
Logstash
Input => ( Parser | Filter ) => Out...
Donner du sens à ses logs
Donner du sens à ses logs
Stack ELK
• WIP @ M6Web
• Durée de rétention des logs
• Nombre et taille des messages /s
• Shipp...
Donner du sens à ses logs
R
• Outil et langage pour les stats, le machine learning etc..
• Input = Logs, SQL, CSV…
• Excel...
Temps de génération PHP
Latence selon les FAI
Bencher son applicatif
« No pain, No gain »
Michael Bay
Bencher son applicatif
Au moment où vous passerez sur Capital :)
Bencher son applicatif
Tests de Charge
• Est-ce que l’infra va tenir avec 50K utilisateurs concurrents ?
• avec 200K ? 500...
Bencher son applicatif
Jmeter / Gatling
Communauté, reporting, flexibilité, scalabilité, API
Siege / Wrk
Tests simples et ...
? Questions ?
tech.m6web.fr
@bdu_p
@tech
@techM6Web
Prochain SlideShare
Chargement dans…5
×

Take a Walk on the OPS side - PHP Tour 2014

3 760 vues

Publié le

Publié dans : Internet
0 commentaire
6 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 760
Sur SlideShare
0
Issues des intégrations
0
Intégrations
665
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
6
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Take a Walk on the OPS side - PHP Tour 2014

  1. 1. Take a walk on The OPS side Présenté par @bdu_p au PHP Tour à Lyon le 23 Juin 2014 BOFH
  2. 2. • Sysadmin depuis 4 ans @ M6Web • <3 Forte Charge, Data, (No)SQL, systèmes distribués • Fournisseur officiel de chats animés et fan de BDLV Qui suis-je ?
  3. 3. M6 Web • ~ 30 Sites • Catchup TV • 60 Millions de vidéos vues / mois • Portails Thématiques • Sites de chaines ! • En propre dans 2 DC + cloud • AS 30972
  4. 4. SysAdmin comment mes amis me voient
  5. 5. comment les devs me voient SysAdmin
  6. 6. comment je me vois SysAdmin
  7. 7. la réalité SysAdmin
  8. 8. localhost
  9. 9. prod
  10. 10. Les 40 Prochaines minutes
  11. 11. Debugger PHP sans PHP Surveiller et mesurer Donner du sens à ses logs Bencher son applicatif
  12. 12. Nos Outils puppet capistrano zsh top jgrep mcollective tcpdump sysdig brew reprepronginx varnish rsync dig curl wget gdb netcat ngrep nmap numactlpbzip2 pigz socat lftp smem mtr systat vim rabbitmq cacti sensu logstash seyren statsd graphite collectd haproxy keepalived nodejs stunnel redis percona-toolkit unbound nsd postfix memcached elasticsearch pssh ntpd rsyslog iptables kibana ptrace iostat vmstat git github jenkins Anemometer php python go lua supervisor emacs perl fio oprofile perf jmeter ab curl-loaderruby zfs sar R egrep mpstat ss ack iotop ldap nfs samba ubuntu svn hipchat jabber rake chefbackuppc docker
  13. 13. • « Sans maitrise la puissance n’est rien » (Pneus Pirelli) • « T’es dingue, c’est une truelle ça loulou » (V. Damidot) 
 A.K.A The right tool for the right job • Keep It Simple and Stupid • Sublimer les silos (Kenny Dits) • Partager ! Nos Outils Principes
  14. 14. Debugger PHP sans PHP « On va dédupliquer les clics par quatre » Un dev
  15. 15. • Mais que fait php / mon code ?? • Couteau suisse du debug système • Connections réseau, appels systèmes, fichiers ouverts, requêtes Redis, SQL, partenaires externes… Debugger PHP sans PHP - SysDig
  16. 16. Debugger PHP sans PHP - SysDig Exemple: Curl Sans Timeout ! <?php $c = curl_init(); // will never works curl_setopt($c, CURLOPT_URL,"1.1.1.1"); $output = curl_exec($c); curl_close($c); ?>
  17. 17. [dev] ~ sysdig -w php.scap Enregistre tous les events du système <!> [dev] ~ sysdig -r php.scap proc.name=php Relit la capture, filtre par processus Debugger PHP sans PHP - SysDig Exemple: Curl Sans Timeout !
  18. 18. [dev] ~ sysdig -r php.scap proc.name=php ! open fd=-2(ENOENT) name=/usr/bin/php-cli.ini flags=1(O_RDONLY) mode=0 Debugger PHP sans PHP - SysDig Exemple: Curl Sans Timeout !
  19. 19. 10:26:01 php < connect res=-115(EINPROGRESS) tuple=10.210.1.54:54365->1.1.1.1:80 ! 10:26:01 php > poll fds=4:4204 timeout=1000 …. 10:27:04 php > close fd=4(<4t>10.210.1.54:54365->1.1.1.1:80) Debugger PHP sans PHP - SysDig Exemple: Curl Sans Timeout ! [dev] ~ sysdig -r php.scap proc.name=php
  20. 20. [dev] ~ sysdig -A proc.name=php5-fpm and evt.buffer contains GET ! Debugger PHP sans PHP - SysDig Exemple: Redis / SQL Live 10:43:31 php5-fpm (26697) < sendto res=44 data= *2 $7 HGETALL $20 polls:answers:140855
  21. 21. 11:47:17 php5-fpm (27000) < sendto res=125 data= SELECT GZDATA, DATASIZE, DATACRC, EXP FROM col1 WHERE CACHEKEY = 'fed29489560a7f3d76cc0a0e1721374d' ! ! Debugger PHP sans PHP - SysDig Exemple: Redis / SQL Live [dev] ~ sysdig -A proc.name=php5-fpm and evt.buffer contains SELECT
  22. 22. Debugger PHP sans PHP - Curl Tu n’as pas regardé les headers HTTP ?
  23. 23. Debugger PHP sans PHP - Curl [dev] ~ curl -Iv www.clubic.com -s | sort Connection: keep-alive Content-Length: 268732 Content-Type: text/html Date: Sat, 21 Jun 2014 10:14:53 GMT ETag: "2681546616.268732" HTTP/1.1 200 OK Server: Cobol Server 2.0 Vary: Accept-Encoding Age: 11 Via: 1.1 varnish X-Backend-Ip: 10.210.10.2 X-Backend-status: 200 X-Cache-Hits: 2 X-Cache-Host: m6w-cache1 X-Cache-IP: 141.138.91.59 X-Cache-ttl: 60.000 X-Cache: hit X-Varnish: 2185275681 X-Your-IP: 127.0.0.1
  24. 24. Debugger PHP sans PHP - Curl Forcer le header Host -H "Host: www.clubic.com" http://127.0.0.1 Changer la méthode http -X [GET|POST|PUT|DELETE] http://127.0.0.1 Forcer le User-Agent -H "User-Agent: Cobol Browser" Envoyer-Sauver les cookies -[b|c] mesCookies.log Modifier la résolution DNS —resolv www.clubic.com:80:127.0.0.1
  25. 25. Surveiller et mesurer « On a doublé la bande passante par dix »  Un autre dev
  26. 26. Graphite • Stocke des données temporelles et affiche des graphs • Python, multiples démons Statsd • Agrège des métriques puis les flush à Graphite • NodeJS • UDP, Fire & Forget 610.525 Métriques dans graphite + 100 dashboards ~ 32.000 dans Cacti Surveiller et mesurer
  27. 27. Collectd • Récupère les données systèmes (CPU, RAM, I/O, Network) • C, Plugin output vers Graphite/Statsd Sensu • Framework de monitoring distribué • Modèle Agent - Serveur basé sur RabbitMQ • Scalable, flexible Surveiller et mesurer Seyren • Alerting basé sur des seuils Graphite • In = Noeuds Graphite, Out = HipChat, Mail, HTTP
  28. 28. Surveiller et mesurer Un outil simple = (input + output) Plein d’outils simples = pipeline
  29. 29. Surveiller et mesurer Serveurs Applicatif Graphite Grafana Seyren Mayday Oculus Kale Riemann HipChat HTTP Mail Bot MySQL Redis Datas Collecte Reporting RabbitMQ Alerting Messages Scripts LogStashDeploy Jenkins Varnish Statsd Ticketing CEP
  30. 30. Surveiller et mesurer Serveurs HipChat HTTP Mail MySQL Redis RabbitMQ LogStashPing HTTP Sensu Graphite Ticketing RabbitMQ
  31. 31. Surveiller et mesurer « Le monitoring applicatif, pourquoi ? comment ? » « Symfony à la télé » Kenny Dits Olivier Mansour
  32. 32. Donner du sens à ses logs « C’est un environnement de dev même en prod ! » Anon.
  33. 33. Donner du sens à ses logs Mais il faut : • Ecrire au bon format (json, csv, |, bin ? ) • Stocker au bon format (text, pigz, bz2, gzip, snappy ? ) • Traiter (synchrone / asynchrone) Pourquoi s’intéresser aux logs ? • En tirer des infos ! • Comprendre un incident • Vérifier un comportement • Déclencher un événement
  34. 34. Donner du sens à ses logs $host $upstream_cache_status $upstream_response_time $msec $request_time $remote_addr $request $request_method $time_local $scheme $uri $query_string $sent_http_content_type $status $bytes_sent $http_referer $http_user_agent $http_x_forwarded_for $ssl_cipher $ssl_protocol $http_x_flash_version $http_x_playback_session_id $sent_http_location $tcpinfo_rtt $tcpinfo_rttvar $tcpinfo_snd_cwnd $tcpinfo_rcv_space $geoip_country_code $geoip_city $geoip_latitude $geoip_longitude $geoip_org
  35. 35. Donner du sens à ses logs Logs HTTP: Roadster Logs PHP: Script Python Logs MySQL: Anemometer Logs Firewall / SysLog: RSyslog Central Logs Dev: ELK ~ 450 / 700 millions de lignes de log par jour ~ 50% d’infos utilisées
  36. 36. Donner du sens à ses logs ElasticSearch Moteur de recherche REST et distribué Logstash Input => ( Parser | Filter ) => Output JRuby, ~ 100 plugins Kibana Interface client AngularJS
  37. 37. Donner du sens à ses logs
  38. 38. Donner du sens à ses logs Stack ELK • WIP @ M6Web • Durée de rétention des logs • Nombre et taille des messages /s • Shipper Leger ! Logstash Forwarder • Sense + Kopf • grokdebug.herokuapp.com Et si je n’ai pas de stack ELK ? Je veux juste analyser quelques logs…
  39. 39. Donner du sens à ses logs R • Outil et langage pour les stats, le machine learning etc.. • Input = Logs, SQL, CSV… • Excel du Hipster • Ponctuel, pas automatisé Usages • Filtrer les appels lents • Avoir les stats des pages les moins cachées • Histogramme des tailles d’objets • Latences par F.A.I
  40. 40. Temps de génération PHP
  41. 41. Latence selon les FAI
  42. 42. Bencher son applicatif « No pain, No gain » Michael Bay
  43. 43. Bencher son applicatif Au moment où vous passerez sur Capital :)
  44. 44. Bencher son applicatif Tests de Charge • Est-ce que l’infra va tenir avec 50K utilisateurs concurrents ? • avec 200K ? 500K ? • Scénario VS APIs Tests de stress • Jusqu’où on peut tenir ? • Quel est le premier goulot d’étranglement ? Tests de performances • WebPerf / Expérience utilisateur • Qu’est-ce qui est acceptable ?
  45. 45. Bencher son applicatif Jmeter / Gatling Communauté, reporting, flexibilité, scalabilité, API Siege / Wrk Tests simples et rapides Tsung Pour tous les tests (MySQL, XMPP, LDAP, WebSocket, MQTT) Pour frimer en erlang SaaS Blitz.io, Blazemeter, Neotys gor Réplique le traffic en temps réel + throttling
  46. 46. ? Questions ? tech.m6web.fr @bdu_p @tech @techM6Web

×