take a walk on the ops side - php tour 2014

46
Take a walk on The OPS side Présenté par @bdu_p au PHP Tour à Lyon le 23 Juin 2014 BOFH

Upload: bdup

Post on 25-Jun-2015

2.816 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: Take a Walk on the OPS side - PHP Tour 2014

Take a walk on The OPS side

Présenté par @bdu_p au PHP Tour à Lyon le 23 Juin 2014

BOFH

Page 2: Take a Walk on the OPS side - PHP Tour 2014

• 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 ?

Page 3: Take a Walk on the OPS side - PHP Tour 2014

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

Page 4: Take a Walk on the OPS side - PHP Tour 2014

SysAdmin

comment mes amis me voient

Page 5: Take a Walk on the OPS side - PHP Tour 2014

comment les devs me voient

SysAdmin

Page 6: Take a Walk on the OPS side - PHP Tour 2014

comment je me vois

SysAdmin

Page 7: Take a Walk on the OPS side - PHP Tour 2014

la réalité

SysAdmin

Page 8: Take a Walk on the OPS side - PHP Tour 2014

localhost

Page 9: Take a Walk on the OPS side - PHP Tour 2014

prod

Page 10: Take a Walk on the OPS side - PHP Tour 2014

Les 40 Prochaines minutes

Page 11: Take a Walk on the OPS side - PHP Tour 2014

Debugger PHP sans PHP

Surveiller et mesurer

Donner du sens à ses logs

Bencher son applicatif

Page 12: Take a Walk on the OPS side - PHP Tour 2014

Nos Outils

puppet

capistrano zshtop

jgrepmcollective

tcpdumpsysdig

brew reprepronginx

varnish

rsync

dig

curl

wget

gdb

netcatngrep

nmap

numactlpbzip2

pigz

socat lftp

smemmtr

systat

vim

rabbitmq

cacti

sensu

logstash

seyren

statsd

graphite

collectd

haproxy

keepalived

nodejs

stunnel redis

percona-toolkit

unbound

nsd

postfix

memcachedelasticsearch

pssh

ntpd

rsyslog

iptables

kibana

ptrace iostatvmstat

git

github

jenkins

Anemometer

phppython

go

lua supervisor

emacs

perl

fio

oprofile

perf

jmeter

ab

curl-loaderruby

zfs

sar

R

egrep

mpstat

ss

ack

iotopldap

nfs

samba

ubuntu

svn

hipchat

jabber

rake

chefbackuppc

docker

Page 13: Take a Walk on the OPS side - PHP Tour 2014

• « 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

Page 14: Take a Walk on the OPS side - PHP Tour 2014

Debugger PHP sans PHP

« On va dédupliquer les clics par quatre »

Un dev

Page 15: Take a Walk on the OPS side - PHP Tour 2014

• 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

Page 16: Take a Walk on the OPS side - PHP Tour 2014

Debugger PHP sans PHP - SysDigExemple: Curl Sans Timeout !

<?php$c = curl_init();// will never workscurl_setopt($c,CURLOPT_URL,"1.1.1.1");$output = curl_exec($c);curl_close($c);?>

Page 17: Take a Walk on the OPS side - PHP Tour 2014

[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 - SysDigExemple: Curl Sans Timeout !

Page 18: Take a Walk on the OPS side - PHP Tour 2014

[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 - SysDigExemple: Curl Sans Timeout !

Page 19: Take a Walk on the OPS side - PHP Tour 2014

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 - SysDigExemple: Curl Sans Timeout !

[dev] ~ sysdig -r php.scap proc.name=php

Page 20: Take a Walk on the OPS side - PHP Tour 2014

[dev] ~ sysdig -A proc.name=php5-fpm and evt.buffer contains GET!

Debugger PHP sans PHP - SysDigExemple: Redis / SQL Live

10:43:31 php5-fpm (26697) < sendto res=44 data=*2$7HGETALL$20polls:answers:140855

Page 21: Take a Walk on the OPS side - PHP Tour 2014

11:47:17 php5-fpm (27000) < sendto res=125 data=SELECT GZDATA, DATASIZE, DATACRC, EXPFROM col1WHERE CACHEKEY = 'fed29489560a7f3d76cc0a0e1721374d'!

!

Debugger PHP sans PHP - SysDigExemple: Redis / SQL Live

[dev] ~ sysdig -A proc.name=php5-fpm and evt.buffer contains SELECT

Page 22: Take a Walk on the OPS side - PHP Tour 2014

Debugger PHP sans PHP - Curl

Tu n’as pas regardé les headers HTTP ?

Page 23: Take a Walk on the OPS side - PHP Tour 2014

Debugger PHP sans PHP - Curl

[dev] ~ curl -Iv www.clubic.com -s | sort

Connection: keep-aliveContent-Length: 268732Content-Type: text/htmlDate: Sat, 21 Jun 2014 10:14:53 GMTETag: "2681546616.268732"HTTP/1.1 200 OKServer: Cobol Server 2.0Vary: Accept-Encoding

Age: 11Via: 1.1 varnishX-Backend-Ip: 10.210.10.2X-Backend-status: 200X-Cache-Hits: 2X-Cache-Host: m6w-cache1X-Cache-IP: 141.138.91.59X-Cache-ttl: 60.000X-Cache: hitX-Varnish: 2185275681X-Your-IP: 127.0.0.1

Page 24: Take a Walk on the OPS side - PHP Tour 2014

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

Page 25: Take a Walk on the OPS side - PHP Tour 2014

Surveiller et mesurer

« On a doublé la bande passante par dix » 

Un autre dev

Page 26: Take a Walk on the OPS side - PHP Tour 2014

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

Page 27: Take a Walk on the OPS side - PHP Tour 2014

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

Page 28: Take a Walk on the OPS side - PHP Tour 2014

Surveiller et mesurer

Un outil simple = (input + output) Plein d’outils simples = pipeline

Page 29: Take a Walk on the OPS side - PHP Tour 2014

Surveiller et mesurerServeurs

Applicatif

Graphite

Grafana

Seyren

Mayday

Oculus Kale

Riemann

HipChat

HTTP

Mail

BotMySQL

Redis

Datas Collecte Reporting

RabbitMQ

Alerting Messages

Scripts

LogStashDeploy

Jenkins

Varnish

Statsd

Ticketing

CEP

Page 30: Take a Walk on the OPS side - PHP Tour 2014

Surveiller et mesurer

Serveurs HipChat

HTTP

Mail

MySQL

Redis

RabbitMQ

LogStashPing HTTP

SensuGraphite

Ticketing

RabbitMQ

Page 31: Take a Walk on the OPS side - PHP Tour 2014

Surveiller et mesurer

« Le monitoring applicatif, pourquoi ? comment ? »

« Symfony à la télé »

Kenny Dits

Olivier Mansour

Page 32: Take a Walk on the OPS side - PHP Tour 2014

Donner du sens à ses logs

« C’est un environnement de dev même en prod ! »

Anon.

Page 33: Take a Walk on the OPS side - PHP Tour 2014

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

Page 34: Take a Walk on the OPS side - PHP Tour 2014

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

Page 35: Take a Walk on the OPS side - PHP Tour 2014

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

Page 36: Take a Walk on the OPS side - PHP Tour 2014

Donner du sens à ses logs

ElasticSearch Moteur de recherche REST et distribué

Logstash Input => ( Parser | Filter ) => Output JRuby, ~ 100 plugins

Kibana Interface client AngularJS

Page 37: Take a Walk on the OPS side - PHP Tour 2014

Donner du sens à ses logs

Page 38: Take a Walk on the OPS side - PHP Tour 2014

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…

Page 39: Take a Walk on the OPS side - PHP Tour 2014

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

Page 40: Take a Walk on the OPS side - PHP Tour 2014

Temps de génération PHP

Page 41: Take a Walk on the OPS side - PHP Tour 2014

Latence selon les FAI

Page 42: Take a Walk on the OPS side - PHP Tour 2014

Bencher son applicatif

« No pain, No gain »Michael Bay

Page 43: Take a Walk on the OPS side - PHP Tour 2014

Bencher son applicatif

Au moment où vous passerez sur Capital :)

Page 44: Take a Walk on the OPS side - PHP Tour 2014

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 ?

Page 45: Take a Walk on the OPS side - PHP Tour 2014

Bencher son applicatifJmeter / 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

Page 46: Take a Walk on the OPS side - PHP Tour 2014

? Questions ?tech.m6web.fr@bdu_p

@tech

@techM6Web