Centralización de logs con Elasticsearch + Logstash + Kibana
y Recolección de métricas con statsd/collectd, con multiples storages y visualizadores de métricas
Repositorio con infraestructuras automatizadas + un symfony que se integra
https://github.com/felixcarmona/detras-del-backend
(vagrant up)
30. 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)
40. 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.
41. 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.
42. 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)
43. 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
44. 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)
45. 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
50. 15 días de retención de datos
$0,50 por metrica al mes
AWS CloudWatch
51. 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
52. 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)
53. 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
54. 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