Take a Walk on the OPS side - PHP Tour 2014

3 811 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 811
Sur SlideShare
0
Issues des intégrations
0
Intégrations
668
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

×