60

Detrás del Backend [phpDay 2015]

Embed Size (px)

Citation preview

Sobre mi

@felixcarmona46

github.com/felixcarmona

linkedin.com/in/felixcarmona

Aplicación web

Aplicación web

ERROR 500

Aplicación web

Servidor

SSH

tail -f /var/log/apache2/error.log

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

tail -f /var/log/apache2/error.log

Centralización de Logs

Servidor 1

Servidor 2

Servidor 3

Servidor 4

Servidor 5

Servidor 6

Servidor 7

Procesador de Logs

Almacen de Logs

Visualizador de Logs

Logstash

Elasticsearch

Kibana

rsyslog

Tomando decisiones a la hora de desarrollar

Software

Razonamientoantes que Intuición

Razonamiento = Datos = Métricas

¿Que preguntas deberían poder respondernos nuestras métricas?

¿Esta mi aplicación funcionando?

Si no lo está, ¿que parte esta fallando?

¿Que áreas necesitan mejorar el rendimiento?

¿Necesito escalar?

¿Cual fue el impacto del último código deployado?

¿Ha repercutido sobre los usuarios?¿Negativamente?

¿Deberiamos hacer rollback?

Tipos de métricas

Métricas de negocio (Alto nivel)

Métricas de las aplicaciones

Métricas de los sistemas (Bajo nivel)

Flujos y estrategias para recolectar métricas

Recolectando métricas con statsd

Aplicación

Peticiones

Muestras

Agregador de métricas

Almacén de

métricas

Agrupación y guardadode las métricas recibidasdurante x segundos(aka flush interval)

Visualizador de metricas

statsd Graphite (whisper)AWS CloudWatchLibrato (Storage)

Graphite (web app)LibratoAWS CloudWatch (web)

Flush interval

1

1

1

1

1

1

17Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

2Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

2?Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

228?Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

24Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

27Statsd

Segundos que tarda en procesarse la tarea X

4

3

6

3

3

7

22Statsd

Tipos de métricas soportadas por statsd

● Counters● Timers● Gauges● Sets

Contador, no confundircon esto:

Alberto Contador

Counters

Si durante el transcurso de un flush interval, enviamos las siguientes muestras para una métrica determinada:+2, +2, +4, -1.Statsd los sumará y guardará simplemente un valor 7.

Timers

Sirven para colectan números.No necesariamente tienen porque ser valores de tiempo.Por ejemplo puedes guardar con ellos, el número de bytes leídos, el número de objetos en un almacén o cualquier cosa que sea un número.

TimersFinalizado el flush interval, statsd guardara 8 valores.Por ejemplo para las muestras 8.5, 2.3, 5, 3.1:● La muestra mínima recibida (2.3)● La muestra máxima recibida (8.5)

○ + percentil 90● La suma de todas las muestras recibidas (18.9)

○ + percentil 90● La media de todas las muestras recibidas (4.725)

○ + percentil 90● Número de muestras recibidas (4)

Gauges

Solo la última muestra recibida durante un flush interval es guardada.Por ejemplo, si durante un flush interval statsd recibe las siguientes muestras para una métrica determinada: 1, 7, 4, 2.Statsd solo guardará el valor 2, y ademas lo reenviará al storage en cada flush interval

SetsSuma el número de muestras recibidas (no su valor, si no la cantidad de muestras recibidas) para una métrica determinada durante un flush interval.Pero para los valores repetidos, solo contará 1.Por ejemplo, si enviamos las muestras:3, 4, 5, 2, 2, 3. Guardará un valor 4. porque descartará los repetidos, convirtiendo 3, 4, 5, 2, 2, 3 en 3, 4, 5, 2.Por lo tanto, guardará un valor 4. (4 muestras recibidas)

Balanceando vários statsd

statsd

statsd

statsd

Almacén de métricasBalanceador

DNS Round RobinUDP Load Balancer (https://github.com/felixcarmona/udp-load-balancer)

1

3

2

¿ 1 , 3 , 2 ?se guardará solo unode los statsd que reporten

Balanceando vários statsd

statsd

statsd

statsd

statsd Almacén de métricas

1

3

2

6Balanceador

DNS Round RobinUDP Load Balancer (https://github.com/felixcarmona/udp-load-balancer)

Recolectando métricas con collectd

Sistema

Consultas

Colector de métricas

Almacén de

métricas

Cada X segundos(aka Interval)

Visualizador de metricas

collectd RRDtoolGraphite (whisper)AWS CloudWatchLibrato (Storage)

VisageGraphite (web app)LibratoAWS CloudWatch (web)nagios

Sistema

Recolectando métricas con collectd + plugin statsd (escrito en C)

Aplicación

Muestras

Colector

Agregador

collectd

statsd plugin

Almacén de

métricas

Visualizador de metricas

RRDtoolGraphite (whisper)AWS CloudWatchLibrato (Storage)Consultas

VisageGraphite (web app)LibratoAWS CloudWatch (web)

Almacenes de métricas

15 días de retención de datos$0,50 por metrica al mes

AWS CloudWatch

Round Robin DatabaseRRDtool

Image from: http://www.loriotpro.com/Products/On-line_Documentation_V5/LoriotProDoc_EN/V22-RRD_Collector_RRD_Manager/V22-A1_Introduction_RRD_EN.htm

Escrito en PythonMuy similar a RRDtool (Fixed size)

Mas lento que RRDtool (Escrito en C)

Roll-up: En lugar de desechar los datos más antiguos, los va degradando a menor

resolución (60 métricas x 1 min -> 1 métrica x 1 h)

Graphite (Whisper)

Librato13 meses de retención

Roll-up como whisper:● Últimos 30 minutos: raw resolution● Últimos 60 minutos: raw resolution● Últimas 3 horas: 1 minuto de resolución● Últimas 6 horas: 1 minuto resolución● Últimas 12 horas: 15 minutos de resolución● Últimas 24 horas: 15 minutos de resolución● Últimos 3 días: 1 hora de resolución● Últimos 7 días: 1 hora de resolución● Últimas 4 semanas: 1 hora de resolución

Balanceando para Librato

statsd

statsd

statsd

LibratoBalanceador

DNS Round RobinUDP Load Balancer (https://github.com/felixcarmona/udp-load-balancer)

1

3

2

1 , 3 , 2se guardarán todos los statsd que reporten.Por lo que luego podremos leer la suma de todos (1 + 3 + 2 = 6), o la media de estos, etc

Visualizadores de métricas

Visage

Image from http://hasnaas.blogspot.com.es/2013/08/gnome-opw-update-3.html

Graphite

Image from https://www.devco.net/archives/2011/10/08/gdash-graphite-dashboard.php

AWS CloudWatch

Image from http://blogs.clogeny.com/custom-metrics-in-amazon-cloudwatch/

Librato

Image from http://blog.appharbor.com/2014/02/03/librato-integration-and-perfomance-metrics