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
Razonamiento
antes 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 guardado
de las métricas recibidas
durante x segundos
(aka flush interval)
Visualizador de
metricas
statsd
Graphite (whisper)
AWS CloudWatch
Librato (Storage)
Graphite (web app)
Librato
AWS CloudWatch (web)
Flush interval
1
1
1
1
1
1
1
7Statsd
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
2
?Statsd
Segundos que tarda en procesarse
la tarea X
4
3
6
3
3
7
2
28?Statsd
Segundos que tarda en procesarse
la tarea X
4
3
6
3
3
7
2
4Statsd
Segundos que tarda en procesarse
la tarea X
4
3
6
3
3
7
2
7Statsd
Segundos que tarda en procesarse
la tarea X
4
3
6
3
3
7
2
2Statsd
Tipos de métricas soportadas por statsd
● Counters
● Timers
● Gauges
● Sets
Contador,
no confundir
con 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.
Timers
Finalizado 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
Sets
Suma 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 Robin
UDP Load Balancer (https://github.com/felixcarmona/udp-load-balancer)
1
3
2
¿ 1 , 3 , 2 ?
se guardará solo uno
de los statsd que
reporten
Balanceando vários statsd
statsd
statsd
statsd
statsd Almacén de
métricas
1
3
2
6
Balanceador
DNS Round Robin
UDP 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
RRDtool
Graphite (whisper)
AWS CloudWatch
Librato (Storage)
Visage
Graphite (web app)
Librato
AWS 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
RRDtool
Graphite (whisper)
AWS CloudWatch
Librato (Storage)Consultas
Visage
Graphite (web app)
Librato
AWS CloudWatch (web)
Almacenes de métricas
15 días de retención de datos
$0,50 por metrica al mes
AWS CloudWatch
Round Robin Database
RRDtool
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 Python
Muy 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)
Librato
13 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 Robin
UDP Load Balancer (https://github.com/felixcarmona/udp-load-balancer)
1
3
2
1 , 3 , 2
se 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
Detrás del Backend [phpDay 2015]

Detrás del Backend [phpDay 2015]