DENTRO DE UN
BACKEND
¿Esta mi aplicación funcionando?
Sandino Núñez / @sandinosaso
OBJETIVOS
 ¿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?
 ¿Deberíamos hacer rollback?
 ...
Agenda
 Introducción
 Logging
 Logstash
 Elasticsearch
 Kibana
 Arquitectura
 Demo
Introducción a Logging
Porque cada log nos cuenta una historia
Porque necesitamos logs
Desde el punto de vista de los desarrolladores
1. Para detectar problemas
2. Seguridad
3. Monitoreo
4. Métricas
5. Analizar tendencias
• Ayudar a debuggear el código
• Nunca en producción!!!!
Anatomía de un log
[Thu Aug 06 07:49:38.953108 2015] [notice] [pid 3343] AH00163: Apache/2.4.12 Resuming normal operations
TIMESTAMP DATA
Porque los logs no son tan divertidos?
Puedes chequear que errores tuvimos
ayer entre las 22:17 y las 22:22 hs?
Manejo de Logs (Como buscamos información)
netstat -an | awk '{print $5}' | grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-
9]{1,3}.[0-9]{1,3}" | egrep -v "(`for i in `ip addr | grep inet |grep
eth0 | cut -d/ -f1 | awk '{print $2}'`;do echo -n "$i|"| sed
's/././g;';done`127.|0.0.0)" | sort -n | uniq -c | sort -n
sandino@envy:~$ awk -F" '{print $6}' /var/log/apache2/access.log | sed 's/(([^;]+;
[^;]+)[^)]*)/(1)/' | sort | uniq -c | sort -fr
8 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/42.0.2311.90 Safari/537.36
1 Apache/2.4.12 (Ubuntu) PHP/5.5.9-1ubuntu4.9 (internal dummy connection)
Ninja de Expresiones Regulares
(Superhéroe)
Porque es complejo analizar logs?
• Distintas formas de logging
• Muchos formatos de timestamp
• No hay contexto
• Mensajes poco útiles
• No escalan
Logstash
Recolecta, Transmite, Interpreta y Almacena logs
Logstash
• Corre en JVM (JRuby)
• Open Source
• Altamente Configurable
• Centraliza Logs
• Recolecta y Parsea Logs
• Persiste y hace forward
Cómo funciona logstash?
Ejemplo Configuración Básica
Ejemplo Output Condicional
Estructurando la información
Reusando Patrones
%{SINTAXIS:SEMANTICA}
Creando nuestros propios patrones
https://grokdebug.herokuapp.com/
Inferencia de Patrones
https://grokdebug.herokuapp.com/
Elasticsearch
Almacenamiento y Motor de búsqueda escalable
Características
• Herramienta para indexar documentos y búsquedas
• La información esta disponible a través de REST
• Indexación para búsqueda de texto (basado en Apache
Lucene)
• Puede estar distribuido en múltiples "shards"
• 2 Tipos de shard: Primaria, Réplica
• Escrito en JAVA
Elasticsearch Cluster
Kibana
Interfaz Web para búsquedas sobre elasticsearch
Características
• Open Source
• Código en Node.js
• Acceso a los datos de elasticsearch a través de REST
• Permite extensión mediantes Plugines
• Creación de distintas gráficas
• Creación de Dashboards
Arquitectura
Como unir todas las partes
Centralizando la información
Arquitectura Distribuida
Moraleja?
• Que loguear? TODO !!!
• Guardar logs por mucho tiempo
• Big Data
• Movimiento DevOps
• Estadísticas de Uso de Aplicación
Demo
Estadísticas de Apache
sandinosaso@gmail.com
Twitter: @sandinosaso

Dentro de un Backend